ar
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 со мной! Был очень рад пройти с Вами весь курс программирования!