Операторы сортировки MySQL

Операторы сортировки



Оператор ORDER BY

Оператор DISTINCT

Оператор LIMIT

Операторы DESC и ASC

Оператор LIKE

Оператор EXISTS

Операторы ANY и ALL

Примеры запросов



Оператор 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:


bd-8-1

Наверх



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 ...






Наверх Наверх