ch
Feedback
Пишем на SQL

Пишем на SQL

前往频道在 Telegram

Уроки по SQL. Изучаем базы данных на примере СУБД ORACLE, MySQL, MS SQL Server, PostgreSql Мой курс по SQL и базам данных: https://prime-soft.biz/courses/sql Связь со мной @iliahohlov

显示更多
1 900
订阅者
-124 小时
+17
-130
帖子存档
Всем привет! Предлагаю очередную задачу по базам данных. Есть таблицы 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

Анекдот на тему баз данных 😀 Почему программист расстался с девушкой-администратором баз данных? — Она постоянно проверяла его связи.

Друзья, всем привет! Можете поделиться, пожалуйста, какие СУБД (базы данных) Вы преимущественно используете для своих проектов (не связанных с работой по найму)?
Anonymous voting

Как можно в команде 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

Требуется удалить дату DATE_EN для сессии с идентификатором 3. Для этого необходимо воспользоваться командой:
Anonymous voting

Всем доброе утро! Есть таблица сессий 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

Какой из способов наиболее эффективно улучшит производительность этого запроса?
Anonymous voting

Всем привет! Предлагаю небольшую задачу по 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'; При этом выполнение запроса занимает значительное время.

Какое значение будет получено в результате запроса: SELECT SUM(AMOUNT) AS PAY_SUM FROM PAYMENTS
Anonymous voting

Таблица 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

При выполнении команды INSERT INTO GOODS (ARTICLE, NAME, DATE_CREATE) VALUES ('111', 'Некоторый товар') какое значение вставится в столбце DATE_CREATE?
Anonymous voting

Ещё одна небольшая задача с нашей табличкой GOODS (только попробуйте ответить неправильно 😉): CREATE TABLE GOODS ( ARTICLE VARCHAR(20) NOT NULL PRIMARY KEY, NAME VARCHAR(100) NOT NULL, DATE_CREATE DATE DEFAULT CURRENT_DATE)

Как можно оптимизировать выполнение этого запроса?
Anonymous voting

Всем привет! Предлагаю очередную задачу. В базе данных 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.

🚀 Стартует интенсив по SQL и PostgreSQL! 🚀 📅 3 мая | 👥 Группа до 10 человек | 🕘 По Сб и Вс в 9:00 🔹 10 насыщенных онлайн-занятий (с записями) 🔹 Максимум практики – работаем вместе, а не просто слушаем! 🔹 Закрытый Telegram-чат с материалами и поддержкой 🔹 Сертификат после завершения курса 🔹 Помощь с резюме для старта в профессии 💡 Идеально для тех, кто хочет: ✅ Освоить PostgreSQL с нуля ✅ Научиться писать эффективные запросы ✅ Получить реальные навыки для работы 📌 Успей записаться! Группа маленькая – места ограничены. 🔗 Подробнее: https://prime-soft.biz/courses/postgresql

Небольшой сборник задач на написание SQL-запросов (от простых к сложным). Ссылка на скачивание тестовой базы данных (PostgreSQL) в файле.

Какая связь между таблицами PRODUCTS и PRICES_HIST?
Anonymous voting

Всем доброго понедельника! В базе данных, помимо прочих, есть таблица 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. Полный курс по 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 участников — что наступит раньше. Успейте забронировать своё место по сниженной цене!

Хочу поделиться одним замечательным отзывом, который недавно получил от ученика после прохождения курса "Программирования в PL/SQL (ORACLE)": Спасибо Вам большое за этот курс и возможность прокачать свои знания в PLSQL! Курс оказался невероятно полезным и структурированным. Материал подается доступно, с практическими примерами, что позволяет легко усваивать даже сложные темы. Особенно понравилось, что было много практических заданий, которые помогли закрепить теорию на практике. После прохождения курса я чувствую себя гораздо увереннее в написании сложных SQL-запросов, работе с хранимыми процедурами и оптимизации кода. Обязательно буду рекомендовать этот курс коллегам и друзьям! Еще раз большое спасибо за ваш труд и качественное обучение! Сергей, Вам спасибо, что обучались разработке в ORACLE со мной! Был очень рад пройти с Вами весь курс программирования!