Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа КИС .doc
Скачиваний:
6
Добавлен:
17.11.2019
Размер:
633.86 Кб
Скачать

Оператор select

Оператор SELECT используется для запросов к базе данных и выборки результатов. Синтаксис оператора SELECT следующий:

<оператор SELECT>::=

SELECT [ALL | DISTINCT] <список выборки>

<табличное выражение>

ORDER BY <спецификация сортировки>]

<табличное выражение>::=

FROM <имя таблицы>[{,<имя таблицы>}…]

[WHERE <условие поиска>]

[GROUP BY <имя столбца> [{,<имя столбца>}…]

[HAVING <условие поиска>]

 

Если задано ключевое слово DISTINCT, то из результирующей таблицы удаляются повторяющиеся строки. Список выборки определяет, какие столбцы должны быть возвращены в результирующую таблицу. Данный список представляет список арифметических выражений над значениями столбцов таблиц из раздела FROM и констант. В простейшем случае он может быть, например, списком имен некоторых столбцов таблиц из раздела FROM. В случае, если вместо списка выборки стоит звездочка (*), то выбираются все столбцы таблиц из раздела FROM.

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

Раздел WHERE служит своего рода фильтром при отборе данных.

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

Результатом выполнения раздела HAVING является сгруппированная таблица, содержащая только те группы строк, для которых результат вычисления условия поиска является истинным. Условие поиска раздела HAVING задает условие на целую группу, а не на индивидуальные строки, поэтому в данном случае прямо можно использовать только столбцы, указанные в качестве столбцов группирования в разделе GROUP BY.

Раздел ORDER BY позволяет установить желаемый порядок просмотра результирующей таблицы. Спецификация сортировки имеет следующий синтаксис:

<спецификация сортировки>::= {<целое без знака> | <имя столбца>} [ASC | DESC]

Как видно, фактически задается список столбцов, и для каждого столбца указывается порядок просмотра строк результирующей таблицы в зависимости от значений этого столбца (ASC - по возрастанию (умолчание), DESC - по убыванию). Указывать сортируемый столбец можно по имени или по порядковому номеру в результирующей таблице.

 

Предикаты условия поиска

В условии поиска могут использоваться следующие предикаты: предикат сравнения, предикат BETWEEN , предикат IN, предикат LIKE, предикат NULL, предикат с квантором и предикат EXISTS.

Предикат IN определяется следующим образом:

<предикат IN>::= <выражение> [NOT] IN (<значение> [,<значение>...] | .<подзапрос>)

Значение предиката является истинным, когда значение левого операнда совпадает хотя бы с одним значением списка правого операнда. Использование ключевого слова NOT осуществляет отрицание результата.

Подзапрос- это запрос, используемый в предикате условия поиска. Результатом выполнения подзапроса является единственный столбец.

Предикат BETWEEN определяется следующим образом:

<предикат BETWEEN>::= <выражение> [NOT] BETWEEN <выражение> AND <выражение>

По определению результат x BETWEEN y AND z тот же самый, что результат логического выражения x>=y AND x<=z.

Предикат LIKE имеет следующий синтаксис:

<предикат LIKE>::= <имя столбца> [NOT] LIKE <шаблон>[ESCAPE <escape-символ>]

Значение предиката LIKE является истинным, если шаблон является подстрокой заданного столбца. При этом, если раздел ESCAPE отсутствует, то при составлении шаблона со строкой производится специальная интерпретация символов-заместителей шаблона: символ подчеркивания ("_") обозначает любой одиночный символ, символ процента ("%") обозначает последовательность произвольных символов произвольной длины (может быть нулевой), парные квадратные скобки представляют любой символ, записанный в скобках. Если же раздел ESCAPE присутствует и специфицирует некоторый одиночный символ x, то пары символов "x_" и "x%" представляют одиночные символы "_" и "%" соответственно.

Предикат NULL описывается синтаксическим правилом:

<предикат NULL>::= <имя столбца> IS [NOT] NULL

Значение "x IS NULL" является истинным, когда значение x неопределено.

Предикат EXISTS имеет следующий синтаксис:

<предикат EXISTS>::= EXISTS <подзапрос>

Значение предиката является истинным, когда результат вычисления подзапроса не пуст.