Лекция 1
Лекция: Основы SQL — Введение, SELECT и фильтрация данных¶
Цель:
- Понять, что такое SQL и реляционные базы данных.
- Научиться извлекать и фильтровать данные из таблиц.
Темы:
1. Введение в SQL и реляционные базы данных¶
- Что такое реляционная база данных? Основные элементы: таблицы, строки, столбцы.
- Что такое SQL? Почему это важный инструмент для работы с данными.
- Почему PostgreSQL: преимущества этой системы управления базами данных.
2. Основы извлечения данных — SELECT¶
- Синтаксис
SELECT: как извлекать данные из таблицы.- Выбор всех данных:
SELECT *. - Выбор отдельных столбцов: извлечение только необходимых данных.
- Использование псевдонимов: улучшение читаемости результатов с помощью
AS. - Ограничение количества строк: использование
LIMIT. - Сортировка данных: основы
ORDER BY.
- Выбор всех данных:
3. Фильтрация данных — WHERE¶
- Фильтрация с помощью
WHERE:- Основные операторы сравнения:
=,<>,>,<,>=,<=. - Логические операторы:
- Использование
AND,ORиNOTдля комбинирования условий. - Приоритет операций: порядок выполнения условий.
- Работа с
NULL: - Что такое
NULL(отсутствие значения). - Проверка с помощью
ISNULLиIS NOT NULL.
- Основные операторы сравнения:
1. Введение в SQL и реляционные базы данных¶
Что такое реляционная база данных?¶
Реляционная база данных (РБД) — это система хранения данных, где информация организована в виде таблиц.
Каждая таблица состоит из:
-
Столбцов (полей) — определяют, какие данные хранятся (например,
id,имя,дата рождения). -
Строк (записей) — содержат конкретные данные (например, строка с информацией о пользователе).
Пример таблицы пассажиров в системе авиаперевозок:
| passenger_id | first_name | last_name | birth_date |
|---|---|---|---|
| 1 | Иван | Иванов | 1990-05-12 |
| 2 | Мария | Смирнова | 1985-10-30 |
| 3 | Алексей | Петров | 1992-07-25 |
Реляционные базы называют так, потому что данные в них связаны между таблицами. Например, у нас есть ещё таблица бронирования билетов, где passenger_id указывает, какой пассажир оформил бронирование:
| booking_id | passenger_id | flight_id | status |
|---|---|---|---|
| 101 | 1 | 2201 | Paid |
| 102 | 2 | 2203 | Unpaid |
Эти две таблицы связаны: по passenger_id можно определить, какой пассажир сделал бронь.
Что такое SQL? Почему это важный инструмент?¶
SQL (Structured Query Language) — язык запросов, который позволяет:
- Извлекать данные (
SELECT) - Фильтровать информацию (
WHERE) - Добавлять (
INSERT), обновлять (UPDATE) и удалять (DELETE) данные - Объединять таблицы и анализировать данные (
JOIN,GROUP BY)
Почему SQL важен?
- Аналитика: помогает получать статистику, делать отчёты.
- Автоматизация: SQL-запросы можно использовать в дашбордах и скриптах.
- Простота: язык декларативный, понятный даже тем, кто не программист.
Пример простого SQL-запроса:
Выбирает имена пассажиров, родившихся после 1990 года.Почему PostgreSQL?¶
PostgreSQL — одна из самых популярных СУБД.
Преимущества PostgreSQL:
- Бесплатный и открытый
- Мощный: поддерживает сложные аналитические запросы
- Гибкий: работает не только с таблицами, но и с JSON, геоданными
- Надёжный: используется в крупных проектах (Reddit, Instagram, Booking.com)
Простыми словами, PostgreSQL — это мощная и удобная база данных, которая подходит как для бизнеса, так и для сложных аналитических задач.
2. Основы извлечения данных — SELECT¶
Извлечение всех данных из таблицы¶
Выведет все столбцы и строки из таблицыflights.
Выбор отдельных столбцов¶
Выведет только номера рейсов и аэропорты отправления/прибытия.Использование псевдонимов (AS)¶
SELECT
flight_no AS "Рейс",
departure_airport AS "Аэропорт вылета",
arrival_airport AS "Аэропорт прибытия"
FROM bookings.flights;
Ограничение количества строк (LIMIT)¶
Выведет только 5 строк.Сортировка данных (ORDER BY)¶
Сортировка по времени вылета — сначала самые поздние рейсы.- ASC (от слова "Ascending") означает сортировку в возрастающем порядке. Например, числовые значения будут сортироваться от меньшего к большему, а строковые — от A до Z.
- DESC (от слова "Descending") означает сортировку в убывающем порядке. В этом случае числовые значения будут сортироваться от большего к меньшему, а строковые — от Z до A.
3. Фильтрация данных — WHERE¶
Фильтрация с помощью WHERE¶
Выберем только рейсы с определённым номером:
Выберем рейсы, которые уже вылетели:
Операторы сравнения¶
=— равно<>— не равно>/<— больше / меньше>=/<=— больше или равно / меньше или равно
Пример: выберем рейсы, запланированные после 1 января 2025 года:
Логические операторы: AND, OR, NOT¶
Выберем все задержанные рейсы из аэропорта SVO:
Выберем рейсы из SVO или DME:
Исключим рейсы с неизвестным статусом:
Приоритет операций: порядок выполнения условий в WHERE¶
Когда в SQL-запросе используются AND, OR и NOT, важно понимать, в каком порядке они выполняются.
Приоритет логических операторов:¶
NOT– выполняется первымAND– выполняется вторымOR– выполняется последним
1. Что произойдёт без скобок?¶
Допустим, у нас есть таблица bookings.flights с рейсами:
| flight_id | departure_airport | arrival_airport | actual_departure | status |
|---|---|---|---|---|
| 101 | SVO | JFK | 2024-01-29 10:00 | Departed |
| 102 | DME | CDG | NULL | Scheduled |
| 103 | LED | SVO | 2024-01-30 12:00 | Departed |
| 104 | DME | LHR | NULL | Canceled |
Запрос без скобок:¶
SELECT *
FROM bookings.flights
WHERE departure_airport = 'DME' OR arrival_airport = 'JFK' AND actual_departure IS NOT NULL;
SELECT *
FROM bookings.flights
WHERE departure_airport = 'DME' OR (arrival_airport = 'JFK' AND actual_departure IS NOT NULL);
В выборку попадут все рейсы из DME (102 и 104)
Рейсы в JFK, которые уже вылетели (101)
Результат: рейсы 101, 102, 104.
2. Используем скобки, чтобы изменить логику¶
Если мы хотим выбрать рейсы, которые:
- Либо вылетают из DME, либо прилетают в JFK,
- Но при этом уже вылетели (actual_departure IS NOT NULL)
Исправленный запрос:¶
SELECT *
FROM bookings.flights
WHERE (departure_airport = 'DME' OR arrival_airport = 'JFK')
AND actual_departure IS NOT NULL;
SELECT *
FROM bookings.flights
WHERE (departure_airport = 'DME' OR arrival_airport = 'JFK')
AND actual_departure IS NOT NULL;
Будут выбраны вылетевшие рейсы (actual_departure IS NOT NULL)
Среди них — только те, которые либо из DME, либо в JFK
Результат: рейс 101.
Вывод:¶
- AND выполняется раньше OR, поэтому без скобок логика может быть не такой, как ожидалось.
- Скобки помогают задать точный порядок выполнения условий.
- При сложных запросах всегда проверяйте логику!
Работа с NULL¶
Что такое NULL на простом примере?
Представьте, что у вас есть книга контактов с номерами телефонов.
| id | name | phone |
|---|---|---|
| 1 | Анна | +7 900 123 45 67 |
| 2 | Иван | NULL |
| 3 | Ольга | +7 901 987 65 43 |
У Анны и Ольги есть номера телефонов, а у Ивана — NULL.
- NULL ≠ пустая строка
- NULL ≠ 0
- NULL = «Мы не знаем, есть у Ивана номер или нет»
Как работать с NULL в SQL?¶
Хотим найти всех, у кого нет номера:
Хотим найти всех, у кого номер указан:
Почему важно понимать NULL?¶
- Если сделать
phone = NULL, то ничего не найдётся! - NULL означает отсутствие информации, а не пустое поле.
- Ошибки в анализе данных: например, при подсчёте среднего (
AVG(phone)) NULL-значения игнорируются.
Вернемся к нашей БД¶
Некоторые рейсы могут не иметь фактического времени вылета (actual_departure = NULL).
Выберем такие рейсы:
Выберем рейсы, которые уже вылетели:
Вывод¶
- SELECT позволяет извлекать данные
- ORDER BY сортирует их
- LIMIT ограничивает количество строк
- WHERE фильтрует данные
- NULL требует особых проверок (
ISNULL,IS NOT NULL)