Предложение ORDER BY

Предложение ORDER BY позволяет выполнить сортировку результатов запроса, оно всегда ставится в конец команды SELECT. Для изменения порядка сортировки используются опции ASC – возрастание или DESC – убывание. По умолчанию сортировка идет по возрастанию. При сортировке по нескольким столбцам столбцы перечисляются через запятую. Порядок указания выражений сортировки определяет приоритет того или иного выражения.

Пример 65

Задача.

Сформировать запрос для вывода списка имен студентов по возрастанию (убыванию).

Решение.

SELECT SName ФИО

FROM Student

ORDER BY SName;

Результат реализации запроса:

И, аналогично, по убыванию

SELECT SName ФИО

FROM Student

ORDER BY SName DESC;

Результат реализации запроса:

Пример 66

Задача.

Сформировать запрос для вывода списка имен и оценок студентов, расположив по возрастанию имена студентов, а также расположив для каждого студента его оценки по возрастанию.

Решение.

SELECT SName ФИО, Mark Оценка

FROM Student S INNER JOIN Progress P

ON S.NRecordBook= P.NRecordBook

ORDER BY SName, Mark;

Результат реализации запроса:

Сортировку можно осуществлять по любому столбцу используемой в запросе таблицы, независимо от того включен этот столбец в SELECT-список или нет.

Пример 67

Задача.

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

Решение.

SELECT SName ФИО, Mark Оценка

FROM Student S INNER JOIN Progress P

ON S.NRecordBook= P.NRecordBook

INNER JOIN Subject Sb

ON Sb.IDSubject= P. IDSubject

ORDER BY NTerm,NameSubject;

Результат реализации запроса:

Задание 28

Сформировать запрос для вывода имен всех преподавателей, которые ведут дисциплину Базы данных.

Задание 29

Сформировать запрос для вывода названия дисциплин, по которым сдается экзамен. Название дисциплин расположить в порядке возрастания.

Задание 30

Сформировать запрос для вывода имен преподавателей и названий дисциплин, которые они ведут, если по этим дисциплинам выставлена хоть одна оценка.

Задание 31

Сформировать запрос для вывода имен преподавателей, которые преподают как в 5, так и в 6 семестрах.

Задание 32

Сформировать запрос для вывода запланированных занятий в 5 семестре.

Задание 33

Сформировать запрос для вывода плановой нагрузки по каждому преподавателю.

Задание 34

Сформировать запрос для вывода плановой нагрузки каждого преподавателя по семестрам.

Объединение двух или более запросов с помощью UNION

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

Основные правила при реализации операций над множествами

· запросы, соединяемые оператором UNION должны иметь одинаковое количество столбцов в предложении SELECT;

· возвращаемый комбинированный результат будет иметь заголовки столбцов первого предложения SELECT;

· тип данных каждого столбца должен быть совместим с типом данных соответствующего столбца другого запроса;

· по умолчанию режимом вывода для UNION является DISTINCT. Для того, чтобы отключить режим по умолчанию, необходимо после оператора UNION поставить опцию ALL. Во втором случае в отличие от режима по умолчанию будут выведены все повторяющиеся строки.

Пример 68

Задача.

Получить все записи о студентах, фамилии которых начинаются на букву 'М' или 'И'.

Решение.

SELECT NRecordBook,SName

FROM Student

WHERE SUBSTRING(SName,1,1)= 'М'

UNION

SELECT NRecordBook,SName

FROM Student

WHERE SUBSTRING [8] (SName,1,1)= 'И'

Результат выполнения запроса.

Пример 69

Задача.

Получить все записи о студентах, которые сдали экзамен или по дисциплине БД (Базы данных) или по дисциплине ВМ (Высшая математика).

Решение.

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

SELECT SName

FROM Student S

INNER JOIN Progress P

ON S.NRecordBook=P.NRecordBook

INNER JOIN Subject SB

ON SB.IDSubject=P.IDSubject

INNER JOIN Report R

ON R.IDReport=P.IDReport

WHERE NameSubject='БД' AND NameReport='Экзамен'

UNION

SELECT SName

FROM Student S

INNER JOIN Progress P

ON S.NRecordBook=P.NRecordBook

INNER JOIN Subject SB

ON SB.IDSubject=P.IDSubject

INNER JOIN Report R

ON R.IDReport=P.IDReport

WHERE NameSubject='ВМ' AND NameReport='Экзамен'

Результат выполнения запроса.

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

Результат выполнения запроса.

Предложение ORDER BY в операциях над множествами может стоять только в последнем предложении запроса, при этом вместо имен столбцов используются их номера из предложения SELECT.

Пример 70

Задача.

Вывести всех студентов, у которых есть отличные или хорошие оценки.

Решение.

SELECT SName ФИО

FROM Student S INNER JOIN Progress P

ON S.NRecordBook=P.NRecordBook

WHERE Mark=4

UNION

SELECT SName ФИО

FROM Student S INNER JOIN Progress P

ON S.NRecordBook=P.NRecordBook

WHERE Mark=5

ORDER BY 1

Результат выполнения запроса.

Задание 35

Используя операторы над множествами, вывести имена всех студентов, которые сдали экзамен по дисциплине УД или по дисциплине СУБД.

Вопросы для самоконтроля к лабораторной работе № 4

1. Какие предложения в команде SELECT являются обязательными?

2. Какое из предложений используется для исключения групп строк из результата запроса?

3. C помощью какого предложения создаются группы?

4. В каком порядке в команде SELECT должны располагаться предложения ORDER BY, GROUP BY, WHERE?

5. В чем заключается различие между предложениями WHERE и HAVING?

6. В каких случаях запрос, построенный с использованием предложений HAVING, может быть преобразован в эквивалентный запрос без использования этого предложения?

7. Какие предложения позволяют ограничить количество выводимых строк?

8. В чем отличие простого запроса от сложного?

9. С помощью каких ключевых слов в команде SELECT осуществляется проверка вхождения результата вычисления выражения в заданное множество? {in, not in}.

10. Какая функция используется для подсчета кортежей, отвечающих заданному условию?

11. Какой вид будет иметь команда SELECT, реализующая операцию проекции на атрибуты AB в отношении со схемой R={ABCD}?

12. Какое из предложений команды SELECT накладывает ограничение на отбор групп?

13. Как следует сформировать запрос к таблице R1={AB} и R2={CD}, чтобы получить их декартово произведение?

14. Возможно ли, используя команду SELECT, реализовать операцию деления?

15. В каких случаях нельзя для осуществления операции выбора использовать предложение WHERE?

16. Какие особенности следует учитывать при реализации оператора UNION?

17. В каких случаях после реализации оператора UNION будет получено отношение?



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: