Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
65
Добавлен:
23.11.2017
Размер:
97.28 Кб
Скачать

9.1. Сортировка таблицы результатов запроса

Строки таблицы результатов, как и строки таблицы в БД, не имеют определенного порядка. Чтобы отсортировать таблицу результатов, в операторSELECT нужно включить предложение ORDER BY (рис. 9.1).

Например, таблица результатов следующего запроса отсортирована по двум столбцам ADR и FIO:

SELECT ADR, FIO, POL, SUMD FROM PERSON ORDER BY ADR, FIO

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

Первый столбец (ADR) является главным ключом сортировки, следующие за ним (в данном примере FIO), является всё более второстепенными ключами. Можно сортировать таблицу результатов запроса по любому элементу списка возвращаемых столбцов.

В предложении ORDER BY можно задать возрастающий или убывающий порядок сортировки. По умолчанию, данные сортируются в порядке возрастания (ASC). Чтобы сортировать данные по убыванию, следует использовать ключевое слово DESC. Например:

SELECT * FROM PERSON ORDER BY SUMD DESC

Если столбец таблицы результатов, используемый для сортировки, является вычисляемым, то у него нет имени. Поэтому в таком случае вместо имени столбца необходимо указать его порядковый номер:

SELECT FIO, ADR, SUMD*0.12

From person

ORDER BY 3 DESC

Одновременно используя имена и номера столбцов, а также возрастающий и убывающий порядки сортировки, можно сортировать таблицу результатов запроса по достаточно сложному алгоритму. Например, можно вывести список жителей, отсортированный по полу (причем сначала мужчин, затем женщин), а для каждого поля – отсортированный по возрастанию размера налога:

SELECT FIO, ADR, POL, SUMD*0.12

From person

ORDER BY POL DESC, 4 ASC

9.2. Объединение результатов нескольких запросов

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

SELECT ADR, POL FROM PERSON

WHERE SUMD<1000.00

UNION

SELECT ADR, KCATEGORY FROM FLAT

WHERE SKV<30.00

Чтобы таблицы результатов запроса можно было объединить с помощью оператора UNION, они должны удовлетворять следующим требованиям:

  1. таблицы должны содержать одинаковое число столбцов;

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

  3. ни одна из таблиц не может быть отсортирована с помощью предложения ORDER BY, однако объединенные результаты запроса можно отсортировать.

Обратите внимание на то, что имена столбцов в объединяемых таблицах не обязательно должны быть одинаковыми.

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

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

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

Оператор UNION можно использовать многократно, чтобы объединить результаты трех или более запросов, например:

SELECT*FROM A

UNION (SELECT*FROM B UNION SELECT*FROM C)

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

Если используются одинаковые формы оператора UNION (т.е. только UNION либо только UNION ALL), то порядок выполнения операторов не имеет значения. Следующие операторы полностью эквивалентны:

A UNION (B UNION C)

(A UNION B ) UNION C

(A UNION C) UNION B

Эквивалентными являются и такие операторы:

A UNION ALL (B UNION ALL C)

(A UNION ALL B) UNION ALL C

(A UNION ALL C) UNION ALL B

Однако если в запросы на объединения входят как операторы UNUON, так и операторы UNION ALL, то порядок следования этих операторов имеет значение. Если операторы A UNION ALL B UNION C проинтерпретировать как A UNION ALL (B UNION C) то в таблице результатов может содержать повторяющиеся строки. Однако если эти операторы проинтерпретировать как (A UNION ALL B) UNION C, то в таблице результатов повторяющихся строк не будет.

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

Соседние файлы в папке БД лабы