sql_ready | Unsorted

Telegram-канал sql_ready - SQL Ready | Базы Данных

7786

Авторский канал про Базы Данных и SQL Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it

Subscribe to a channel

SQL Ready | Базы Данных

Индексы: когда они вредят вместо помощи!

Разбираем типичные ошибки при работе с индексами. Неправильное использование может замедлить базу данных вместо ускорения.

Каждый индекс замедляет INSERT/UPDATE операции:

CREATE INDEX idx_user_name ON users(name);
CREATE INDEX idx_user_email ON users(email);
CREATE INDEX idx_user_phone ON users(phone);
CREATE INDEX idx_user_city ON users(city);


При каждой вставке СУБД обновляет все 4 индекса, что сильно замедляет запись.

Функции делают индексы бесполезными:
SELECT * FROM orders WHERE YEAR(order_date) = 2024;
-- Индекс на order_date не используется


Правильно без функций:
SELECT * FROM orders WHERE order_date >= '2024-01-01' AND order_date < '2025-01-01';


Порядок столбцов критичен:
CREATE INDEX idx_user_city_age ON users(city, age);


Работает для поиска по city или city+age, но бесполезен для поиска только по age.

🔥 Поэтому используйте EXPLAIN для проверки, что индексы действительно работают!

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

❤️ Codedex — учи SQL через приключение!

Здесь ты научишься создавать таблицы, фильтровать данные, использовать операторы и агрегатные функции — всё через увлекательные практические задания.

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

➡️ SQL Ready | #ресурс

Читать полностью…

SQL Ready | Базы Данных

👋🏼 Приветствую!

Ровно год назад я создал этот канал и не только (не важно что 12 июля, главное первый пост был 8 сентября 😁).

Спасибо всем кто подписан на мой склчик, особенно благодарю тех, кто ставит реакции.

🖥 За это время контент намного стал лучше, с таких постов, до таких как сейчас.

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

В общем, поздравляю сам себя с годовщиной! 🥳

Читать полностью…

SQL Ready | Базы Данных

🖥 Транзакции и блокировка строк!

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

Создадим таблицу счетов:

CREATE TABLE Accounts (
id INT PRIMARY KEY,
name VARCHAR(50),
balance DECIMAL(10,2)
);


Начинаем транзакцию и блокируем строку:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- защита от грязных чтений
BEGIN;

SELECT balance FROM Accounts
WHERE id = 1 FOR UPDATE; -- эксклюзивная блокировка строки


Выполняем перевод и фиксируем результат:
UPDATE Accounts SET balance = balance - 500 WHERE id = 1;
UPDATE Accounts SET balance = balance + 500 WHERE id = 2;
COMMIT; -- сохраняем изменения


Откат транзакции:
ROLLBACK; -- можно вызвать до COMMIT при ошибке


🔥 FOR UPDATE ставит row-level exclusive lock: другие транзакции ждут, пока вы завершите свою.

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

Проверяем дубликаты и считаем уникальные значения!

В больших таблицах важно быстро находить повторяющиеся записи и понимать, сколько уникальных элементов. Это полезно для контроля качества данных и аналитики.

Создадим таблицу пользователей:

CREATE TABLE users (
user_id INT,
email VARCHAR(100)
);

INSERT INTO users VALUES
(1, 'alice@mail.com'),
(2, 'bob@mail.com'),
(3, 'alice@mail.com'),
(4, 'carol@mail.com'),
(5, 'bob@mail.com');


Запрос для выявления дубликатов и подсчёта уникальных email:
SELECT email, COUNT(*) AS cnt,
CASE WHEN COUNT(*)>1 THEN 'Duplicate' ELSE 'Unique' END AS status
FROM users
GROUP BY email;


Функция COUNT() + GROUP BY группирует одинаковые значения, а CASE сразу классифицирует их как дубликаты или уникальные.

Результат:
email           | cnt | status
-----------------------------
alice@mail.com | 2 | Duplicate
bob@mail.com | 2 | Duplicate
carol@mail.com | 1 | Unique


🔥 Это простой способ контролировать качество данных, выявлять ошибки и готовить отчёты для команды.

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

🥇 Пройди ЛЮБОЕ собеседование!

Большая база вопросов с реальных собеседований:

Тинькофф, Авито, Сбер, Озон, Яндекс, VK и еще 100+ компаний

20+ направлений: Frontend, Backend, DevOps, QA, Mobile и другие

60+ технологий: React, Python, Docker, Git, Java, Go, JavaScript и не только

Выбирай направление:

👩‍💻 C# 🤖 ML Engineer

👩‍💻 C/C++ 🖥 Data Science

👩‍💻 Java 👩‍💻 Python

🖥 PHP 👩‍💻 Frontend

👣 Rust 👣 Golang

👩‍💻 Node.js 💻 DevOps

👩‍💻 QA 👩‍💻 Android

👩‍💻 iOS 👩‍💻 Game Dev

🖥 Общее IT 👨‍💻 Вакансии

База обновляется еженедельно — всегда актуальные вопросы с последних собеседований.

💸 Хочешь оффер в Big Tech? Готовься с нами!

Читать полностью…

SQL Ready | Базы Данных

🖥 Завез вам шпаргалку по регулярочкам в SQL: оператор REGEXP для точечного поиска по шаблону!

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


SQL Ready | #шпора

Читать полностью…

SQL Ready | Базы Данных

SQL Murder Mystery — это интерактивная игра, в которой нужно использовать SQL-запросы для расследования виртуального убийства.

Игрокам предоставляется доступ к базе данных с информацией о преступлении, и они должны применять свои навыки работы с SQL для поиска улик, анализа данных и выявления преступника.


📌 Ссылочка: mystery.knightlab

➡️ SQL Ready | #ресурс

Читать полностью…

SQL Ready | Базы Данных

Я пожалею об этом, но ладно...

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

Если после этого не сможешь стать Сениором, то ты безнадежен!

Вот ссылка - /channel/+VHZ7JQpy8FU0OTUy

Читать полностью…

SQL Ready | Базы Данных

Репозиторий PostgreSQL Patterns Library!

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

Оставляю ссылочку: Github 📱


➡️ SQL Ready | #репозиторий

Читать полностью…

SQL Ready | Базы Данных

TutorialsPoint — это обширная платформа с уроками по множеству технологий, где курс по MySQL предлагает пошаговое руководство по основам работы с базами данных, написанию запросов и управлению данными.

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

➡️ SQL Ready | #ресурс

Читать полностью…

SQL Ready | Базы Данных

🖥 SQL-constraints — разбираемся в ограничениях на столбцы!

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


SQL Ready | #шпора

Читать полностью…

SQL Ready | Базы Данных

🖥 Находим хозяев и их питомцев!

Исходя из таблиц хозяев и питомцев, нужно вернуть имя хозяина, его питомца и разницу между их возрастами. Но при этом нужно предусмотреть, что у хозяина может питомец может потеряться.

В этой задаче:

• CASE — для ситуаций, если у хозяина нет питомца

LEFT JOIN — выбираем все записи из таблицы хозяев

ORDER BY — сортируем по имени хозяина и разнице возрастов с питомцами


🔥 — если узнал новое
🤝 если решил сам

SQL Ready | #задача

Читать полностью…

SQL Ready | Базы Данных

🖥 Связываем таблицы профессионально!

Сегодня рассмотрим возможные варианты связи записей из разных таблиц друг с другом по их логическим отношениям. Это важно понимать, чтобы правильно проектировать схемы баз данных и знать, как это устроено под капотом.

Типы связей:

• One To Many — самый распространенный тип, когда у одной записи может быть несколько соответствий в другой таблице

One To One — связь для записей со строгим отношением: у одной записи только одно уникальное соответствие

Many To Many — например, многие студенты могут слушать лекции многих преподавателей


🔥 — если узнал новое
🤝 — если уже пользовался

SQL Ready | #гайд

Читать полностью…

SQL Ready | Базы Данных

🖥 Работа с функциями NULLIF и DATEPART

NULLIF — сравнивает два значения и возвращает NULL, если они совпадают; иначе возвращает первое значение. Полезно для замены «пустых» или «невалидных» данных на NULL.

DATEPART — извлекает из даты нужную часть (год, месяц, день, час и т.д.) и возвращает её числовым значением; удобно для агрегирования и фильтрации по отдельным компонентам даты.

🔥 — если узнал новое
🤝 — если уже пользовался


SQL Ready | #метод

Читать полностью…

SQL Ready | Базы Данных

🖥 Поиск пропусков в данных — контроль качества прямо в скл!

Часто нужно не только считать суммы и средние, но и находить дыры в данных: пустые даты, отсутствующие ID, пропавшие заказы. SQL умеет это делать без скриптов и процедур.

В этом посте:

Построение календаря для поиска дней без событий.

Проверка целостности ID и нахождение «дыр».

Анализ длины пустых промежутков во временных рядах.


Это помогает находить ошибки, следить за качеством данных и строить надёжную аналитику.

➡️ SQL Ready | #гайд

Читать полностью…

SQL Ready | Базы Данных

🖥 SQL-анализ брошенных корзин и упущенной выручки!

Корзина есть, товары добавлены, но заказ так и не оформлен. Это и есть «брошенные» корзины, которые напрямую означают потерянные деньги.

Сегодня в задаче:

Находим корзины, по которым заказ не был создан в течение 24 часов;

Считаем их стоимость;

Получаем статистику по пользователям, какой средний чек и сколько денег «ушло в никуда».


В результате получаем готовый инструмент для запуска ремаркетинга, персональных скидок и писем-напоминаний.

➡️ SQL Ready | #задача

Читать полностью…

SQL Ready | Базы Данных

🖥 Функции для работы с массивами!

В этой шпаргалке собраны 8 методов для сбора, развертывания, подсчёта и преобразования массивов и строк. Короткие примеры помогут быстро ориентироваться в аналитических запросах и готовить данные для отчётов, API или BI-инструментов.

➡️ SQL Ready | #шпора

Читать полностью…

SQL Ready | Базы Данных

🖥 Накопительные итоги — running totals без циклов!

Хотите видеть, как растут продажи день за днём или отслеживать баланс по пользователям? С функциями SQL можно посчитать нарастающий итог прямо в одном запросе.

Сегодня в посте:

Считаем общий running total по датам.

Считаем накопительные суммы отдельно для каждого пользователя.

Контролируем диапазон расчёта с ROWS BETWEEN.


Это делает SQL-запросы компактными, наглядными и готовыми к использованию в отчётах.

➡️ SQL Ready | #гайд

Читать полностью…

SQL Ready | Базы Данных

ALL и ANY в SQL — учимся использовать для сравнения с подзапросами!

Эти операторы предназначены для сравнения результатов одного SELECT с результатами второго SELECT из подзапроса, что может быть удобно в некоторых случаях: если подзапрос возвращает небольшое количество строк или когда нужно сравнить значение хотя бы с одним значением из подзапроса.

Представим, что нам нужно найти все продукты, цена которых выше, чем цена любого продукта в категории Discount:

SELECT product, price 
FROM products
WHERE price > ALL (SELECT price FROM products WHERE category = 'Discount');


Теперь найдем всех клиентов, заказавших хотя бы один продукт с ценой выше 1000 рублей:
SELECT DISTINCT customer_id 
FROM orders
WHERE product_id = ANY (SELECT product_id FROM products WHERE price > 1000);


И найдем всех клиентов, которые заказывали продукты из определенной категории:
SELECT DISTINCT customer_id
FROM orders
WHERE product_id = ANY (SELECT product_id FROM products WHERE category = 'Electronics');


🔥 Но помните, что использование ALL и ANY возможно только с подзапросами и может быть неэффективным, если подзапрос возвращает большое количество строк.

➡️ SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

🖥 Полезнейшая статья от TheCode, где показано, как собрать полноценный проект с использованием SQLite!

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

• SQLite в браузере с помощью sql.js
• Веб-приложение с локальным сохранением данных
• Интерфейс с поддержкой SQL-запросов

🔊 Советую прочитать на TheCode!


➡️ SQL Ready | #статья

Читать полностью…

SQL Ready | Базы Данных

🖥 INSERT ON CONFLICT — решаем конфликты элегантно!

INSERT ON CONFLICT очень полезен в случаях, когда нужно вставить новую запись в таблицу, но если запись с таким же уникальным ключом уже существует — нужно обновить эту запись.

Следует использовать:

• Для сокращения запросов — когда вместо двух запросов (SELECT + INSERT/UPDATE) нужно выполнить только один.

Для оптимизации — производительности и минимизации количества запросов к базе данных.

Для конкурентный доступа — когда нужно избежать проблем с конкурентным доступом.


🔥 — если узнал новое
🤝 — если уже пользовался

SQL Ready | #гайд

Читать полностью…

SQL Ready | Базы Данных

Materialized Views — решение для сложных аналитических запросов!

Материализованные представления — это отдельная структура, скажем с данными о продажах за последний месяц, использование которой позволяет разгрузить основную таблицу и значительно ускорить сложные аналитические запросы.

Синтаксис создания представления:

CREATE MATERIALIZED VIEW daily_sales_summary AS


Далее мы по сути пишем обычный запрос с учетом данных, которые нам понадобятся в нашем представлении:
SELECT
DATE_TRUNC('day', order_date) AS sale_day,
SUM(amount) AS total_sales
FROM orders


Теперь выберем записи о продажах за последний месяц:
WHERE created_at > NOW - INTERVAL '30 days'


DATE_TRUNC используем для округления момента продажи до дня, чтобы затем группировать продажи по дням:
GROUP BY DATE_TRUNC('day', order_date);


Из минусов materialized views — необходимость их постоянного обновления, иначе данные могут быть неактуальными:
REFRESH MATERIALIZED VIEW daily_sales_summary;


Materialized views физически сохраняются на диске и занимают место. Используйте этот инструмент, если ваши аналитические запросы действительно сложные и выполняются медленно.

SQL Ready | #практика

Читать полностью…

SQL Ready | Базы Данных

😮 Добавлена новая база слитых курсов на 800ГБ:

Python:
/channel/+p3Xjk1JM6-RhMDYy

Программирование:
/channel/+mF35K2cer3VhNzMy

Графика и дизайн:
/channel/+VU3Y96_H5Xs0Y2Vi

Frontend и Web:
/channel/+RE1oXzjJznExYTBi

Читать полностью…

SQL Ready | Базы Данных

🖥 Фильтруем выборку грамотно — разница WHERE и HAVING

Сегодня поговорим про два метода фильтрации выборки, в чем их разница и когда использовать нужный метод:

WHERE — фильтрует строки на основе заданного условия. Работает перед агрегацией и предназначен для исключения неподходящих строк.

HAVING — фильтрует сгруппированные записи, работает с агрегатными функциями после WHERE. Нужен именно для фильтрации групп, а не строк, как WHERE.

🔥 — если узнал новое
🤝 — если уже пользовался

SQL Ready | #метод

Читать полностью…

SQL Ready | Базы Данных

👩‍💻 CS50 - Введение в Программирование (Гарвард)

Это введение в основы компьютерных наук, созданный профессором Гарвардского университета Дэвидом Маленки. Он охватывает ключевые концепции программирования и алгоритмов и является одним из самых популярных онлайн-курсов по программированию.

Ссылочка на плейлист: YouTube 🖤


SQL Ready | #курс

Читать полностью…

SQL Ready | Базы Данных

Practice SQL — образовательный сайт для обучения и практики SQL-запросов, предлагающий задачи и проверки в реальном времени.

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

➡️ SQL Ready | #ресурс

Читать полностью…

SQL Ready | Базы Данных

🖥 Полезная шпаргалка по типам полей в SQL. Полезно помнить, какие есть поля при описании структуры таблицы)

В зависимости от данных, хранимых в таблице, нужно разделять их на разные типы. Где-то должно быть поле с датой, а где-то с timestamp. Где-то VARCHAR, а где-то TEXT. Это важно учитывать при работе с DDL в SQL.

SQL Ready | #шпора

Читать полностью…

SQL Ready | Базы Данных

🖥 Собираем лояльных клиентов!

Дана таблица заказов интернет-магазина, связанная с таблицей покупателей внешним ключом через customer_id. Задача собрать данные о пользователях, совершивших более 2-х заказов за последнюю неделю.

В этой задаче:

• MIN, MAX, SUM, COUNT — агрегируем данные о пользовательских заказах.

Используем JOIN — связываем таблицы заказов и пользователей.

GROUP BY, HAVING и ORDER BY — группируем по покупателям и фильтруем по количеству заказов.


Такие запросы помогают сегментировать пользователей по частоте и сумме покупок — это основа для построения отчётности, динамики и анализа поведенческих паттернов.

SQL Ready | #задача

Читать полностью…

SQL Ready | Базы Данных

🖥 Индексы — ключ к быстрому SQL. Особенно полезны при большом объёме данных и частых фильтрациях!

Правильно выбранный тип и структура индекса значительно ускоряют SELECT-запросы, но могут замедлять INSERT и UPDATE. Всегда проверяй эффективность через EXPLAIN ANALYZE.

SQL Ready | #шпора

Читать полностью…
Subscribe to a channel