FoxelyssFoxelyss
Время чтения: 5 min
Изменено:18.09.2026, 19:09:51

Data Query Language - Язык запросов

Имеет в себе одну команду — select

Операторы:

  1. from — указывается из какой таблицы будут копироваться данные в результирующую
  2. where — условие для вывода информации
  3. group by — группировка данных(создание временной таблицы, по столбцам из выборки)
  4. having — условия для вывода информации, для сгруппированных данных
  5. order by — сортировка выводных данных
  6. limit — ограничение количество столбцов на вывод

select

Как работает?

Создаёт временную таблицу и выводит данные (переносит из таблицы, указанной в from)

select операнд1, операнд2

Операнд - ИДС, значение, агрегированная функция, подзапрос и так далее.

select 1234+123,'Фырк'

Действия(спец. символы, слова..)

  1. * позволяет выбрать все столбцы из таблицы
select * from students
  1. Математические действия(как в set)
select age * 2 from students
  1. as позволяет присваивать новые ИНДФ (операторы присваивания)
select name as "Имя студента" from students
  1. . позволяет уточнить из какой таблицы берётся столбец
select students.name from students
  1. Добавление символьных значений
select students.name || " Почему бы и нет?" from students
  1. distinct - строковый оператор, позволяющий не выводить повторяющиеся строки или значения
select distinct students.name from students
-- Не выведет два Ивана!
  1. Агрегированные функции - короткая запись, которая вызывает какие-либо действия над данными

Общий вид:

select название_ф-ии(ИДТ) from ИДС

Пример:

select min(age) from students

Агрегированные функции:

Маленькая неполная сводка, просто для примера:

НазваниеОписание
sumСумма всех значений столбца
avgСреднее всех значений столбца
minМинимум всех значений столбца
maxМаксимум всех значений столбца
countКоличество записей
  1. | extract | Извлечение значения из каскада; также, например, из даты месяца и так далее. | | concat | Объединение двух столбцов с образованием каскада |

Виды агрегированных функций:

  1. По столбцам (arg, sum, min, max...)
  2. По строкам (concat, count, extract)

По работе с типами данных:

  1. С числовыми (arg, sum...)
  2. С символьными типами (extract)
  3. С любыми(min, max, count, concat)

Пример extract:

select extract(year from students.birthdate) from students

Операторы:

from

Можно указать из какой таблицы берутся данные

from ИДТ

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

select * from students, teachers -- Вернёт количество записей равное кол-ву записей в первой * на кол-во во второй
Действия во from
  1. Объявлять временные связи
ДействиеОписание
inner joinобъединяет значения по одинаковым атрибутам в таблицах
left joinОбъединяет таблицы по одинаковым атрибутам в таблицах + все данные из левой таблицы
right joinОбъединяет таблицы по одинаковым атрибутам в таблицах + все данные из правой таблицы
full join(join)Объединяет таблицы полностью

Общий вид:

from ИДТ inner/left/right/full 
join ИДТ2 on ИДТ1.ИДС=ИДТ2.ИДС

Для 3 и более

from ИДТ inner/left/right/full 
(inner/left/right/full join ИДТ2 on ИДТ2.ИДС=ИДТ3.ИДС) 
join ИДТ2 on ИДТ1.ИДС=ИДТ2.ИДС

Примеры:

select * from students
inner join grades.stud_id = students.id
select * from teachers 
(select * from students
right join grades.stud_id = students.id) 
inner join teachers.id = grades.teacher_id
  1. Подзапрос
(select * from students
right join grades.stud_id = students.id) 

Можно использовать в агрегированных функциях

select sum(select * from students
right join grades.stud_id = students.id) 

where - оператор условия

Условие выполняется слева направо

В условии нет “,”, так что вместо неё используются логические операторы

where операнд1 вид_усл операнд2

Виды условий:

  1. Сравнительные: = >= <= !=
  2. Диапазон - between

Общий вид:

where ИДС between знач1 and знач2

Общий вид: (Поиск вне диапазона)

where ИДС not between знач1 and знач2

Пример:

select * from students
where grade between 3 and 5;

Особенности:

  • значения, которые указаны входят в пул поиска включительно
  • between - одно действие в отличии от аналогичного, но сравнительными, как например: 10 <= a and a <= 20 против a between 10 and 20
  • Работает с любыми типами данных
  1. Принадлежность к множеству - in Позволяет сравнить несколько значений за 1 условие к 1 ИДС

**Общий вид:

where ИДС in (значение, значение, значение)

Пример:

where grade in (2, 5); --  Двоечники и 5-отличники
  1. Шаблон - like Позволяет обратиться напрямую к значению, а не к полю целиком Общий вид:
where ИДС like 'шаблон'

Специальные символы:

  • % - 0-∞ любых символов
  • _ - один любой символ, либо пустота

Примеры:

222: where name like 'А%' -- имя начинается с A
223: where name like '%а' -- имя заканчивается на а
224: where name like '%а%' -- имя имеет а
225: where name like '____' -- имя не более 4 символов
  1. Проверка на пустые значения - is null/is not null
where salary is null -- если ЗП пуста(null)
where salary is not null -- если ЗП не пуста(not null)

Подзапросы

Позволяет внутри select использовать ещё один select Общий вид:

select ИДС, (select ...)

При выполнении кода, в котором присутствует подзапрос, он выполняется в первую очередь и вместо себя подставляет данные, которые он найдёт

Пример:

select students.surname, 
(select students.age from students where students.surname = 'Иванова') 
from students

Структура подзапроса и что в нем можно использовать?

— всё то же самое, что и в обычном запросе (select)

Виды подзапросов:

  1. Скалярные - это подзапрос, который возвращает одно значение(можно использовать с ним операторы сравнения)
  2. Табличный - это подзапрос, который возвращает 2 и более значения

Использование: Скалярный - select, set, values Табличный - from

group by

group by - группировка данных, создаёт временную таблицу внутри запроса, которая будет состоять из столбцов, указанных в операторе.

Данные, которые будет выводить select, будут браться из таблицы, созданной group by

  1. В group by можно использовать только ИДС
  2. Все столбцы, которые указаны в select(не те которые используется в определении агрегир. функций), должны быть указаны в group by
  3. в from обязательно должно быть указаны в group by
  4. Столбцы использованные в having также должны быть обязательно указаны в group by 269: 5. Если используется group by и требуется фильтрация данных, то используется только having (рекомендация, можете запутаться, если будут и where, и having).

having

Оператор объявления условия для сгруппированных данных.

Общий вид:

select ... from ...
group by ...
having операнд вид_усл операнд

Можно выполнять все действия, что и в where, порядок выполнения и синтаксис одинаковый.

ТОЛЬКО:

  • where - для исходных таблиц
  • having - для временной таблицы созданной group by

Можно использовать агрегированные функции в условии

order by

Сортировка выводных данных

Общий вид:

select * from students
order by id

Операторы:

  1. asc(от ascending) от меньшего к большему(например 0 -> 99)
  2. desc(от descending) от большего к меньшего(например 99 -> 0)

Как происходит сортировка:

  1. 0-9 и специальные символы
  2. Английский алфавит
  3. Русский алфавит

Если указывается 2+ столбцов для сортировки, то для второго и последующих сортировка будет идти только для одинаковых значений первого столбца и так далее.

Нюансы:

  1. В order by только ИДС
  2. Только для главного select использовать рационально (в подзапросах смысла нет)

limit - ограничение количества записей

limit N -- Где N количество записей

offset - смещение ответа на несколько записей

offset N -- Где N количество записей которые будут пропущены