Что такое SQL: основы языка запросов для начинающих

SELECT, JOIN, GROUP BY, подзапросы и оконные функции — от первого запроса до аналитики. С интерактивными примерами на PostgreSQL.

Обложка: Что такое SQL: основы языка запросов для начинающих

Каждый разработчик рано или поздно сталкивается с базами данных. Неважно, пишете ли вы веб-приложение, мобильный сервис или скрипт для анализа данных — в основе почти всегда лежит реляционная база данных, а значит, SQL. Этот язык не устаревает десятилетиями: он появился в 1970-х годах и до сих пор остаётся стандартом де-факто для работы с данными. По данным опроса Stack Overflow Developer Survey 2023, SQL занимает третье место среди профессиональных разработчиков — его используют 51,5% из них (Stack Overflow Developer Survey 2023).

SQL (Structured Query Language) — это декларативный язык запросов для управления реляционными базами данных. С его помощью можно создавать таблицы, добавлять, изменять и удалять данные, а также делать выборки по заданным условиям. SQL стандартизирован организацией ISO и поддерживается всеми основными СУБД: PostgreSQL, MySQL, SQLite, Microsoft SQL Server и Oracle.

Главное о SQL

- SQL расшифровывается как Structured Query Language — язык структурированных запросов.

- Язык создан в 1973 году в IBM, стандарт ISO принят в 1987 году.

- SQL используют 51,5% профессиональных разработчиков по всему миру (Stack Overflow, 2023).

- Основные операции: SELECT, INSERT, UPDATE, DELETE — охватывают 90% повседневных задач.

- SQL работает с реляционными базами данных, где данные хранятся в связанных таблицах.

- Один SQL-запрос может обработать миллионы строк за доли секунды.

Зачем нужен SQL — где используется и кому пригодится

SQL нужен везде, где есть структурированные данные. Вот лишь несколько примеров из реальной практики:

  • Веб-разработка — интернет-магазины, блоги, социальные сети хранят пользователей, товары и записи в реляционных БД.
  • Аналитика данных — аналитики используют SQL для агрегации, фильтрации и построения отчётов.
  • Backend-разработка — серверные приложения взаимодействуют с PostgreSQL или MySQL через SQL-запросы.
  • Data Science — учёные по данным выгружают датасеты из хранилищ (Redshift, BigQuery) с помощью SQL.
  • DevOps и администрирование — DBA оптимизируют запросы, настраивают индексы, следят за производительностью.

SQL востребован как у начинающих разработчиков, так и у опытных инженеров. По данным Glassdoor, знание SQL входит в топ-3 навыков для вакансий Data Analyst и Backend Developer в 2024 году. Даже фронтендеры, которые редко работают напрямую с БД, рано или поздно сталкиваются с SQL при отладке или настройке.

Основные команды SQL

Все команды SQL делятся на группы. Самые важные — это DDL (Data Definition Language) для создания структур и DML (Data Manipulation Language) для работы с данными. Рассмотрим ключевые команды подробнее.

SELECT — выборка данных

SELECT — самая используемая команда SQL. Она позволяет извлекать данные из одной или нескольких таблиц. Базовый синтаксис:

			-- Выбрать все столбцы из таблицы users
SELECT * FROM users;

-- Выбрать конкретные столбцы
SELECT id, name, email FROM users;

-- Выбрать с псевдонимами столбцов
SELECT id, name AS user_name, email AS user_email FROM users;
		

Звёздочка * означает «все столбцы», но на практике лучше перечислять нужные явно — это ускоряет запрос и делает код читаемым. Чтобы отфильтровать дубликаты, используют SELECT DISTINCT.

Можно также ограничить количество строк в результате:

			-- Первые 10 строк (PostgreSQL, MySQL, SQLite)
SELECT id, name FROM users LIMIT 10;

-- Первые 10 строк (MS SQL Server)
SELECT TOP 10 id, name FROM users;
		

INSERT, UPDATE, DELETE — изменение данных

Три команды, отвечающие за создание, изменение и удаление записей:

			-- INSERT: добавить новую запись
INSERT INTO users (name, email, age)
VALUES ('Алексей', 'alex@example.com', 28);

-- INSERT нескольких строк сразу
INSERT INTO users (name, email, age) VALUES
  ('Мария', 'maria@example.com', 25),
  ('Иван', 'ivan@example.com', 32);

-- UPDATE: изменить существующую запись
UPDATE users
SET email = 'new@example.com', age = 29
WHERE id = 1;

-- DELETE: удалить записи
DELETE FROM users WHERE id = 1;

-- ВНИМАНИЕ: DELETE без WHERE удалит ВСЕ строки!
DELETE FROM users; -- опасно!
		
Важно: Всегда используйте WHERE в командах UPDATE и DELETE. Без условия изменения применятся ко всем строкам таблицы, и восстановить данные без бэкапа не получится.

CREATE TABLE — создание таблиц

Прежде чем работать с данными, нужно создать таблицу. Команда CREATE TABLE задаёт структуру: имена столбцов, их типы и ограничения:

			CREATE TABLE users (
  id        SERIAL PRIMARY KEY, -- PostgreSQL; в MySQL: id INT AUTO_INCREMENT PRIMARY KEY
  name      VARCHAR(100)  NOT NULL,
  email     VARCHAR(255)  UNIQUE NOT NULL,
  age       INT           CHECK (age >= 0 AND age <= 150),
  created_at TIMESTAMP    DEFAULT CURRENT_TIMESTAMP
);

-- Создать таблицу заказов со связью на users
CREATE TABLE orders (
  id         SERIAL PRIMARY KEY,
  user_id    INT NOT NULL REFERENCES users(id),
  amount     DECIMAL(10, 2) NOT NULL,
  ordered_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
		

SERIAL (или AUTO_INCREMENT в MySQL) автоматически генерирует уникальный числовой идентификатор. PRIMARY KEY — уникальный ключ строки. REFERENCES создаёт внешний ключ — связь между таблицами.

JOIN — объединение таблиц

Реляционные базы данных хранят информацию в нескольких связанных таблицах. Чтобы получить данные из нескольких таблиц одним запросом, используется JOIN. Существует несколько видов объединений:

  • INNER JOIN — только совпадающие строки из обеих таблиц.
  • LEFT JOIN — все строки из левой таблицы, совпадения из правой (или NULL).
  • RIGHT JOIN — все строки из правой таблицы, совпадения из левой (или NULL).
  • FULL OUTER JOIN — все строки из обеих таблиц, NULL там, где нет совпадений.
			-- INNER JOIN: пользователи с их заказами
SELECT u.name, o.amount, o.ordered_at
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

-- LEFT JOIN: все пользователи, включая тех, кто не делал заказов
SELECT u.name, o.amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

-- Пользователи без заказов
SELECT u.name
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.id IS NULL;
		

WHERE, ORDER BY, GROUP BY — фильтрация и сортировка

Три важнейших инструмента для управления результатом выборки. Подробный разбор ORDER BY с примерами читайте в нашем гайде по сортировке в SQL.

			-- WHERE: фильтрация по условию
SELECT * FROM users WHERE age > 25;
SELECT * FROM users WHERE name LIKE 'А%'; -- начинается на А
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
SELECT * FROM users WHERE id IN (1, 3, 5);

-- ORDER BY: сортировка результата
SELECT name, age FROM users
ORDER BY age DESC, name ASC; -- по возрасту убыв., по имени возраст.

-- GROUP BY: группировка и агрегация
SELECT user_id, COUNT(*) AS cnt, SUM(amount) AS total
FROM orders
GROUP BY user_id
HAVING SUM(amount) > 1000  -- фильтр ПОСЛЕ группировки
ORDER BY total DESC;
		

Ключевое отличие: WHERE фильтрует строки до группировки, HAVINGпосле. Агрегатные функции (COUNT, SUM, AVG, MIN, MAX) работают с группами строк.

Типы данных в SQL

При создании таблицы каждому столбцу нужно указать тип данных. Правильный выбор типа экономит место на диске и ускоряет запросы. Основные типы:

  • Числовые: INT / INTEGER — целые числа; BIGINT — большие целые; DECIMAL(p,s) — дробные с фиксированной точностью; FLOAT — числа с плавающей запятой.
  • Строковые: VARCHAR(n) — строка до n символов; TEXT — строка без ограничений; CHAR(n) — строка фиксированной длины.
  • Дата и время: DATE — дата (YYYY-MM-DD); TIME — время; TIMESTAMP — дата и время; INTERVAL — интервал.
  • Логический: BOOLEAN — значения TRUE / FALSE / NULL.
  • Специальные: UUID — уникальный идентификатор; JSON / JSONB — JSON-данные (PostgreSQL); ARRAY — массив значений.

Практическое правило: используйте наименьший подходящий тип. Для возраста достаточно SMALLINT, для идентификатора пользователя — INT, для финансовых сумм — DECIMAL, а не FLOAT (чтобы избежать ошибок округления).

SQL vs NoSQL — когда что использовать

SQL-базы данных хранят данные в таблицах с фиксированной схемой. NoSQL-базы (MongoDB, Redis, Cassandra) используют другие модели: документы, ключ-значение, графы, колонки. Вот когда выбирать каждый подход:

  • SQL подходит, когда: данные структурированы и схема стабильна; важна целостность и транзакции (банки, интернет-магазины); нужны сложные запросы с JOIN и агрегацией; команда умеет работать с реляционными БД.
  • NoSQL подходит, когда: структура данных гибкая или меняется часто; нужна горизонтальная масштабируемость под огромные объёмы; данные неструктурированы (логи, события, JSON); требуется сверхнизкая латентность (кэш в Redis).
SQL и NoSQL — не конкуренты, а инструменты для разных задач. В одном проекте вполне можно использовать PostgreSQL для бизнес-данных и Redis для кэша.

Популярные СУБД: PostgreSQL, MySQL, SQLite, MS SQL

SQL-синтаксис стандартизирован, но каждая СУБД добавляет свои расширения. Вот краткое сравнение четырёх самых популярных:

  • PostgreSQL — мощная open-source СУБД с богатым набором типов данных, поддержкой JSON, полнотекстового поиска и оконных функций. Лучший выбор для серьёзных проектов. Подробнее читайте в нашем руководстве по PostgreSQL для начинающих.
  • MySQL / MariaDB — самая распространённая СУБД для веб-приложений, особенно в связке с PHP (WordPress, Drupal). Простая в настройке, быстрая для чтения.
  • SQLite — встроенная база данных в одном файле, без сервера. Идеально подходит для мобильных приложений, тестирования и небольших проектов. Используется в Android, iOS, браузерах.
  • Microsoft SQL Server — корпоративная СУБД от Microsoft, тесно интегрированная с экосистемой .NET и Azure. Популярна в крупных компаниях.

Если вы только начинаете, рекомендуем PostgreSQL или SQLite. PostgreSQL — для полноценной разработки, SQLite — для обучения без установки сервера.

Как начать учить SQL — ресурсы, песочницы, советы

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

Подробную дорожную карту с последовательностью тем и рекомендуемыми ресурсами смотрите в нашей дорожной карте SQL для начинающих.

  • SQLiteOnline.com — онлайн-песочница без регистрации. Запустите первый запрос прямо в браузере за 30 секунд.
  • SQLBolt.com — интерактивный курс с упражнениями от SELECT до сложных JOIN. Полностью бесплатный, на английском.
  • Stepik.org — бесплатный курс «Введение в базы данных» на русском языке с практическими заданиями.
  • LeetCode / HackerRank — задачи на SQL для подготовки к техническим собеседованиям.
  • Официальная документация PostgreSQL — самый полный и точный источник по возможностям СУБД.

Советы для эффективного обучения: практикуйтесь на реальных данных (импортируйте CSV-файл в SQLite), сразу изучайте индексы — они кардинально влияют на производительность. Читайте наш материал об SQL-индексах за 10 минут и 10 советов по оптимизации запросов.

Частые вопросы
1
Сложно ли выучить SQL с нуля?

Нет. SQL считается одним из самых доступных языков для начинающих. Базовые команды (SELECT, WHERE, JOIN) можно освоить за 5–10 часов практики. Сложность возрастает при изучении оконных функций, оптимизации и администрирования — но для старта этого не нужно.

2
Чем SQL отличается от MySQL и PostgreSQL?

SQL — это язык (стандарт), а MySQL и PostgreSQL — это конкретные системы управления базами данных (СУБД), которые реализуют этот стандарт. Аналогия: SQL — это «язык», а MySQL/PostgreSQL — «диалекты» со своими расширениями.

3
Нужно ли знать SQL фронтенд-разработчику?

Для ежедневной работы с интерфейсом — не обязательно. Но понимание SQL поможет при отладке API, анализе производительности, переходе в fullstack-разработку.

4
В чём разница между DELETE и TRUNCATE?

DELETE удаляет строки поштучно, поддерживает WHERE и транзакции — можно откатить. В MySQL TRUNCATE — DDL-команда и не поддерживает откат. В PostgreSQL TRUNCATE полностью транзакционен и откатывается через ROLLBACK.

5
Что такое транзакция в SQL?

Транзакция — группа SQL-команд, которые выполняются как одно целое. Либо все команды успешны (COMMIT), либо все отменяются (ROLLBACK). Это гарантирует целостность данных. Классический пример: перевод денег — списание с одного счёта и зачисление на другой должны произойти вместе или не произойти вовсе.

Выводы

SQL — фундаментальный навык для любого, кто работает с данными. За полвека существования язык не только не устарел, но и стал ещё более востребованным: облачные хранилища BigQuery и Redshift, аналитические инструменты, современные ORM — всё это работает поверх SQL или совместимо с ним.

Что делать дальше:

  1. Установите PostgreSQL или откройте SQLiteOnline.com и напишите первый SELECT.
  2. Пройдите интерактивный курс на SQLBolt.com — займёт 3–5 часов.
  3. Попрактикуйтесь на реальных данных: загрузите любой CSV-датасет с Kaggle.
  4. Изучите индексы — это самый быстрый способ ускорить запросы.
  5. Посмотрите нашу дорожную карту SQL и двигайтесь по ней системно.

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

Рекомендуем