Блог
  • Разработка
5

Основные команды SQL и запросы с примерами для каждого разработчика

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

Это своего рода набор стандартов, регламентирующий написание запросов к хранящейся на сервере информации. Согласно отчёту JetBrains о состоянии экосистемы разработчиков за 2022 год, около 50% опрашиваемых программистов в течение этого периода использовали SQL в своих проектах.

В этой статье разберёмся с наиболее применяемыми в разработке SQL-запросами и командами для их вызова на реальных примерах.

Типы SQL-запросов

Основные SQL-запросы делятся на несколько типов.

DDL — группа команд для управления объектами в таблицах. Нужна для разработки и описания структур баз данных. DDL-запросы предназначены для регулирования расположения информации в БД. К ним относятся:
  • CREATE

  • RENAME

  • DROP

  • ALTER

  • MODIFY

DML — группа команд, которая отвечает за контроль над данными. К этому типу относятся запросы по добавлению, получению, сохранению, обновлению или удалению различных данных из БД. В число DML-запросов входят такие операторы, как:
  • SELECT

  • DELETE

  • UPDATE

  • INSERT

DCL — группа команд, используемых для предоставления разрешений или запретов пользователям БД. К этому типу относятся запросы настройки СУБД:
  • GRANT

  • DENY

  • REVOKE

TCL — группа команд для управления транзакциями. С их помощью можно контролировать изменения в БД (это делают с использованием DML-запросов). При необходимости их объединяют в пакеты транзакций.
  • BEGIN

  • ROLLBACK

  • COMMIT

Базовые команды SQL

SQL-операторы применяют для взаимодействия с БД. Эти команды необходимы для выполнения различных запросов к таблицам данных, хранящихся на сервере. Они применяются не только для поиска информации, но и для выполнения других функций: создания или удаления таблицы, добавления в неё данных, их изменение. Команды разработаны в простом декларативном формате на английском языке. Такой формат помогает поддерживать точность, безопасность и сохранность данных.

Разберём базовые SQL-операторы, их разработчики применяют чаще всего.

CREATE TABLE

Благодаря CREATE TABLE в БД появляется таблица с необходимым количеством столбцов.

Синтаксис:

CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
...
);

Например:

CREATE TABLE employee (
employee_id INT PRIMARY KEY,
FirstName JOHN(200),
LastName SMITH(200)
);

Здесь у нас открылась новая таблица под названием «Сотрудники».

SELECT

SELECT применяется для извлечения нужных сведений из обозначенных столбцов, выражений и вычислений, находящихся в БД.

Синтаксис:

SELECT column1, column2, ...
FROM table_name;

Например:

SELECT FirstName, LastName
FROM clients;

FROM

Этот вспомогательный SQL-оператор используют для указания места (таблица), где будет происходить выборка данных по SELECT-запросу.

Синтаксис:

SELECT column1, column2, ...
FROM table_name;

Пример есть выше с SELECT, но его также можно использовать с подзапросом, который в скобках ниже:

SELECT FirstName, LastName
FROM (
SELECT ...
);

WHERE

Оператор WHERE применяют для фильтрации или ограничения затрагиваемых строк. Его используют совместно с командами SELECT, UPDATE и DELETE. Вы указываете условия, которые должны быть истинными, чтобы оператор повлиял на строку.

Синтаксис:

SELECT column1, column2, ...
FROM table_name;
WHERE condition;

Например:

SELECT FirstName, LastName
FROM clients;
WHERE status = 'Active';

Этот запрос покажет всех клиентов, у которых значение статуса равно «Активный». Если строка клиента не равна «Активному», она не будет отображаться.

GROUP BY

Эту команду используют в запросе SELECT для объединения или агрегирования данных в группы.

Синтаксис:

SELECT column1, column2, ...
FROM table_name;
GROUP BY condition;

Например:

SELECT FirstName, COUNT(*)
FROM clients
GROUP BY FirstName;

Запрос покажет все значения FirstName и количество этих значений в таблице клиентов.

HAVING

Команда HAVING используется с GROUP BY для фильтрации результатов запроса SELECT после того, как он сгруппирован. Функции похожи на WHERE, однако WHERE работает до группирования данных, а HAVING — после.

Например:

SELECT first_name, COUNT(*)
FROM customer
GROUP BY first_name
HAVING COUNT(*) > 1;

Такая конструкция покажет все значения first_name, а также число их вхождений для тех, количество которых больше 1.

ORDER BY

ORDER BY в SQL используется для указания порядка, в котором должны отображаться результаты запроса SELECT. Разносит информацию по столбцам в нужном виде (например, в порядке возрастания или убывания).

Синтаксис:

SELECT column1, column2, ...
FROM table_name;
ORDER BY column1, column2, ... ASC|DESC;

Пример:

SELECT LastName, FirstName
FROM clients;
ORDER BY FirstName ASC;

При этом будут показаны имена ваших клиентов по алфавиту.

INNER JOIN

При использовании этого SQL-оператора сведения в нескольких таблицах объединяются, после чего отображаются совпадающие в них строки.

Синтаксис:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

Оператор ON указывает здесь условия соответствия различных строк в объединяемых таблицах и связь строк, которые нужно объединить.

Например:

SELECT order.order_id,
clients.FirstName
FROM clients
INNER JOIN order ON clients.clients_id = orders.clients_id;

Запрос выявит все идентификаторы заказа и имена клиентов, если они совпадают в обозначенных таблицах. Условие после оператора ON показывает, что нужно выбирать лишь строки, у которых значение clients_id в таблице clients соответствует значению clients_id в таблице orders.

LEFT JOIN

Команда обозначает тип соединения, при котором две таблицы связываются вместе. Однако в таблице слева от оператора JOIN выводит на экран все записи, и при наличии совпадений в таблице справа они также отобразятся, в противном случае высветится значение NULL.

Синтаксис:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

Например:

SELECT order.order_id,
clients.FirstName
FROM clients
LEFT JOIN order ON clients.clients_id = order.clients_id;

Этот запрос покажет имена всех клиентов, а если они оформили заказы, то и идентификаторы. Если заказа нет, отображается значение NULL.

RIGHT JOIN

Команда обозначает тип соединения, при котором две таблицы связаны. Однако в правой от оператора JOIN таблице будут отображены все записи, и при наличии совпадений в таблице слева они также подтянутся в общий список. В противном случае мы увидим значение NULL.

Синтаксис:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

Например:

SELECT order.order_id,
clients.FirstName
FROM clients
RIGHT JOIN order ON clients.clients_id = order.clients_id;

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

FULL JOIN

(Недоступно в MySQL).

FULL JOIN представляет собой симбиоз левого и правого соединения и показывает совпадающие строки между двумя таблицами. Если в одной таблице нет совпадений со строкой из ​​другой, отображается значение NULL.

Синтаксис:

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
WHERE condition;

Например:

SELECT order.order_id,
clients.FirstName
FROM clients
FULL JOIN order ON clients.clients_id = order.clients_id;

Команда выведет на экран список всех клиентов и всех заказов и, обозначив совпадения строк в обеих таблицах, в случае несовпадения значений выдаст NULL.

AS

Ключевое слово AS позволяет задать псевдоним столбцу или таблице.

Псевдоним в качестве заголовка столбца может быть более читабельным:

SELECT COUNT(FirstName) AS count_fn
FROM clients;

Также его используют в запросе вместо полного имени таблицы:

SELECT o.order_id,
c.FirstName
FROM clients AS c
INNER JOIN order AS o ON c.clients_id = o.clients_id;

DISTINCT

Ключевое слово DISTINCT, как правило, применяется сразу после SELECT для удаления повторяющихся строк из результата.

Если в результатах запроса SELECT строка дублируется, то добавление DISTINCT гарантирует, что появится только один экземпляр строки (дубликаты игнорируются).

Например:

SELECT DISTINCT LastName, FirstName
FROM clients;

LIKE

LIKE нужен для выполнения поиска по подстановочным знакам или по частичному совпадению строковых значений в WHERE-предложении.

Применяется в выражениях для сравнения значений полей со строками.

Синтаксис:

SELECT column1, column2, ...
FROM table_name;
WHERE column LIKE pattern;

Например:

SELECT COUNT(*)
FROM clients
WHERE FirstName LIKE 'A%';

Этот запрос покажет количество записей, имя которых начинается с буквы «А».

AND

Ключевое слово AND позволяет использовать два условия в предложении WHERE и указывает, что они оба должны быть истинными.

Синтаксис:

SELECT column1, column2, ...
FROM table_name;
WHERE condition1 AND condition2 AND condition3 ... ;

Вы можете применять в своих запросах столько операторов AND, сколько необходимо.

Например:

SELECT FirstName, LastName
FROM clients
WHERE status = 'Active'
AND region = 'North';

Этот запрос показывает имя и фамилию клиента со статусом «Активен» и регионом «Север».

OR

Ключевое слово OR позволяет использовать два условия в предложении WHERE и указывает, что хотя бы одно из них должно быть истинным.

Синтаксис:

SELECT column1, column2, ...
FROM table_name;
WHERE condition1 OR condition2 OR condition3 ... ;

Можно использовать любое необходимое количество ключевых слов и критериев «ИЛИ».

Например:

SELECT FirstName, LastName
FROM clients
WHERE status = 'Active'
OR status = 'Pending';

Запрос показывает фамилию и имя клиента со статусом «Активен» или «Ожидание».

BETWEEN

Ключевое слово BETWEEN в SQL применяют в предложении WHERE, чтобы указать, что значение должно находиться в пределах указанного диапазона.

Синтаксис:

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

Значения в предложении BETWEEN инклюзивные.

Например:

SELECT order_id
FROM orders
WHERE order_amount BETWEEN 100 AND 200;

Этот запрос покажет идентификаторы заказов, у которых order_amount находится в диапазоне от 100 до 200 включительно.

EXISTS

С помощью ключевого слова EXISTS проверяют, найдены ли записи в подзапросе. Если найдена хотя бы одна, её можно вернуть в основной запрос и использовать с такими операторами, как SELECT, INSERT, UPDATE и DELETE.

Синтаксис:

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);

Например:

SELECT city_name
FROM cities
WHERE EXISTS (
SELECT id
FROM olympics
WHERE olympics.city_name = cities.city_name
);

Этот запрос отобразит список городов, которые существуют в подзапросе с названиями олимпийских городов.

IN

Ключевое слово IN позволяет проверить список значений или подзапрос, чтобы увидеть, соответствует ли он столбцу или выражению.

Синтаксис:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);

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

SELECT COUNT(*)
FROM clients
WHERE status IN ('Active', 'Pending', 'Paused');

Или с помощью подзапроса:

SELECT COUNT(*)
FROM clients
WHERE status IN (
SELECT status_value
FROM status_lookup
);

Указанные запросы ищут клиентов, которые имеют определённые значения статуса.

UNION

Ключевое слово UNION позволяет объединить результаты двух запросов. Тип данных и количество столбцов должны совпадать.

Синтаксис:

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

Например:

SELECT FirstName, LastName
FROM clients
UNION
SELECT FirstName, LastName
FROM employee;

Запрос покажет один список результатов с именами и фамилиями — как клиентов, так и сотрудников.

LIMIT

(Недоступно в Oracle или SQL Server).

Ключевое слово LIMIT используется всегда в конце запроса и позволяет указать максимальное количество строк, возвращаемых в наборе результатов.

LIMIT применяется в MySQL и PostgreSQL. В Oracle есть похожая функция ROWNUMBER, а в SQL Server — ключевое слово TOP.

Синтаксис:

SELECT columns
FROM table
LIMIT number;

Например:

SELECT FirstName, LastName
FROM clients
LIMIT 10;

Команда выберет первые 10 строк в обозначенной таблице. Её часто используют с предложением ORDER BY, чтобы расположить результаты в определённом порядке.

UPDATE

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

Предложение WHERE является необязательным.

Синтаксис:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition

Например:

UPDATE clients
SET status = 'Inactive'
WHERE clients_id = 4;

Запрос обновит статус на «Неактивный» для строки в таблице клиентов, где идентификатор клиента равен 4. Ключевое слово SET указывает, в каких столбцах и какие значения в таблице будут обновлены.

DELETE

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

Синтаксис:

DELETE FROM table_name WHERE condition;

Например:

DELETE FROM clients
WHERE clients_id = 4;

Запрос удалит записи в таблице клиентов, где clients_id равен 4.

INSERT

Команда INSERT добавит новую запись в таблицу.

Синтаксис:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

Например:

INSERT INTO clients (clients_id, FirstName, LastName)
VALUES (35, 'Ivan', 'Petrov');

ALTER TABLE

ALTER TABLE позволит внести изменения в уже существующую таблицу, например переименовать её или добавить и удалить столбцы.

Синтаксис:

ALTER TABLE table_name
ADD column_name datatype;

Например:

ALTER TABLE clients ADD clients_type VARCHAR(20);

Так мы добавили в таблицу клиентов новый столбец с именем clients_type.

BEGIN-END

BEGIN;
{ sql_statement | statement_block }
END

Оператор BEGIN создан для обозначения новой транзакции. Любые другие команды, следующие за ним, будут рассматриваться как часть этой транзакции, пока она не будет зафиксирована (Commit) или завершена ключевым словом END.

Например:

BEGIN;
UPDATE users SET name = 'John' WHERE id = 1;
END;

COMMIT

Команду COMMIT используют для сохранения изменений текущей открытой транзакции в базе данных. При этом изменения будут сохранены навсегда, поскольку в зависимости от настроек вашей базы данных и IDE они могут не зафиксироваться автоматически.

Синтаксис:

COMMIT; 

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

BEGIN;
UPDATE users SET name = 'John' WHERE id = 1;
COMMIT;

ROLLBACK

Команда ROLLBACK отменяет любые изменения, внесённые в текущую открытую транзакцию. Они не применяются к базе данных.

Синтаксис:

ROLLBACK; 

Использование ROLLBACK откатит транзакцию к предыдущему состоянию.

Например:

DELETE from clients where State = 'Russia';
ROLLBACK;

Заключение

SQL — мощный инструмент в арсенале любого разработчика, и его правильное применение повышает качество и производительность веб-сервисов, взаимодействующих с БД. Он предоставляет множество преимуществ и позволяет создавать эффективные интерфейсы для взаимодействия с серверными хранилищами. А значит, является отличным выбором для API, которые работают с базами данных.

Предыдущая статья
Оцените статью:
Следующая статья