Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
28.11.2025
Размер:
1.28 Mб
Скачать

Раздел ORDER BY и ключевое слово TOP

Раздел определяет порядок сортировки записей, включенных в выборку:

… ORDER BY поле1[ASC / DESC] [, поле2[ASC / DESC] [,…]]

Особенности:

раздел не является обязательным, однако он обязательно используется с предикатом TOP;

по умолчанию сортировка идет по возрастанию, можно явно указать возрастающую сортировку, записав ASC. Ключ DESC задает сортировку по убыванию;

порядок перечисления полей задает иерархию уровней сортировки;

ORDER BY – последняя директива в запросе.

Отсортировать записи по полю ФИО в алфавитном порядке:

SELECT R1.* FROM R1 ORDER BY ФИО;

Отсортировать записи в порядке убывания значений в поле Оценка:

SELECT R1.* FROM R1

ORDER BY Оценка DESC;

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

Выбрать из таблицы Студенты(НомерЗачетки, ШифрГруппы,ФИО, ГодВыпуска, СреднийБалл) 5 лучших студентов выпуска 2012 года:

SELECT TOP 5 ФИО, ШифрГруппы FROM Студенты

WHERE ГодВыпуска = 2012 ORDER BY СреднийБалл DESC;

Число, используемое в предикате TOP, должно быть целям без знака. Без директивы ORDER BY в выборку попали бы любые 5 студентов выпуска 2012 года. Предикат TOP не разделяет записи, имеющие одинаковые значения при упорядочивании. Это значит, если 5-й, 9-й, 7-й студенты имеют одинаковый средний балл, то в выборке будет не 5, а 7 записей.

Можно использовать ключевое слово PERCENT для того, чтобы включить в выборку определенный процент из верхней или нижней части диапазона, отсортированного в соответствии с директивой ORDER BY.

Выбрать 10 процентов записей выпуска 2012 года из таблицы Студенты:

SELECT TOP 10 PERCENT ФИО, ШифрГруппы

FROM Студенты

WHERE ГодВыпуска = 2012 ORDER BY СреднийБалл DESC;

Вложенные запросы

В части FROM оператора SELECT допустимо применять синонимы (алиасные имена) к именам таблицы, если при формировании запроса требуется более чем один экземпляр некоторого отношения. Синонимы задаются с использованием ключевого слова AS, которое может быть вообще пропущено. Поэтому часть FROM может выглядеть следующим образом:

FROM R1 AS A, R1 AS B

или

FROM R1 A, R1 B

Оба выражения эквивалентны и рассматриваются как применения оператора SELECT к двум экземплярам таблицы R1.

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

подзапросы должны включаться в круглые скобки;

предложение ORDER BY может быть использовано только в основном запросе;

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

Даны две таблицы: Товары (КодТовара, Наименование, Цена) и Продажи (Чек, КодТовара, Продано). Из таблицы Товары требуется отобрать товары (указать поля Наименование и Цена), для которых поле Продано превышает 10:

SELECT Наименование, Цена FROM Товары

WHERE (Продано>10) AND (Товары.КодТовара = Продажи.КодТовара);

Выбрать из таблицы Продажи (указать поля Чек и Продано) товары с наименованием «Шоколад Путешествие»:

SELECT Чек, Продано FROM Продажи

WHERE КодТовара = SELECT КодТовара FROM товары

WHERE Наименование = “Шоколад Путешествие”;

Внутренние и внешние объединения

В общем случае синтаксис FROM в стандарте SQL2 выглядит следующим образом:

FROM <список исходных таблиц>| <выражение естественного объединения>| <выражение объединения>| <выражение перекрестного объединения>| <выражение запроса на объединение>

где

<список исходных таблиц> – это <имя таблицы 1> [имя синонима таблицы 1] […] [,<имя таблицы N> [имя синонима таблицы N]];

<выражение естественного объединения> – это <имя таблицы 1>

NATURAL {INNER | FULL [OUTER] LEFT [OUTER] |

RIGHT [OUTER]} JOIN <имя таблицы 2>;

<выражение объединения> – <имя таблицы 1> {INNER | FULL [OUTER] LEFT [OUTER] | RIGHT [OUTER]} JOIN <ON условие | [USING (список столбцов)]}< имя таблицы 2>;

<выражение перекрестного объединения> – <имя таблицы 1> CROSS JOIN <имя таблицы 2>;

<выражение запроса на объединение>– <имя таблицы 1> UNION JOIN <имя таблицы 2>.

В этих определениях INNER – означает внутреннее соединение, LEFT – левое объединение, т.е. в результат входят все строки первой таблицы, а части результирующих кортежей, для которых не было соответствующих значений во второй таблице, дополняются значениями NULL (не определено). Ключевое слово RIGHT означает правое внешнее соединение, и в отличие от левого соединения в этом случае в результирующее отношение включаются все строки второй таблицы, а недостающие части из первой таблицы дополняются неопределенными значениями. Ключевое слово FULL определяет полное внешнее объединение: левое и правое. При полном внешнем объединении выполняются и правое, и левое внешние объединения и в результирующее отношение включаются все строки из первой таблицы, дополненные неопределенными значениями, и все строки из второй таблицы, также дополненные неопределенными значениями. Ключевое слово OUTER означает внешнее объединение, но если заданы ключевые слова FULL, LEFT, RIGHT, то объединение всегда считается внешним.

Соседние файлы в папке Лекции ПрБД, 2 курс 3 семестр (для ИВТ и т.п.)