Ибрагим — начинающий маркетолог. Он ищет работу уже пару месяцев, и вот находит классную вакансию. Зарплата, удалёнка, соцпакет — полный фарш. Но тут на глаза попадаются три весёлые буквы: SQL. Ибрагим умеет анализировать рынок, выстраивать стратегию продаж, продвигать продукт. Но вот программирование — за рамками его возможностей.
Ибрагим закрывает вакансию, так и не узнав, что ничего программировать не придётся и тайнопись SQL-запросов доступна не только избранным. Да, за пару ночей не разберёшься, но простейшие запросы получится написать и самому.
Успокоим Ибрагима и всех гуманитариев, у которых код вызывает дрожь в коленках. В статье расскажем, как сделать свой первый SQL-запрос, даже если вы максимально не шарите, исправить типичные новичковские ошибки и развиваться дальше.
Содержание
Что такое SQL-запрос и зачем он нужен
Как устроен SQL-запрос: SELECT, FROM, WHERE и другие части
Основные команды SQL: что делает каждая
Как сделать первый SQL-запрос: пример по шагам
Виды SQL-запросов: простые, сложные и вложенные
Почему SQL-запрос не работает или возвращает не то
Что выучить после первого SELECT
Что такое 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 — виды команд без зубрёжки
Команды классифицируют по четырём англоязычным аббревиатурам. Зубрить эти названия наизусть новичку не нужно, достаточно понять логику разделения.
- DDL — язык определения данных. Команды управляют коробкой, в которой лежат данные. Сюда относятся CREATE — создать таблицу, ALTER — добавить в неё новый столбец и DROP — стереть таблицу целиком.
- DML — язык манипулирования данными. Это SQL для работы с содержимым внутри этой коробки. Сюда входят повседневные инструкции SELECT, INSERT, UPDATE и DELETE.
- DCL — язык управления правами доступа. Отвечает за безопасность и права доступа. С помощью команд этой группы: GRANT и REVOKE — администратор решает, какому программисту можно читать секретики, а кому — нет.
- 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_name | price |
| MacBook Pro 16″ M3 Max | 350 000 |
| iPhone 15 Pro Max | 120 000 |
| Sony PlayStation 5 Pro | 75 500 |
Главное: не радуйтесь раньше времени, если система не выдала ошибку. Пока рано копировать результат в отчёт — проверьте себя ещё раз. Для системы вы — самый умный человек на свете, так что она выдаёт чёткие алгоритмы без поправок на ваши усталость и невнимательность.
Поэтому обязательно проведите финальный чек-лист своей выгрузки:
- Проверка столбцов: в итоговой таблице должны быть только product_name и price. И никаких лишних полей, дат или статусов.
- Проверка количества строк: строки только три — всё как по заказу. Значит оператор LIMIT 3 сработал правильно. Даже если в базе 500 товаров дороже 70 000 рублей, пользователь увидит только топ-три.
- Проверка фильтрации: все цены в таблице должны быть больше 70 000 рублей. Чехлы, кабели и флешки просто не попали в итоговую таблицу.
- Проверка сортировки: товары идут от самого дорогого к менее дорогим. Самый дорогой товар — на первой строке.
Виды SQL-запросов: простые, сложные и вложенные
Для небольшого количества инфы хватит и простых SQL-запросов, а вот когда объёмы растут, то обычного чтения строк из одной таблицы становится маловато. Разберёмся, какие вообще бывают SQL-запросы:
- Простые — работают с одной таблицей, используют только базовую фильтрацию и сортировку. Например, выборка конкретного товара по его ID.
- Сложные — собирают информацию из нескольких источников с помощью объединений или вычисляют обобщённые показатели по группам.
- Вложенные — содержат внутри себя ещё один независимый запрос, результат которого передаётся внешнему коду.
Когда нужен 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. Текстовые значения всегда нужно оборачивать в одинарные кавычки.
❌ 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-запрос и результат. Ловите памятку:
— это отдельное служебное слово, кирпичик самого языка программирования. Например, SELECT, WHERE, UPDATE. Это абстрактный инструмент.
— это готовое, законченное предложение из этих кирпичиков для решения конкретной задачи. Например: «выбери имена из таблицы пользователей, где город — Москва». 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-запрос выглядит как набор рандомных английских слов, которые ещё и орут на тебя капсом. Страшно, очень страшно, мы не знаем, что это такое. Но в этом и прикол — когда вы читаете запрос как точную просьбу к таблице, а не как заклинание, всё становится проще.
Карьера разработчика для гуманитариев: реально ли это? С чего начать? Как там вообще?
Аналитик 1С: чем занимается, сколько зарабатывает и как стать
Вайбкодинг простыми словами: можно ли сделать сайт или приложение с ИИ, если вы не программист
Как составить резюме без опыта работы: примеры и советы для начинающих
