SQL Ready | Базы Данных
10.4K subscribers
659 photos
28 videos
2 files
330 links
Авторский канал про Базы Данных и SQL
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

Реклама на бирже: https://telega.in/c/sql_ready
加入频道
🖥 Integrity constraints — фундамент корректных данных!

Они защищают таблицы от мусора, дублирования и логических ошибок. Используй ограничения, чтобы база вела себя предсказуемо и честно.

➡️ SQL Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥137👍5
☕️ Наткнулся на любопытную статью — автор написал собственный in-memory движок для MariaDB.

В этой статье:

• Пошаговая сборка MariaDB из исходников и первые «твики» результатов
• Реализация минимального движка MEMEM с поддержкой CREATE/INSERT/SELECT
• Отличие API движков хранения MariaDB от Postgres

🔊 Подробное руководство лежит на Habr!


➡️ SQL Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🔥4
PARTITION PRUNING — читаем только нужные данные!

Когда таблица разрастается до сотен миллионов строк, даже простые запросы начинают тормозить. Но часто нам нужен только один месяц — зачем читать всё?

Чтобы ускорить выборку, разобьём таблицу на разделы по дате с помощью range partitioning:
CREATE TABLE sales (
sale_date DATE,
amount NUMERIC
) PARTITION BY RANGE (sale_date);


Теперь создадим конкретные партиции — каждая отвечает за свой месяц:
CREATE TABLE sales_2024_01 PARTITION OF sales
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');

CREATE TABLE sales_2024_02 PARTITION OF sales
FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');


Представим, что нам нужно посчитать сумму продаж только за январь 2024 года:
SELECT SUM(amount)
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31';


Добавим EXPLAIN ANALYZE, чтобы увидеть, как именно Postgres выполняет запрос:
EXPLAIN ANALYZE
SELECT SUM(amount)
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31';


🔥 Важно: pruning работает только, если условие по дате написано явно — без функций, кастов и переменных.

➡️ SQL Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍96🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
😎 W3Resource — онлайн-площадка, предназначенная для прокачки навыков работы с базами данных!

На сайте собраны задания, распределённые по темам — от простых выборок до сложных подзапросов и агрегирования. Каждое упражнение снабжено детальным разбором и готовым решением

📌 Оставляю ссылочку: w3resource.com

➡️ SQL Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
🖥 Анализ отменённых заказов! (cancel rate)

В этой задаче напишем SQL-запрос, который поможет выявить, как часто пользователи отменяют заказы за последние 90 дней — и покажем это в разрезе дней и недель.

Что делаем:

Считаем общее количество заказов и отдельно — отменённые (status = 'canceled').

Используем CTE для упрощения структуры запроса и фильтрацию по последним 90 дням.

Группируем по неделям с помощью DATE_TRUNC, чтобы отследить тренды.


Если процент отмен выше 7 % — это сигнал для бизнеса: стоит проверить, не возникают ли сбои в доставке, оплате или интерфейсе.

SQL Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥166👍4
🖥 Ищем активные фотосессии и фотографии фотографа №7!

Имеем три таблицы: ps — фотосессии, ps_data — данные фотосессий и photo — фотографии. Таблицы ps_data и photo связаны с таблицей ps psid.

Необходимо вернуть активные фотосессии и принадлежащие им активные фотографии фотографа под номером 7.

В этой задаче:
• CTE — разбиваем сложный запрос с дабл джоинами на несколько простых.

WHERE — для фильтрации активный фотосессий нужного фотографа и активных фотографий.

JOIN — для связи фотографий и фотосессий.


🔥 — если узнал что-то новое
🤝 если знал решение


SQL Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍76🤝1
ON CONFLICT DO NOTHING — апсерты без ошибок!

Когда вы вставляете данные в таблицу с уникальными ограничениями, может прилететь ошибка: дубликат ключа нарушает уникальность. Особенно обидно, если часть данных уже вставлена, а часть — нет.

Чтобы обойти это — используем ON CONFLICT DO NOTHING. Он просто пропустит строки, которые уже есть.

Допустим, у нас есть таблица с пользователями, где email должен быть уникальным:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email TEXT UNIQUE
);


Попробуем вставить сразу несколько строк, включая дубликат:
INSERT INTO users (email)
VALUES ('[email protected]'),
('[email protected]'),
('[email protected]'); -- дубликат!


Результат будет неудачным — Postgres выдаст ошибку и отменит всю операцию. Однако с ON CONFLICT всё работает иначе:
INSERT INTO users (email)
VALUES ('[email protected]'),
('[email protected]'),
('[email protected]')
ON CONFLICT DO NOTHING;


🔥 Теперь база данных вставит только уникальные строки, а повторяющиеся — просто пропустит без лишнего шума.

➡️ SQL Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍8🔥6