SQL-запросы: что это и как написать первый

SQL-запросы: что это и как написать первый

Правила ровного базара с базой данных

Алиса Волкова
Алиса Волкова
Автор и редактор
career

Ибрагим — начинающий маркетолог. Он ищет работу уже пару месяцев, и вот находит классную вакансию. Зарплата, удалёнка, соцпакет — полный фарш. Но тут на глаза попадаются три весёлые буквы: SQL. Ибрагим умеет анализировать рынок, выстраивать стратегию продаж, продвигать продукт. Но вот программирование — за рамками его возможностей. 

Ибрагим закрывает вакансию, так и не узнав, что ничего программировать не придётся и тайнопись SQL-запросов доступна не только избранным. Да, за пару ночей не разберёшься, но простейшие запросы получится написать и самому.

Успокоим Ибрагима и всех гуманитариев, у которых код вызывает дрожь в коленках. В статье расскажем, как сделать свой первый SQL-запрос, даже если вы максимально не шарите, исправить типичные новичковские ошибки и развиваться дальше. 

Содержание

Что такое SQL-запрос и зачем он нужен

Как устроен SQL-запрос: SELECT, FROM, WHERE и другие части

Основные команды SQL: что делает каждая

Как сделать первый SQL-запрос: пример по шагам

Виды SQL-запросов: простые, сложные и вложенные

Почему SQL-запрос не работает или возвращает не то

Что выучить после первого SELECT

FAQ

Что такое SQL-запрос и зачем он нужен

Если совсем коротко: база данных — это огромная библиотека. Вы не можете зайти туда и искать книги сами, а вместо этого просите библиотекаря — СУБД — систему управления базами данных. Эта просьба — и есть SQL-запрос. Только если человек поймёт ваше «ну та книжка Достоевского, ну где ещё три брата», то базе данных нужна максимально чёткая команда.  

Запрос как раз и выполняет роль такой формулировки. Он отвечает базе на вопрос: «от меня щас что требуется»: найти строки, выбрать столбцы, добавить запись, обновить значение, удалить данные или изменить структуру таблицы.

Разница между SQL и SQL-запросом

Важно разделять сам язык и команды на нём:

  • SQL — это язык структурированных запросов. И как в любом языке, здесь есть правила синтаксиса и ключевые слова, понятные базам данных.
  • SQL-запрос — это конкретная фраза или предложение на этом языке. 

Чем SQL-запрос отличается от обычного вопроса

Главное отличие SQL-запроса от обычного вопроса — это строгая математическая точность.

У нас, человеков, есть ассоциативное мышление. Если вы попросите коллегу: «Покажи активных клиентов из Москвы», он интуитивно поймёт, о ком речь. А вот у базы данных логики и понимания контекста нет, так что вашу фразу она воспримет как случайный набор символов.

Чем SQL-запрос отличается от обычного вопроса

Чтобы система выдала результат, обычный вопрос нужно перевести в запрос SQL. И расписать всё поминутно: из какой таблицы взять информацию, по какому условию отфильтровать строки, что вернуть на экран пользователя.

Как устроен SQL-запрос: SELECT, FROM, WHERE и другие части

Синтаксис SQL-запросов подчиняется строгим правилам. Любая команда для базы данных собирается из отдельных кирпичиков — ключевых слов. В классическом SQL-запросе их пять, и все должны стоять по порядку. 

Из чего состоит запрос: разбор ключевых слов

Каждое ключевое слово в запросе отвечает за свой этап обработки информации.

Например, у вас есть интернет-магазин техники. В его базе хранится огромная таблица Products со всеми товарами, ценами и категориями — тысячи строк. И вам нужно сделать так, чтобы пользователь мог отсортировать только смартфоны от дешёвых к дорогим.

Часть запросаЧто делает оператор Пример 
SELECTУказывает, какие столбцы (колонки) нужно вернуть в итоговом ответеSELECT name, price 
выведет только имена и цены
FROMУказывает источник данных — из какой таблицы брать информациюFROM products 
будет искать в таблице товаров
WHEREФильтрует строки по заданным критериям. Отсекает всё, что не подходит под условияWHERE category = ‘Смартфоны’
покажет только телефоны
ORDER BYСортирует полученный результат по возрастанию или убыванию ORDER BY price ASC 
выстроит от дешёвых к дорогим
LIMITОграничивает количество строк на выходеLIMIT 5 
покажет только первые пять товаров

Готовый скрипт выглядит так:

SELECT name, price 

FROM products 

WHERE category = ‘Смартфоны’ 

ORDER BY price ASC  

LIMIT 5;

Примеры в статье подходят для PostgreSQL. В других СУБД синтаксис может немного отличаться.

Что такое SELECT в SQL

Команда SELECT в SQL — это главный и самый часто используемый оператор. Он отвечает за чтение и извлечение данных из базы. Проще говоря, SELECT даёт системе команду: «Покажи мне информацию». Он определяет, какие именно столбцы попадут в итоговый отчёт на экране пользователя.

Можно запросить вообще все данные из таблицы или выбрать определённые параметры. 

Вариант 1. Выборка всех данных через звёздочку: SELECT *

Символ * в SQL заменяет перечисление всех существующих колонок. Например,

SELECT * FROM users;

Запрос заставит СУБД выгрузить всю таблицу с пользователями целиком: ID, имена, даты регистрации и телефоны.

Вариант 2. Выборка конкретных полей

В этом случае вы прописываете название нужных столбцов:

SELECT name, email FROM users;

Тогда база данных проигнорирует техническую информацию и вернёт таблицу всего из двух колонок: имя и почта. 

SELECT * — это норм для учебных, но стрём для реальных проектов. Если вы только практикуетесь с таблицей из пяти строк, SELECT * подойдёт, потому что сэкономит время. Но в нормальных проектах за такие выкрутасы со звёздочками над вами в лучшем случае посмеются. А в худшем — погонят вон тряпками. И вот почему:

  • Огромная нагрузка на сеть и память: таблицы могут содержать десятки тяжёлых полей. Если вам нужно просто вывести список имён, а вы запрашиваете SELECT *, сервер будет впустую перегонять гигабайты лишней инфы. 
  • Снижение скорости работы СУБД: базы данных оптимизируют поиск, если знают точный список полей. Системе придётся совершать лишние операции на диске, чтобы читать всё подряд.  
  • Риск поломки кода при обновлении базы: представьте, что ваше приложение берёт данные из таблицы по их порядковому номеру. Если завтра аналитик добавит в середину таблицы новую колонку, порядок сдвинется. Запрос SELECT * вернёт изменённую структуру, и приложение упадёт.

Золотое правило разработчика: запрашивайте только те столбцы, которые нужны для задачи. А которые не нужны — не запрашивайте.

Почему WHERE, GROUP BY, HAVING и ORDER BY нельзя ставить как попало

SQL-запрос нельзя собирать как попало: у каждой части есть своё место. В коде запрос пишется так:

SELECT category, COUNT(*) AS products_count

FROM products

WHERE price > 70000

GROUP BY category

HAVING COUNT(*) >= 3

ORDER BY products_count DESC

LIMIT 5;

Но внутри база обрабатывает его не сверху вниз, а примерно в такой логике:

FROM — сначала находит таблицу, из которой нужно взять данные.

WHERE — отсекает лишние строки до группировки.

GROUP BY — собирает оставшиеся строки в группы.

HAVING — фильтрует уже готовые группы.

SELECT — выбирает, какие столбцы и вычисления показать в результате.

ORDER BY — сортирует итоговую выдачу.

LIMIT — оставляет только нужное количество строк.

Немного пошалим и представим, что будет, если всё-таки нарушить логику и синтаксис. 

🤡 Если поставить WHERE после GROUP BY: база данных не может фильтровать отдельные строки после того, как они уже были объединены и «схлопнуты» в общие группы.

🤡 Если поставить ORDER BY перед WHERE: СУБД вернёт синтаксическую ошибку, потому что нарушен порядок команд. 

🤡 Если спутать WHERE и HAVING: WHERE отсекает лишние строки до группировки, а HAVING — уже готовые группы после GROUP BY. Поэтому WHERE не заменяет HAVING там, где условие относится к группе: например, COUNT(*) > 3.

Основные команды SQL: что делает каждая

В языке SQL дофига ключевых слов, но зубрить сразу всё не надо (пока). Для начала хватит и нескольких инструкций.  Они как глаголы: каждая команда указывает СУБД, что делать.

КомандаЧто делает 
SELECTЧитает и выводит данные на экран по заданным фильтрам.
INSERTДобавляет новые строки в уже существующую таблицу.
UPDATEИзменяет (редактирует) информацию в текущих записях.
DELETEУдаляет выбранные строки из таблицы.
CREATEСоздаёт с нуля новую таблицу, базу данных или индекс.
ALTERМодифицирует структуру (добавляет или удаляет столбцы).

SELECT, INSERT, UPDATE, DELETE — команды на каждый день

Вот сначала они, а потом уже Ариана Гранде и все остальные. На них строятся основные запросы SQL, которые позволяют сайтам и приложениям работать. 

  • SELECT: выборка данных. SELECT title, price FROM products WHERE year = 2026;
  • INSERT: добавление данных. INSERT INTO clients (name, phone) VALUES (‘Иван’, ‘79991112233’);
  • UPDATE: обновление данных. UPDATE products SET price = 1500 WHERE id = 42;
  • DELETE: удаление данных. DELETE FROM sessions WHERE expire_date < ‘2026-01-01’;

DDL, DML, DCL, TCL — виды команд без зубрёжки

Команды классифицируют по четырём англоязычным аббревиатурам. Зубрить эти названия наизусть новичку не нужно, достаточно понять логику разделения.

Стать аналитиком данных
  1. DDL — язык определения данных. Команды управляют коробкой, в которой лежат данные. Сюда относятся CREATE — создать таблицу, ALTER — добавить в неё новый столбец и DROP — стереть таблицу целиком.
  2. DML — язык манипулирования данными. Это SQL для работы с содержимым внутри этой коробки. Сюда входят повседневные инструкции SELECT, INSERT, UPDATE и DELETE.
  3. DCL — язык управления правами доступа. Отвечает за безопасность и права доступа. С помощью команд этой группы: GRANT и REVOKE — администратор решает, какому программисту можно читать секретики, а кому — нет.
  4. TCL — язык управления транзакциями. Его задача — сохранять целостность базы данных при сбоях и, если что, возвращать всё назад. С помощью команд COMMIT и ROLLBACK можно сохранить изменения или откатить операцию.

Как сделать первый SQL-запрос: пример по шагам

Процесс напоминает конструктор — будем двигаться постепенно и строить слой за слоем. 

Сначала сформулируйте вопрос к данным

Рассказываем, как составить SQL-запрос для интернет-магазина. У вас есть таблица товаров — products. В ней хранятся такие колонки:

product_id — номер товара
product_name — название товара
category — категория
price — цена
stock — количество на складе

Задача: директор магазина хочет увидеть три самых дорогих товара дороже 70 000 рублей.

На человеческом языке это звучит так: «Покажи мне три самых дорогих товара, у которых цена выше 70 000 рублей».

А теперь переведём задачу на язык СУБД.

Шаг 1. Выберите столбцы: SELECT. Нам не нужны все данные о товаре, достаточно названия и цены.

SELECT product_name, price

Шаг 2. Укажите источник: FROM. Данные лежат в таблице products.

SELECT product_name, price

FROM products

Шаг 3. Настройте фильтр: WHERE. Нам нужны только товары дороже 70 000 рублей.

SELECT product_name, price

FROM products

WHERE price > 70000

Шаг 4. Добавьте сортировку: ORDER BY. По умолчанию SQL сортирует по возрастанию — от меньшего к большему. Нам нужно наоборот, поэтому добавляем DESC.

SELECT product_name, price

FROM products

WHERE price > 70000

ORDER BY price DESC

Шаг 5. Ограничьте выдачу: LIMIT. Директор просил показать только три товара, поэтому оставляем первые три строки.

SELECT product_name, price

FROM products

WHERE price > 70000

ORDER BY price DESC

LIMIT 3;

При этом внутри СУБД порядок обработки может меняться. 

Потом проверьте, что запрос вернул именно то

Если вы всё сделали правильно, запрос вернёт на экран окно с данными.

product_nameprice
MacBook Pro 16″ M3 Max350 000
iPhone 15 Pro Max120 000
Sony PlayStation 5 Pro75 500

Главное: не радуйтесь раньше времени, если система не выдала ошибку. Пока рано копировать результат в отчёт — проверьте себя ещё раз. Для системы вы — самый умный человек на свете, так что она выдаёт чёткие алгоритмы без поправок на ваши усталость и невнимательность.  

Поэтому обязательно проведите финальный чек-лист своей выгрузки:

  1. Проверка столбцов: в итоговой таблице должны быть только product_name и price. И никаких лишних полей, дат или статусов.
  2. Проверка количества строк: строки только три — всё как по заказу. Значит оператор LIMIT 3 сработал правильно. Даже если в базе 500 товаров дороже 70 000 рублей, пользователь увидит только топ-три.
  3. Проверка фильтрации: все цены в таблице должны быть больше 70 000 рублей. Чехлы, кабели и флешки просто не попали в итоговую таблицу.
  4. Проверка сортировки: товары идут от самого дорогого к менее дорогим. Самый дорогой товар — на первой строке.

Виды SQL-запросов: простые, сложные и вложенные

Для небольшого количества инфы хватит и простых SQL-запросов, а вот когда объёмы растут, то обычного чтения строк из одной таблицы становится маловато. Разберёмся, какие вообще бывают SQL-запросы:

  1. Простые — работают с одной таблицей, используют только базовую фильтрацию и сортировку. Например, выборка конкретного товара по его ID.
  2. Сложные — собирают информацию из нескольких источников с помощью объединений или вычисляют обобщённые показатели по группам.
  3. Вложенные — содержат внутри себя ещё один независимый запрос, результат которого передаётся внешнему коду.

Когда нужен JOIN

В базах данных информация никогда не хранится в одной огромной куче. Она разносится по разным таблицам, чтобы избежать дублирования. Из-за этого даже для стандартных запросов в БД часто нужны склейки информации.

Например, в интернет-магазине данные покупателей лежат в таблице customers, а история покупок — в таблице orders. Чтобы менеджер увидел имя покупателя рядом с номером заказа, эти таблицы надо временно соединить по общему полю.

Для этого используйте оператор JOIN

SELECT orders.order_id, customers.name 

FROM orders

JOIN customers ON orders.customer_id = customers.id;

СУБД находит совпадения по ID, берёт имя из одной таблицы, номер заказа из другой и выдает единый результат.

Что такое подзапросы и вложенные запросы SQL

Иногда для решения задачи нужно выполнить два действия последовательно: сначала что-то вычислить, а потом использовать это число как ориентир для поиска. Тогда применяются вложенные запросы SQL.

Подзапрос напоминает матрёшку — инструкции SELECT встроены внутрь главного запроса. Обычно в блок WHERE. База данных сначала делает внутреннюю команду, превращает её в конкретное значение, а потом отдаёт внешней команде.

Решение: 

SELECT title, price 

FROM products 

WHERE price > (SELECT AVG(price) FROM products);

СУБД сначала выполнит подзапрос в скобках и посчитает, что средняя цена равна 1 500 рублей. После этого внутренний код исчезнет, а база данных сделает обычный простой запрос: WHERE price > 1500.

Почему SQL-запрос не работает или возвращает не то

Разберём, где вы можете накосячить на старте своей карьеры.

Почему SQL-запрос не работает или возвращает не то

Текст без кавычек. База данных воспринимает любые слова без кавычек как названия столбцов или команды SQL. Текстовые значения всегда нужно оборачивать в одинарные кавычки.

❌ SELECT * FROM users WHERE city = Москва;

✅ SELECT * FROM users WHERE city = ‘Москва’;

Сравнение с NULL. Пустоту в базе данных нельзя искать через обычное равно (= NULL). Для этого существует специальный оператор IS NULL.

❌ SELECT * FROM orders WHERE delivery_date = NULL

✅ SELECT * FROM orders WHERE delivery_date IS NULL

Ожидание сортировки по умолчанию. Порядок не гарантирован без ORDER BY, поэтому, если вам нужен чёткий список, используйте оператор.  

Забытый оператор FROM. Нельзя попросить данные, не указав источник.

❌ SELECT name, price WHERE price > 500;

✅ SELECT name, price FROM products WHERE price > 500;

Не путайте запрос, команду и результат

Если хотите влиться в тусовку разрабов и не выдать себя, то стоит как минимум выучить базовые понятия. Все сразу поймут, что вы чужой среди своих, если вы смешаете команду, SQL-запрос и результат. Ловите памятку:

Команда SQL

— это отдельное служебное слово, кирпичик самого языка программирования. Например, SELECT, WHERE, UPDATE. Это абстрактный инструмент.

SQL-запрос

— это готовое, законченное предложение из этих кирпичиков для решения конкретной задачи. Например: «выбери имена из таблицы пользователей, где город — Москва». SQL-запрос — это инструкция, отправленная на сервер.

Результат

— это массив данных, обычно в виде временной таблицы, который СУБД возвращает обратно на экран в ответ на ваш запрос.

Не путайте запрос, команду и результат

Ну ладно, знать термины надо не только чтобы выпендриваться. Это помогает быстрее находить ошибки. Если СУБД пишет «Syntax Error» — вы ошиблись в написании команды SQL. Если запрос выполнился, но на экране пусто — вы составили рабочий запрос, но его логика не нашла совпадений в базе, итоговый результат нулёвый.

Что выучить после первого SELECT

Когда пройдёт эйфория от первого правильного запроса, пора бы двигаться дальше. Обрадуем сразу — легко и быстро не будет. Придётся долго и нудно углубляться в тему.

Вот 6 шагов, чтобы, аккуратно, без суеты, из новичка стать прожжёным разработчиком:

Если стать турбо-мега-крутым кодером хочется быстрее, то газ на курсы — ловите промокод со скидкой на любую профессию в Яндекс Практикуме. До 30 июля аж 10% — хватайте.

Шаг 1. Сложная фильтрация: AND, OR, NOT, IN, BETWEEN. Научитесь комбинировать условия, искать данные в диапазонах дат и выбирать значения из готовых списков.

Шаг 2. Поиск по шаблонам: LIKE. Освойте работу со спецсимволами — % и _, чтобы находить строки по части слова. Например, всех клиентов с фамилиями на «Иван…».

Шаг 3. Агрегатные функции: COUNT, SUM, AVG, MIN, MAX. Переходите от чтения строк к математике: научитесь считать количество заказов, сумму выручки и средний чек.

Шаг 4. Группировка данных: GROUP BY и HAVING. Объединяйте базовые запросы SQL в аналитические отчёты: группируйте продажи по месяцам, а сотрудников — по отделам.

Шаг 5. Объединение таблиц: JOIN. Разберитесь, как связывать данные из разных источников, используя INNER JOIN и LEFT JOIN. Это главный навык для работы с реальными БД.

Шаг 6. Вложенные запросы. Поймите логику построения сложных конструкций, где один SELECT передаёт информацию другому.

Изучать основные запросы SQL только по статьям — бессмысленно. Это как учиться танцевать по книжке. Поэтому сразу идите практиковаться. Установите бесплатную СУБД — PostgreSQL или MySQL. Или используйте интерактивные онлайн-тренажёры с готовыми песочницами. 

FAQ

Внимание — блиц! Для самых любознательных.

Можно ли писать SQL-команды маленькими буквами?

Да, можно. Язык SQL нечувствителен к регистру команд. Запрос select * from users; выполнится точно так же, как и SELECT * FROM users;

Но так исторически сложилось, что команды надо писать КАПСОМ, а  названия таблиц и столбцов — маленькими. Сразу видно, где служебное слово, а где имя вашей таблицы.

Чем SQL отличается от Excel?

Excel — для небольших файлов (до одного миллиона строк). А SQL — это инструмент для работы с гигантскими базами (миллиарды строк). Вы не видите всю таблицу целиком, а отправляете текстовые запросы на сервер. База данных обрабатывает информацию быстрее и надёжнее, чем Excel.

С какой команды SQL начать?

Начинайте всегда с команды SELECT (Выбрать). Это самая безопасная и важная команда. Вы точно не сломаете и не удалите важные данные — вы будете их только читать.

SQL-запрос выглядит как набор рандомных английских слов, которые ещё и орут на тебя капсом. Страшно, очень страшно, мы не знаем, что это такое. Но в этом и прикол — когда вы читаете запрос как точную просьбу к таблице, а не как заклинание, всё становится проще.

arrow-scrollTop arrow-scrollTop

Автор:
Алиса Волкова

Еще по теме: