Шпаргалка по подзапросам и агрегатным функциям SQL включает основные приёмы использования подзапросов и методов для вычисления сумм, средних, подсчётов и других операций над данными, упрощая анализ и обработку информации в запросах.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍5
NULL в SQL обозначает отсутствие значения и может привести к неожиданным результатам. Разберём несколько подводных камней.
NULL в условиях WHERE
Представим таблицу employees, где столбец department может быть NULL, если сотрудник не распределён. Запрос:
SELECT * FROM employees WHERE department != 'HR';
На первый взгляд, этот запрос должен выбрать всех, кто не в HR, но строки с NULL будут исключены! Сравнение NULL != 'HR' даёт неопределённый результат (UNKNOWN), из-за чего строки не включаются в выборку.
Как правильно учитывать NULL?
Используйте IS DISTINCT FROM или COALESCE, чтобы учитывать NULL:
SELECT * FROM employees WHERE department IS DISTINCT FROM 'HR';
-- или
SELECT * FROM employees WHERE COALESCE(department, '') != 'HR';
NULL в агрегатах
В таблице sales столбец discount может содержать NULL, если скидка не применялась. Если посчитать среднее значение:
SELECT AVG(discount) FROM sales;
NULL-значения будут проигнорированы, и средняя скидка может быть искажена. Используйте COALESCE:
SELECT AVG(COALESCE(discount, 0)) FROM sales;
Поэтому не спускайте глаз с NULL, чтобы избежать неожиданных результатов в фильтрации и агрегатах.
Жми 🔥 если понравился пост
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34👍11🤝5
📖 SQL Pocket Guide
⬇️ Cкачать книгу
➡️ SQL Ready | #книга
Компактное справочное пособие, охватывающее основные операторы и функции SQL, что делает его идеальным для быстрого поиска информации в повседневной работе.Автор: Элис Жао
Год: 2024
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥6
Если вам не нужно создавать целую таблицу для некоторых вычислений, то вы можете создать временную таблицу, как раз об этом вы узнаете в этом посте:
• Создание временной таблицы
• Обновление данных в таблице
• Удаление временной таблицы
Временные таблицы упрощают работу с временными данными в сложных SQL-запросах.
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20🤝7👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Vanna AI — нейросеть, которая позволяет пользователям взаимодействовать с базами данных с помощью простого языка, автоматически переводя запросы на SQL.
📌 Ссылочка: https://vanna.ai/
➡️ SQL Ready | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5
Когда мы работаем с большими таблицами в SQL, использование индексов может значительно ускорить выполнение запросов, но их неправильное применение часто приводит к обратному эффекту.
Во-первых не всегда полезно устанавливать индекс, на каждый столбец этого делать уж точно не стоит. Каждый раз, когда мы используем
INSERT, UPDATE или DELETE, СУБД обновляет все индексы, что увеличивает затраты на производительность.Оптимальным решением будет индексировать только ключевые столбцы, часто используемые в фильтрах
WHERE или JOIN.-- Пример: индексирование часто используемого столбца
CREATE INDEX idx_user_age ON users(age);
-- Избыточный индекс на редко используемый столбец
CREATE INDEX idx_user_gender ON users(gender);
B-Tree и Hash-индексы. Стандартный B-Tree индекс эффективен для сортировки и диапазонных запросов (например,
BETWEEN). Но для точных соответствий = Hash-индексы могут быть предпочтительнее:-- B-Tree индекс для диапазонных значений
CREATE INDEX idx_order_date ON orders(order_date);
-- Hash-индекс для точного поиска
CREATE INDEX idx_product_id_hash ON products USING HASH (product_id);
И еще момент, если у нас выходит сложный запрос
WHERE, то важно учитывать порядок полей. Например, индекс на (col1, col2) будет эффективен, если col1 используется в фильтре или сортировке перед col2.-- Создаем композитный индекс
CREATE INDEX idx_comp_col1_col2 ON table_name(col1, col2);
-- Запрос, использующий оба поля индекса
SELECT * FROM table_name WHERE col1 = 'value' AND col2 = 'value';
-- Запрос, где используется только col2, неэффективен
SELECT * FROM table_name WHERE col2 = 'value';
В последнем запросе композитный индекс не будет использоваться оптимально, если col2 идет вторым в индексе.
Ставь 🔥 за полезный кусок знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥11
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥12🤝8
📖 SQL Библия пользователя
⬇️ Cкачать книгу
➡️ SQL Ready | #книга
Книга представляет собой уникальный практический справочник, разработанный специально для пользователей баз данных. Она подойдет и для начинающих, так и для профессионалов.Автор: Алекс К. Борис Т.
Год: 2010
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
Если у вас появились повторяющиеся записи в таблицах, но вам это не нужно, то воспользуйтесь слайдами сверху для устранения лишних строк.
В посте мы разбираем:
• Составление подзапроса дубликатов
• Удаление дубликатов с помощью временных данных
• Удаление при помощи соединения
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21🤝8👍3