SELECT, WHERE, операторы сравнения, LIKE, IN, BETWEEN, работа с NULL
Научитесь извлекать данные из базы данных с помощью SQL.
Базовый синтаксис выборки данных:
SELECT столбец1, столбец2, ...
FROM таблица
WHERE условие;-- Выбрать все столбцы
SELECT * FROM users;
-- Выбрать конкретные столбцы
SELECT id, name, email FROM users;Рекомендация: Избегайте
SELECT *в продакшене. Указывайте нужные столбцы явно — это улучшает читаемость и производительность.
SELECT
name AS "Имя",
email AS "Электронная почта",
age AS "Возраст (лет)"
FROM users;-- Уникальные города
SELECT DISTINCT city FROM users;
-- Уникальные комбинации
SELECT DISTINCT city, age FROM users;DISTINCT удаляет дубликаты комбинаций значений.
| Оператор | Описание |
|---|---|
= | Равно |
!= или <> | Не равно |
> | Больше |
< | Меньше |
>= | Больше или равно |
<= | Меньше или равно |
SELECT * FROM users WHERE age = 25;
SELECT * FROM users WHERE age > 25;
SELECT * FROM users WHERE age >= 18 AND age <= 65;-- AND: оба условия истинны
SELECT * FROM users WHERE age > 25 AND city = 'Moscow';
-- OR: хотя бы одно условие истинно
SELECT * FROM users WHERE age = 25 OR age = 30;
-- NOT: инверсия условия
SELECT * FROM users WHERE NOT age > 25;
-- Эквивалентно: WHERE age <= 25-- Эквивалентно: age = 25 OR age = 30 OR age = 35
SELECT * FROM users WHERE age IN (25, 30, 35);
-- Отрицание
SELECT * FROM users WHERE age NOT IN (25, 30, 35);-- Включая границы: от 18 до 65 включительно
SELECT * FROM users WHERE age BETWEEN 18 AND 65;
-- Эквивалентно: age >= 18 AND age <= 65Важно: BETWEEN включает обе границы!
| Шаблон | Описание |
|---|---|
'A%' | Начинается на A |
'%A' | Заканчивается на A |
'%A%' | Содержит A |
'_A%' | Второй символ — A |
'_ _ A' | Третий символ — A (2 любых + A) |
-- Email содержит gmail
SELECT * FROM users WHERE email LIKE '%gmail%';
-- Имя начинается на A
SELECT * FROM users WHERE name LIKE 'A%';
-- Имя из 3 символов, где второй — 'o'
SELECT * FROM users WHERE name LIKE '_o_';-- Проверка на NULL
SELECT * FROM users WHERE email IS NULL;
-- Проверка на NOT NULL
SELECT * FROM users WHERE email IS NOT NULL;Критично важно:
NULL = NULLвозвращает UNKNOWN, не TRUE! ИспользуйтеIS NULL, не= NULL.
-- По возрастанию (default)
SELECT * FROM users ORDER BY age;
-- По убыванию
SELECT * FROM users ORDER BY age DESC;
-- По нескольким столбцам
SELECT * FROM users
ORDER BY city ASC, age DESC, name ASC;-- Первые 10 строк
SELECT * FROM users LIMIT 10;
-- Пропустить 10, взять следующие 10
SELECT * FROM users LIMIT 10 OFFSET 10;
-- Современный синтаксис
SELECT * FROM users LIMIT 10 OFFSET 10;
-- Или: FETCH FIRST 10 ROWS ONLY-- Страница 1 (строки 1-10)
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 0;
-- Страница 2 (строки 11-20)
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 10;
-- Страница N
LIMIT 10 OFFSET (N-1) * 10-- Активные пользователи из Москвы 25-35 лет
SELECT id, name, email
FROM users
WHERE city = 'Moscow'
AND age BETWEEN 25 AND 35
AND email IS NOT NULL
ORDER BY name ASC
LIMIT 20;
-- Поиск пользователей по шаблону email
SELECT * FROM users
WHERE email LIKE '%@gmail.com'
AND name LIKE 'A%'
ORDER BY created_at DESC;Понимание порядка выполнения помогает писать правильные запросы:
1. FROM (откуда данные)
2. WHERE (фильтрация строк)
3. GROUP BY (группировка)
4. HAVING (фильтрация групп)
5. SELECT (выборка столбцов)
6. ORDER BY (сортировка)
7. LIMIT (ограничение)
Важно: WHERE выполняется до SELECT, поэтому нельзя использовать алиасы из SELECT в WHERE.
-- 1. Найдите всех пользователей старше 30 лет
-- 2. Найдите пользователей с email на gmail.com
-- 3. Выведите топ-5 самых молодых пользователей
-- 4. Найдите пользователей без указанного города
-- 5. Найдите имена, начинающиеся на 'A' и заканчивающиеся на 'x'Готовы проверить знания? Переходите к вопросам!
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.