7786
Авторский канал про Базы Данных и SQL Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it
ALL и ANY в SQL — учимся использовать для сравнения с подзапросами!
Эти операторы предназначены для сравнения результатов одного SELECT с результатами второго SELECT из подзапроса, что может быть удобно в некоторых случаях: если подзапрос возвращает небольшое количество строк или когда нужно сравнить значение хотя бы с одним значением из подзапроса.
Представим, что нам нужно найти все продукты, цена которых выше, чем цена любого продукта в категории Discount:
SELECT product, price
FROM products
WHERE price > ALL (SELECT price FROM products WHERE category = 'Discount');
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 возможно только с подзапросами и может быть неэффективным, если подзапрос возвращает большое количество строк.
🖥 Полезнейшая статья от TheCode, где показано, как собрать полноценный проект с использованием SQLite!
В этой статье:• SQLite в браузере с помощью sql.js• Веб-приложение с локальным сохранением данных• Интерфейс с поддержкой SQL-запросов
🔊 Советую прочитать на TheCode!
🖥 INSERT ON CONFLICT — решаем конфликты элегантно!
INSERT ON CONFLICT очень полезен в случаях, когда нужно вставить новую запись в таблицу, но если запись с таким же уникальным ключом уже существует — нужно обновить эту запись.
Следует использовать:
• Для сокращения запросов — когда вместо двух запросов (SELECT + INSERT/UPDATE) нужно выполнить только один.
• Для оптимизации — производительности и минимизации количества запросов к базе данных.
• Для конкурентный доступа — когда нужно избежать проблем с конкурентным доступом.
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);REFRESH MATERIALIZED VIEW daily_sales_summary;
Materialized views физически сохраняются на диске и занимают место. Используйте этот инструмент, если ваши аналитические запросы действительно сложные и выполняются медленно.
😮 Добавлена новая база слитых курсов на 800ГБ:
Python:
/channel/+p3Xjk1JM6-RhMDYy
Программирование:
/channel/+mF35K2cer3VhNzMy
Графика и дизайн:
/channel/+VU3Y96_H5Xs0Y2Vi
Frontend и Web:
/channel/+RE1oXzjJznExYTBi
🖥 Фильтруем выборку грамотно — разница WHERE и HAVING
Сегодня поговорим про два метода фильтрации выборки, в чем их разница и когда использовать нужный метод:
• WHERE — фильтрует строки на основе заданного условия. Работает перед агрегацией и предназначен для исключения неподходящих строк.
• HAVING — фильтрует сгруппированные записи, работает с агрегатными функциями после WHERE. Нужен именно для фильтрации групп, а не строк, как WHERE.
🔥 — если узнал новое
🤝 — если уже пользовался
➡ SQL Ready | #метод
👩💻 CS50 - Введение в Программирование (Гарвард)Это введение в основы компьютерных наук, созданный профессором Гарвардского университета Дэвидом Маленки. Он охватывает ключевые концепции программирования и алгоритмов и является одним из самых популярных онлайн-курсов по программированию.
Ссылочка на плейлист: YouTube 🖤
Practice SQL — образовательный сайт для обучения и практики SQL-запросов, предлагающий задачи и проверки в реальном времени.
📌 Оставляю ссылочку: sql-practice.com
➡️ SQL Ready | #ресурс
🖥 Полезная шпаргалка по типам полей в SQL. Полезно помнить, какие есть поля при описании структуры таблицы)В зависимости от данных, хранимых в таблице, нужно разделять их на разные типы. Где-то должно быть поле с датой, а где-то с timestamp. Где-то VARCHAR, а где-то TEXT. Это важно учитывать при работе с DDL в SQL.
➡ SQL Ready | #шпора
🖥 Собираем лояльных клиентов!
Дана таблица заказов интернет-магазина, связанная с таблицей покупателей внешним ключом через customer_id. Задача собрать данные о пользователях, совершивших более 2-х заказов за последнюю неделю.
В этой задаче:
• MIN, MAX, SUM, COUNT — агрегируем данные о пользовательских заказах.
• Используем JOIN — связываем таблицы заказов и пользователей.
• GROUP BY, HAVING и ORDER BY — группируем по покупателям и фильтруем по количеству заказов.
🖥 Индексы — ключ к быстрому SQL. Особенно полезны при большом объёме данных и частых фильтрациях!Правильно выбранный тип и структура индекса значительно ускоряют SELECT-запросы, но могут замедлять INSERT и UPDATE. Всегда проверяй эффективность через EXPLAIN ANALYZE.
➡ SQL Ready | #шпора
🖥 Фильтруем с умом: GROUP BY и HAVING в SQL!
Иногда простого WHERE недостаточно — нужно сгруппировать данные и уже после этого фильтровать. Именно для этого и существует связка GROUP BY + HAVING.
Что важно знать:
• GROUP BY группирует строки по полям и позволяет применять агрегатные функции.
• HAVING отбирает только те группы, которые соответствуют условиям — удобно, когда фильтровать нужно по суммам или количеству
• HAVING работает даже без GROUP BY — если фильтровать агрегат по всей таблице.
🖥 Нашел курс из 10 лекций по самым востребованным темам в SQL!В ходе курса вы познакомитесь как с простейшими конструкциями SQL, так и с транзакциями, практиками бэкапов, восстановления и репликации. Также курс затрагивает темы проектирования схем БД, хранимых процедур, агрегатных и оконных функций, управления блокировками и многое другое.
Ссылочка на плейлист: YouTube 🖤
📊 Параллельное программированиеЛекция даёт хорошую базу для понимания современных многозадачных систем. На первой лекции разбирали основы параллельных вычислений, познакомились с ключевыми понятиями — процессы, потоки, параллелизм и конкурентность.
Ссылочка на плейлист: YouTube 🖤
☕️ Познавательная статья с Хабра, в которой автор реализует полноценный SQL‑пайплайн когортного анализа!
В этой статье:• Определение исходной точки на примере таблицы заказов
• Шаблон построения когорт и связывание с заказами через CTEs
• Разбор edge-кейсов, построение LTV по когортам и RFM-анализ с сегментацией
🔊 Продолжай чтение на Habr!
🥇 Пройди ЛЮБОЕ собеседование!
Большая база вопросов с реальных собеседований:
→ Тинькофф, Авито, Сбер, Озон, Яндекс, 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: оператор REGEXP для точечного поиска по шаблону!
REGEXP — инструмент, который удобно использовать, если требуется сложный и гибкий поиск по шаблону. Например, поиск по нескольким условиям или использование специальных символов и диапазонов.
➡ SQL Ready | #шпора
SQL Murder Mystery — это интерактивная игра, в которой нужно использовать SQL-запросы для расследования виртуального убийства.
Игрокам предоставляется доступ к базе данных с информацией о преступлении, и они должны применять свои навыки работы с SQL для поиска улик, анализа данных и выявления преступника.
Я пожалею об этом, но ладно...
В общем сливаю вам самый топовый источник слитых курсов, бесплатных книг, программ, лучших шпаргалок для разработчиков.
Если после этого не сможешь стать Сениором, то ты безнадежен!
Вот ссылка - /channel/+VHZ7JQpy8FU0OTUy
Репозиторий PostgreSQL Patterns Library!
Он идет с коллекцией шаблонов и практик для оптимизации запросов и работы с базами данных PostgreSQL, направленный на повышение производительности и упрощение разработки.
Оставляю ссылочку: Github 📱
TutorialsPoint — это обширная платформа с уроками по множеству технологий, где курс по MySQL предлагает пошаговое руководство по основам работы с базами данных, написанию запросов и управлению данными.
📌 Оставляю ссылочку: tutorialspoint.com
➡️ SQL Ready | #ресурс
🖥 SQL-constraints — разбираемся в ограничениях на столбцы!
Правильное использование этих ограничений помогает избежать нежелательных ситуаций, например, нескольких пользователей с одинаковыми id или ссылки на несуществующих записей в других таблицах, отсутствия обязательных данных.
➡ SQL Ready | #шпора
🖥 Находим хозяев и их питомцев!
Исходя из таблиц хозяев и питомцев, нужно вернуть имя хозяина, его питомца и разницу между их возрастами. Но при этом нужно предусмотреть, что у хозяина может питомец может потеряться.
В этой задаче:
• CASE — для ситуаций, если у хозяина нет питомца
• LEFT JOIN — выбираем все записи из таблицы хозяев
• ORDER BY — сортируем по имени хозяина и разнице возрастов с питомцами
🖥 Связываем таблицы профессионально!
Сегодня рассмотрим возможные варианты связи записей из разных таблиц друг с другом по их логическим отношениям. Это важно понимать, чтобы правильно проектировать схемы баз данных и знать, как это устроено под капотом.
Типы связей:
• One To Many — самый распространенный тип, когда у одной записи может быть несколько соответствий в другой таблице
• One To One — связь для записей со строгим отношением: у одной записи только одно уникальное соответствие
• Many To Many — например, многие студенты могут слушать лекции многих преподавателей
🖥 Работа с функциями NULLIF и DATEPART
• NULLIF — сравнивает два значения и возвращает NULL, если они совпадают; иначе возвращает первое значение. Полезно для замены «пустых» или «невалидных» данных на NULL.
• DATEPART — извлекает из даты нужную часть (год, месяц, день, час и т.д.) и возвращает её числовым значением; удобно для агрегирования и фильтрации по отдельным компонентам даты.
🔥 — если узнал новое
🤝 — если уже пользовался
➡ SQL Ready | #метод
📊 Изучение программирования. SQLSQL - язык программирования для манипулирования и управления реляционными базами данных, от простых Email-ов и логинов пользователей до хранения паролей и построения сложных схем. Обо всем этом и о многом другом - в этом курсе!
Ссылочка на плейлист: YouTube 🖤
🖥 Выбираем топ-3 активных пользователей!
Даны таблицы пользователей и операций по счету. Нужно написать SQL-запрос, который выводит топ-3 самых активных пользователей по общей сумме переводов за последние 30 дней.
В этой задаче:
• Агрегация по сумме переводов — подсчитаем, сколько всего перевел каждый пользователь.
• Соединим таблицы через JOIN — для связи пользователей с переводами.
• GROUP BY — группируем записи по пользователям.
🥺 Маст хэв статья с Хабра, в которой вы узнаете, как визуализировать статистику использования ваших индексов!
В этой статье:• Подготовка окружения с помощью plotly, numpy, pandas и kaleido
• Скрипт для создания тепловой диаграммы в виде TreeView
• Анализ степени активности таблиц и их индексов
🔊 Подробное руководство лежит на Habr!
☕️ Делюсь всемирным ресурсом исповедующий принцип соревновательного программирования — HackerRank!
Десятки челленджей в виде SQL-запросов по разным уровням сложности и темам: базовые или продвинутые запросы, выборки на агрегацию или с применением JOIN — выбирать тебе!
📌 Оставляю ссылочку: hackerrank.com
➡️ SQL Ready | #ресурс
🖥 Ленивые INSERTы или как эффективно мержить таблицы!
Рассмотрим два простых способа заполнения таблиц уже готовыми данными из другой таблицы:
• SELECT INTO — создает новую таблицу и заполняет её данными, полученными из запроса. Столбцы новой таблицы получают имена и типы данных, связанные с выходными столбцами SELECT
• INSERT SELECT — заполняет указанную таблицу данными из указанной таблицы. При этом таблицы должны иметь одинаковую структуру столбцов
🔥 — если узнал новое
🤝 — если уже пользовался
➡ SQL Ready | #метод