MySQL
Операторы сортировки
Оператор ORDER BY
Оператор ORDER BY (ПОРЯДОК ПО) применяется для сортировки результирующего набора данных по одной или нескольким колонкам.
Для определения порядка сортировки используются ключевые слова ASC (по возрастанию) или DESC (по убыванию).
По умолчанию данные сортируются по возрастанию.
SELECT поле1, поле2, ... FROM имя_таблицы WHERE условие
ORDER BY поле1, поле2, ... ASC(DESC);
Конструкция ORDER BY позволяет сделать сортировку по нескольким полям.
Происходит сортировка по первому указанному полю, а внутри неё сортировка по второму полю:
ORDER BY поле1 ASC(DESC), поле2 ASC(DESC);
Оператор DISTINCT
DISTINCT используется для получения только неповторяющихся данных.
Оператор DISTINCT может использоваться только с операторами SELECT.
SELECT DISTINCT поле1, поле2, ... FROM имя_таблицы;
Оператор LIMIT
Чтобы ограничить количество выбранных записей используется оператор LIMIT:
LIMIT [смещение_относительно_начала,] количество_извлекаемых_строк
- если оператору LIMIT передается один параметр, то он указывает на количество извлекаемых строк.
Если передается два параметра, то первый параметр устанавливает смещение относительно начала, то есть сколько строк нужно пропустить, а второй параметр также указывает на количество извлекаемых строк.
Операторы DESC и ASC
С помощью оператора DESC можно задать сортировку по убыванию.
А параметр ASC (по умолчанию) устанавливает порядок сортирования по возрастанию, от меньших значений к большим.
DESC LIMIT [смещение_относительно_начала,] количество_извлекаемых_строк ;
Оператор LIKE
Для сравнения символьных строк на схожесть с определённым шаблоном используется оператор LIKE (ПОХОЖИЙ).
Существует два вида шаблонов, которые используются вместе с LIKE:
% - Символ процента - заменяет любую последовательность символов.
_ - Символ подчеркивания - заменяет один любой символ
Символ процента обозначает один или несколько символов,
а знак подчёркивания – одно число, или символ.
Для комбинирования нескольких условий можем использовать операторы AND или OR.
Синтаксис оператора LIKE имеет следующий вид:
SELECT FROM имя_таблицы WHERE имя_поля LIKE 'шаблон';
или
SELECT FROM имя_таблицы WHERE имя_поля LIKE '%шаблон';
или
SELECT FROM имя_таблицы WHERE имя_поля LIKE '%шаблон%';
или
SELECT FROM имя_таблицы WHERE имя_поля LIKE '_шаблон';
Оператор EXISTS
Оператор EXISTS (СУЩЕСТВУЕТ) проверяет, возвращает ли подзапрос какое-либо значение.
Этот оператор не возвращает строки, а лишь указывает на то, что в базе данных есть как минимум одна строка, которая соответствует данному запросу.
Синтаксис оператора EXISTS:
WHERE [NOT] EXISTS подзапрос;
Операторы ANY и ALL
Чтобы при использовании в операторах сравнения подзапрос мог возвращать набор значений, перед ним необходимо использовать один из операторов: ALL или ANY
[запрос] [оператор_сравнения] ALL(ANY) ([подзапрос]);
При использовании оператора ALL условие в операции сравнения должно быть верно для всех значений, которые возвращаются подзапросом.
При использовании оператора ANY условие в операции сравнения должно быть верно хотя бы для одного значения, которые возвращаются подзапросом.
Примеры запросов
Таблица workers из базы данных newDB:
ORDER BY, DESC, ASC
SELECT * FROM workers ORDER BY age ASC;
- выведет все записи, отсортированные по полю "age" по возрастанию
SELECT * FROM workers ORDER BY name;
- выведет все записи, отсортированные по полю "name" в алфавитном порядке
SELECT name, surname, age FROM workers ORDER BY name DESC ;
- выведет записи полей "name", "surname","age",
отсортированные по полю "name" в алфавитном порядке по убыванию
Сортировка по полям "name" и "age" по убыванию:
SELECT name, age FROM workers ORDER BY name DESC , age DESC ;
- сначала выведет все записи полей "name", "age"
отсортированные по полю "name" в алфавитном порядке по убыванию,
затем строки, с одинаковыми значениями (где "name"='Юра'),
сортируются по полю "age" по убыванию (Юра -> 25, Юра -> 24)
DISTINCT
SELECT DISTINCT name FROM workers;
- выведет уникальные (неповторяющиеся) значения полей "name",
("name"='Юра' - будет выведено один раз)
LIMIT
SELECT id FROM workers LIMIT 2;
- выведет две первые записи ("id" = 1, "id" = 2).
SELECT id FROM workers LIMIT 2, 3;
- в данном случае пропускаются две первые строки ("id" = 1, "id" = 2)
и извлекаются следующие 3 строки ("id" = 3, "id" = 4, "id" = 5).
Как правило, оператор LIMIT используется вместе с оператором ORDER BY:
SELECT * FROM workers ORDER BY id LIMIT 2, 3;
- в данном случае пропускаются две первые строки (где id=1, id=2)
и извлекаются следующие 3 строки (где id=3,id=4,id=5.)
С помощью оператора DESC можно задать сортировку по убыванию:
SELECT * FROM workers ORDER BY id DESC LIMIT 2, 3;
- в данном случае пропускаются две последнии строки (где id=12, id=11)
и извлекаются следующие за ними 3 строки (где id=10, id=9, id=8).
LIKE
Получить список всех инженеров, которые содержат в поле "specialty" (специальность) последовательность символов - "инженер".
Для этого нам необходимо использовать следующую команду:
SELECT name, surname FROM workers WHERE specialty LIKE 'инженер';
- выведет: ... [name] => Катя ... [surname] => Каткина
...[name] => Саша [surname] => Сашкин ... .
EXISTS
Вывести список всех работников, если у кого-нибудь из них есть зарплата больше 50000:
SELECT name, surname FROM workers WHERE EXISTS;
(
SELECT *
FROM workers
WHERE salary > 50000;
)
- выведет список всех работников, так как подзапрос выполняется.
Вывести список всех работников, если у кого-нибудь и них есть зарплата больше 100000:
SELECT name, surname FROM workers WHERE EXISTS;
(
SELECT *
FROM workers
WHERE salary > 100000;
)
- не выведет ничего, так как подзапрос не выполняется -
- зарплаты(salary) больше 100000 нет ни у кого.
Операторы ALL и ANY
Найти имена и зарплату всех работников, чья заработная плата больше заработной платы любого работника по специальности "инженер":
SELECT name, salary FROM workers WHERE
salary > ALL(SELECT salary FROM workers WHERE specialty = 'инженер');
Получим: [name] => Вася [salary] => 100000 )
- чтобы найти этих работников, сначала надо выполнить подзапрос на получение всех зарплат инженеров:
ALL(SELECT salary FROM workers WHERE specialty = 'инженер').
Найти имена и зарплату всех работников, чья зарплата превышает зарплату хотя бы одного работника по специальности "инженер":
SELECT name, salary FROM workers WHERE ;
salary > ANY(SELECT salary FROM workers WHERE specialty = 'инженер');
Получим: ... [name] => Вася [salary] => 100000 ...
[name] => Петя [salary] => 70000 ... [name] => Катя [salary] => 70000 ...
Наверх Наверх