Data Query Language - Язык запросов
Имеет в себе одну команду — select
Операторы:
- from — указывается из какой таблицы будут копироваться данные в результирующую
- where — условие для вывода информации
- group by — группировка данных(создание временной таблицы, по столбцам из выборки)
- having — условия для вывода информации, для сгруппированных данных
- order by — сортировка выводных данных
- limit — ограничение количество столбцов на вывод
select
Как работает?
Создаёт временную таблицу и выводит данные (переносит из таблицы, указанной в from)
select операнд1, операнд2
Операнд - ИДС, значение, агрегированная функция, подзапрос и так далее.
select 1234+123,'Фырк'
Действия(спец. символы, слова..)
*позволяет выбрать все столбцы из таблицы
select * from students
- Математические действия(как в
set)
select age * 2 from students
asпозволяет присваивать новые ИНДФ (операторы присваивания)
select name as "Имя студента" from students
.позволяет уточнить из какой таблицы берётся столбец
select students.name from students
- Добавление символьных значений
select students.name || " Почему бы и нет?" from students
distinct- строковый оператор, позволяющий не выводить повторяющиеся строки или значения
select distinct students.name from students
-- Не выведет два Ивана!
- Агрегированные функции - короткая запись, которая вызывает какие-либо действия над данными
Общий вид:
select название_ф-ии(ИДТ) from ИДС
Пример:
select min(age) from students
Агрегированные функции:
Маленькая неполная сводка, просто для примера:
| Название | Описание |
|---|---|
| sum | Сумма всех значений столбца |
| avg | Среднее всех значений столбца |
| min | Минимум всех значений столбца |
| max | Максимум всех значений столбца |
| count | Количество записей |
- | extract | Извлечение значения из каскада; также, например, из даты месяца и так далее. | | concat | Объединение двух столбцов с образованием каскада |
Виды агрегированных функций:
- По столбцам (arg, sum, min, max...)
- По строкам (concat, count, extract)
По работе с типами данных:
- С числовыми (arg, sum...)
- С символьными типами (extract)
- С любыми(min, max, count, concat)
Пример extract:
select extract(year from students.birthdate) from students
Операторы:
from
Можно указать из какой таблицы берутся данные
from ИДТ
Можно указывать таблицы через запятую, тогда каждая запись первой таблицы будет сопоставляться с записью из второй таблицы и так далее.
select * from students, teachers -- Вернёт количество записей равное кол-ву записей в первой * на кол-во во второй
Действия во from
- Объявлять временные связи
| Действие | Описание |
|---|---|
| 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
- Подзапрос
(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
Виды условий:
- Сравнительные: = >= <= !=
- Диапазон -
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 - Работает с любыми типами данных
- Принадлежность к множеству -
inПозволяет сравнить несколько значений за 1 условие к 1 ИДС
**Общий вид:
where ИДС in (значение, значение, значение)
Пример:
where grade in (2, 5); -- Двоечники и 5-отличники
- Шаблон -
likeПозволяет обратиться напрямую к значению, а не к полю целиком Общий вид:
where ИДС like 'шаблон'
Специальные символы:
%- 0-∞ любых символов_- один любой символ, либо пустота
Примеры:
222: where name like 'А%' -- имя начинается с A
223: where name like '%а' -- имя заканчивается на а
224: where name like '%а%' -- имя имеет а
225: where name like '____' -- имя не более 4 символов
- Проверка на пустые значения -
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)
Виды подзапросов:
- Скалярные - это подзапрос, который возвращает одно значение(можно использовать с ним операторы сравнения)
- Табличный - это подзапрос, который возвращает 2 и более значения
Использование: Скалярный - select, set, values Табличный - from
group by
group by - группировка данных, создаёт временную таблицу внутри запроса, которая будет состоять из столбцов, указанных в операторе.
Данные, которые будет выводить select, будут браться из таблицы, созданной group by
- В group by можно использовать только ИДС
- Все столбцы, которые указаны в select(не те которые используется в определении агрегир. функций), должны быть указаны в group by
- в from обязательно должно быть указаны в group by
- Столбцы использованные в 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
Операторы:
- asc(от ascending) от меньшего к большему(например 0 -> 99)
- desc(от descending) от большего к меньшего(например 99 -> 0)
Как происходит сортировка:
- 0-9 и специальные символы
- Английский алфавит
- Русский алфавит
Если указывается 2+ столбцов для сортировки, то для второго и последующих сортировка будет идти только для одинаковых значений первого столбца и так далее.
Нюансы:
- В order by только ИДС
- Только для главного select использовать рационально (в подзапросах смысла нет)
limit - ограничение количества записей
limit N -- Где N количество записей
offset - смещение ответа на несколько записей
offset N -- Где N количество записей которые будут пропущены