Пишем на SQL
رفتن به کانال در Telegram
Уроки по SQL. Изучаем базы данных на примере СУБД ORACLE, MySQL, MS SQL Server, PostgreSql Мой курс по SQL и базам данных: https://prime-soft.biz/courses/sql Связь со мной @iliahohlov
نمایش بیشتر1 900
مشترکین
-124 ساعت
+17 روز
-130 روز
آرشیو پست ها
1 900
Всем привет! Предлагаю очередную задачу по базам данных.
Есть таблицы PRODUCTS (товары) и PRICES_HIST (история цен товаров), с которыми мы уже работали ранее:
CREATE TABLE PRODUCTS (
ID INT PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
DESCRIPTION VARCHAR(300) NULL DEFAULT NULL);
CREATE TABLE PRICES_HIST (
ID_PRODUCT INT,
DATE_PRICE DATE /* дата, начиная с которой будет действовать цена товара */,
VALUE_PRICE DECIMAL(10, 2),
PRIMARY KEY (ID_PRODUCT, DATE_PRICE),
CONSTRAINT FK1 FOREIGN KEY (ID_PRODUCT) REFERENCES PRODUCTS (ID)
)
Есть два SQL-запроса:
1)
SELECT ID,
NAME,
(SELECT MAX(VALUE_PRICE)
FROM PRICES_HIST
WHERE ID_PRODUCT = PRODUCTS.ID) AS PRICE
FROM PRODUCTS
2)
SELECT PRODUCTS.ID,
PRODUCTS.NAME,
MAX(PRICES_HIST.VALUE_PRICE) AS PRICE
FROM PRODUCTS
LEFT JOIN PRICES_HIST
ON PRICES_HIST.ID_PRODUCT = PRODUCTS.ID
GROUP BY PRODUCTS.ID,
PRODUCTS.NAME
1 900
Анекдот на тему баз данных 😀
Почему программист расстался с девушкой-администратором баз данных?
— Она постоянно проверяла его связи.
1 900
Друзья, всем привет!
Можете поделиться, пожалуйста, какие СУБД (базы данных) Вы преимущественно используете для своих проектов (не связанных с работой по найму)?
1 900
Как можно в команде SELECT при генерации данных в столбцы использовать значения других столбцов, не используя запросы из запросов и CTE.
Значения в некоторые столбцы могут формироваться сложным расчетами или подзапросами. Теперь представь, что при определённом получаемом значении в одном из таких столбцов, значение в соседнем столбце должно формировать по-другому, или даже своим подзапросом на основании полученного значения в предыдущем столбце. Как реализовать подобное, не прибегая к запросу из получаемой таблицы данных и не используя CTE?
В СУБД MySql и MariaDB есть пользовательские переменные (те, что с собачкой @), которые можно использовать прямо пока выводятся данные командой SELECT, строчка за строчкой. Посмотри:
SELECT t.*,
@id_table := (select ...) ID_TABLE,
(select count(*) from places where id_table = @id_table and is_busy = 0) COUNT_FREE_PLACES
FROM .....
В ПРЕДПОСЛЕДНИЙ(!) столбец формируется значение идентификатора некоторого столика ресторана.
В ПОСЛЕДНИЙ(!) столбец рассчитывается количество свободных мест того столика ресторана, идентификатор которого выведен в предыдущем столбце. В пользовательскую переменную @id_table будет положено некоторое значение, оно же и будет выведено в качестве данных этого столбца. В следующий столбец подзапрос получит данные, опираясь на значение этой переменной. Главное, чтобы эти столбцы формировать в указанном порядке. Сначала столбец, в результате расчёта которого получим значение в переменную, а затем столбец, который будет использовать значение этой переменной. Удобно и легко, да? И эта возможность - лишь верхушка айсберга возможностей использования пользовательских переменных!
В примере выше для каждой строки такой расчёт выводит данные независимо от предыдущей строки, так как в каждой новой строке переменная @id_table получает новое значение и по-новой выполняется подзапрос на основании её значения.
Ещё про пользовательские переменные я писал здесь: https://dzen.ru/a/Zcv6A63PZGDLYLHc
1 900
Требуется удалить дату DATE_EN для сессии с идентификатором 3. Для этого необходимо воспользоваться командой:
1 900
Всем доброе утро!
Есть таблица сессий TBL_SESSIONS:
ID DATE_ST DATE_EN
1 12.03.25 14.03.25
2 15.03.25 16.03.25
3 19.03.25 22.03.25
1 900
Какой из способов наиболее эффективно улучшит производительность этого запроса?
1 900
Всем привет!
Предлагаю небольшую задачу по SQL на тему оптимизации запросов и индексов. В базе данных есть таблица ORDERS, определенная так:
CREATE TABLE ORDERS (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
DATE_CREATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
USER_ID INT NOT NULL,
STATUS VARCHAR(20) NOT NULL
);
В таблице миллионы записей. Часто используется следующий запрос:
SELECT * FROM ORDERS WHERE USER_ID = 123 AND STATUS = 'completed';
При этом выполнение запроса занимает значительное время.
1 900
Какое значение будет получено в результате запроса:
SELECT SUM(AMOUNT) AS PAY_SUM FROM PAYMENTS
1 900
Таблица PAYMENTS определена следующим образом:
CREATE TABLE PAYMENTS (
ID NUMBER PRIMARY KEY,
DATE_PAY DATE DEFAULT SYSDATE,
AMOUNT NUMBER) и имеет данные:
ID DATE_PAY AMOUNT
1 22.04.2025 300
2 22.04.2025 150
3 23.04.2025 null
1 900
При выполнении команды INSERT INTO GOODS (ARTICLE, NAME, DATE_CREATE) VALUES ('111', 'Некоторый товар') какое значение вставится в столбце DATE_CREATE?
1 900
Ещё одна небольшая задача с нашей табличкой GOODS (только попробуйте ответить неправильно 😉):
CREATE TABLE GOODS (
ARTICLE VARCHAR(20) NOT NULL PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
DATE_CREATE DATE DEFAULT CURRENT_DATE)
1 900
Всем привет!
Предлагаю очередную задачу. В базе данных PostgreSQL, среди прочих, есть таблица выставленных счетов INVOICES:
CREATE TABLE INVOICES (
ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
DATE_CREATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
ID_CLIENT INTEGER NOT NULL,
DESCRIPTION VARCHAR(300),
CONSTRAINT FK1 FOREIGN KEY (ID_CLIENT) REFERENCES CLIENTS(ID));
CREATE INDEX IND_INVOICES_DATE_CREATE ON INVOICES (DATE_CREATE);
В некотором отчёте АБС количество счетов, выставленных за текущий день формируется SQL запросом:
SELECT COUNT(*) COUNT_INV FROM INVOICES WHERE DATE(DATE_CREATE) = CURRENT_DATE.
1 900
🚀 Стартует интенсив по SQL и PostgreSQL! 🚀
📅 3 мая | 👥 Группа до 10 человек | 🕘 По Сб и Вс в 9:00
🔹 10 насыщенных онлайн-занятий (с записями)
🔹 Максимум практики – работаем вместе, а не просто слушаем!
🔹 Закрытый Telegram-чат с материалами и поддержкой
🔹 Сертификат после завершения курса
🔹 Помощь с резюме для старта в профессии
💡 Идеально для тех, кто хочет:
✅ Освоить PostgreSQL с нуля
✅ Научиться писать эффективные запросы
✅ Получить реальные навыки для работы
📌 Успей записаться! Группа маленькая – места ограничены.
🔗 Подробнее: https://prime-soft.biz/courses/postgresql
1 900
Небольшой сборник задач на написание SQL-запросов (от простых к сложным). Ссылка на скачивание тестовой базы данных (PostgreSQL) в файле.
1 900
Всем доброго понедельника!
В базе данных, помимо прочих, есть таблица PRODUCTS:
CREATE TABLE PRODUCTS (
ID INT PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
DESCRIPTION VARCHAR(300) NULL DEFAULT NULL);
и таблица PRICES_HIST:
CREATE TABLE PRICES_HIST (
ID_PRODUCT INT,
DATE_PRICE DATE,
VALUE_PRICE DECIMAL(10, 2),
PRIMARY KEY (ID_PRODUCT, DATE_PRICE),
CONSTRAINT FK1 FOREIGN KEY (ID_PRODUCT) REFERENCES PRODUCTS (ID)
)
1 900
Привет, друзья!
Приглашаю вас на обучение с нуля до уверенного уровня по востребованным направлениям:
1. Полный курс по SQL и базам данных.
Изучим всё нужное по реляционным БД, SQL-запросы, практику на реальных задачах.
Стоимость: 9 500 ₽
Записаться и оплатить: https://prime-soft.biz/invoice/300
2. Курс программирования в PL/SQL (ORACLE).
Для тех, кто хочет профессионально освоить разработку в ORACLE, научиться составлять алгоритмы, создавать процедуры, функции, пакеты, триггеры.
Стоимость: 11 900 ₽
Записаться и оплатить: https://prime-soft.biz/invoice/307
Выгодно! Пакет из двух курсов — всего за 14 900 ₽
(экономия 6 500 ₽)
Записаться и оплатить:
https://prime-soft.biz/invoice/308
Важно!
Предложение действует только 3 дня или до набора первых 10 участников — что наступит раньше.
Успейте забронировать своё место по сниженной цене!
1 900
Хочу поделиться одним замечательным отзывом, который недавно получил от ученика после прохождения курса "Программирования в PL/SQL (ORACLE)":
Спасибо Вам большое за этот курс и возможность прокачать свои знания в PLSQL!
Курс оказался невероятно полезным и структурированным. Материал подается доступно, с практическими примерами, что позволяет легко усваивать даже сложные темы.
Особенно понравилось, что было много практических заданий, которые помогли закрепить теорию на практике.
После прохождения курса я чувствую себя гораздо увереннее в написании сложных SQL-запросов, работе с хранимыми процедурами и оптимизации кода.
Обязательно буду рекомендовать этот курс коллегам и друзьям!
Еще раз большое спасибо за ваш труд и качественное обучение!
Сергей, Вам спасибо, что обучались разработке в ORACLE со мной! Был очень рад пройти с Вами весь курс программирования!
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
