Урок 1.2 — Первый SELECT, выборка столбцов и LIMIT
Модуль 1. Введение в базы данных
Урок 1.2
Длительность 20 минут
Сложность ⭐ Начальный
Что будем делать сегодня
На прошлом уроке мы установили DB Browser, открыли учебную базу narodny.db и выполнили один-единственный запрос: SELECT * FROM stores;. Сегодня — настоящий старт SQL. К концу урока вы будете уверенно писать запросы: «дай мне только эти колонки», «дай только первые 10 строк», «дай уникальные значения».
Это маленький набор инструментов, но именно с него начинается 80% всей работы аналитика данных.
Анатомия SQL-запроса
Любой запрос к базе данных строится по чёткой структуре. Самая простая форма выглядит так:
SELECT <что>
FROM <откуда>;
Прочитайте вслух: «выбери такие-то колонки из такой-то таблицы». Точка с запятой ; в конце — это конец запроса. В DB Browser её можно опускать (если запрос один), но привыкайте ставить — это профессиональная привычка.
SQL не различает регистр ключевых слов. Можно писать SELECT, select, SeLeCt — база поймёт всё. Но по соглашению ключевые слова пишут ЗАГЛАВНЫМИ. Это делает запросы читаемыми. Имена таблиц и колонок — обычно строчными.
SELECT * — выбрать всё
Звёздочка * означает «все колонки». Самый простой запрос:
SELECT * FROM products;
Этот запрос вернёт все 80 товаров со всеми колонками: product_id, name, category_id, price, unit, in_stock.
SELECT * — анти-паттерн в продакшне! На учёбе это ОК. Но в реальной работе:
- Вы качаете все колонки, даже те, что не нужны → лишний трафик и время
- Если в таблицу добавят новую колонку — ваш отчёт может «сломаться»
- Код становится непонятным для коллег
Правило хорошего тона: всегда явно указывать нужные колонки.
Выбираем конкретные колонки
Чтобы получить только нужные колонки, перечислите их через запятую:
SELECT name, price
FROM products;
Этот запрос вернёт только два столбца — название и цену каждого товара. Это и быстрее, и понятнее.
Порядок колонок имеет значение
Колонки в результате будут в том порядке, в котором вы их перечислили. Сравните:
SELECT name, price FROM products; -- сначала name, потом price
SELECT price, name FROM products; -- сначала price, потом name
Псевдонимы (алиасы) — переименование колонок
Колонки в базе названы технически: customer_id, opened_date. В отчёте для директора эти названия некрасиво смотрятся. Используйте AS чтобы переименовать колонки в результате:
SELECT
name AS "Товар",
price AS "Цена, сом"
FROM products;
В результате вы увидите колонки уже с понятными русскими названиями. Это критически важно, когда вы готовите данные для выгрузки в Excel или Power BI.
Когда использовать кавычки: если в имени-псевдониме есть пробелы, кириллица или специальные символы — оборачивайте в двойные кавычки"...". Если только латиница без пробелов — кавычки не обязательны: SELECT name AS product_name FROM products;
Слово AS можно опускать — результат тот же:
SELECT name "Товар", price "Цена" FROM products;
Но с AS запрос читается легче, поэтому начинающим лучше всегда писать его явно.
LIMIT — ограничиваем количество строк
В таблице sale_items у нас почти 10 000 строк. Если случайно выполнить SELECT * FROM sale_items; — DB Browser попытается загрузить всё и может зависнуть на пару секунд. На реальной работе с миллионами строк это превращается в проблему.
Решение — оператор LIMIT:
SELECT * FROM sale_items LIMIT 10;
Этот запрос вернёт только первые 10 строк. Идеально, чтобы быстро посмотреть, что вообще лежит в таблице.
Привычка профессионала: когда вы видите незнакомую таблицу, первый запрос всегда выглядит как SELECT * FROM имя_таблицы LIMIT 5; — быстро узнать, какие там колонки и какие там примерно данные. Запомните этот приём — он сэкономит вам часы.
DISTINCT — только уникальные значения
Представьте: маркетолог сети «Народный» спрашивает у вас: «в каких городах у нас работают магазины?». В таблице stores 12 строк, но городов может быть меньше — некоторые города имеют по несколько магазинов (в Бишкеке их сразу 5).
Можно так:
SELECT city FROM stores;
…но вы получите 12 строк, и Бишкек повторится 5 раз. Чтобы получить только уникальные значения, используйте DISTINCT:
SELECT DISTINCT city FROM stores;
Результат — 7 строк, по одной на каждый уникальный город:
| city |
|---|
| Бишкек |
| Ош |
| Каракол |
| Чолпон-Ата |
| Токмок |
| Жалал-Абад |
| Кант |
Кейс «Народный»: новый сотрудник отдела маркетинга должен составить карту присутствия сети по регионам. Вместо того чтобы скроллить таблицу stores и вручную выписывать города, он пишет SELECT DISTINCT city FROM stores; и получает готовый список за полсекунды.
DISTINCT по нескольким колонкам
DISTINCT работает по комбинации всех перечисленных колонок:
SELECT DISTINCT city, name
FROM stores;
Здесь уникальной считается пара (city, name). Так как у каждого магазина уникальное имя, мы получим все 12 строк.
Комментарии в SQL
Хороший аналитик документирует свой код. В SQL есть два вида комментариев:
-- Это однострочный комментарий
SELECT name, price FROM products; -- комментарий в конце строки
/* Это многострочный
комментарий, удобный
для длинных пояснений */
SELECT * FROM stores;
База данных полностью игнорирует комментарии — они только для людей, которые будут читать ваш код (включая вас самих через месяц).
Собираем всё вместе
Реальный запрос аналитика часто использует все эти приёмы сразу:
-- Запрос: первые 5 товаров с понятными названиями колонок
SELECT
name AS "Название товара",
price AS "Цена, сом",
unit AS "Единица измерения"
FROM products
LIMIT 5;
Это уже выглядит как профессиональный SQL: явные колонки, понятные псевдонимы, ограничение по строкам, комментарий-описание.
Резюме урока
| Конструкция | Что делает |
|---|---|
SELECT * |
Выбрать все колонки (только для исследования!) |
SELECT col1, col2 |
Выбрать конкретные колонки |
... AS "новое_имя" |
Переименовать колонку в результате |
LIMIT N |
Вернуть только первые N строк |
DISTINCT |
Только уникальные значения |
-- или /* */ |
Комментарии |
Что дальше
Сейчас наши запросы возвращают все строки таблицы. Но что если нужны только товары дороже 500 сом? Только клиенты из Бишкека? Только продажи за апрель? Это работа оператора WHERE — главного инструмента фильтрации в SQL. Им мы займёмся в Уроке 1.3.
А пока — переходите к практическим заданиям. Они закрепят сегодняшний материал.
🚀 К практике! 5 заданий + квиз ниже.
