В SQL имеется единственный оператор, который предназначен для выборки данных из базы данных. Как и операторы INSERT, DELETE и UPDATE он относится к подмножеству DML.
Ниже приведен почти полный синтаксис оператора SELECT.
SELECT [DISTINCT | ALL]
{* | <величина> [, <величина>...]}
[INTO:Переменная [,:Переменная...]]
FROM <tableref> [, <tableref>...]
[WHERE <условие поиска>]
[GROUP BY Колонка [, Колонка...]]
[HAVING <условие поиска>]
[UNION [ALL] <select_expr>]
[ORDER BY <список сортировки>];
<величина> = {Колонка |:Переменная | <константа> | <выражение>
| <функция> | udf ([<величина> [, <величина>...]]) | NULL | USER}
[AS Псевдоним]
<константа> = Число | 'Строка'
<выражение> = SQL выражение, возвращающее единичное значение
<функция> =
COUNT (* | [ALL] <величина> | DISTINCT <величина>)
| SUM ([ALL] <величина> | DISTINCT <величина>)
| AVG ([ALL] <величина> | DISTINCT <величина>)
| MAX ([ALL] <величина> | DISTINCT <величина>)
| MIN ([ALL] <величина> | DISTINCT <величина>)
| CAST(<величина> AS <тип данных>)
| UPPER(<величина>)
| GEN_ID(Имя_Генератора, <величина>)
|
|
<tableref> = {<joined_table> | table | view
| procedure[(<величина> [, <величина>...])]} [Псевдоним]
<joined_table> = <tableref> <join_type> JOIN <tableref>
ON <условие поиска> | (<joined_table>)
<join_type> = [INNER] | {LEFT | RIGHT | FULL } [OUTER]
<условие поиска> =
<величина> <оператор сравнения>
{<величина> | (<select_one>)}
| <величина> [NOT] BETWEEN <величина> AND <величина>
| <величина> [NOT] LIKE <величина>
| <величина> [NOT] IN
(<величина> [, <величина>...] | <select_list>)
| <величина> IS [NOT] NULL
|<величина> {>= | <=} <величина>
| <величина> [NOT] {= | < | >} <величина>
| {ALL | SOME | ANY} (<select_list>)
| EXISTS (<select_expr>)
| SINGULAR (<select_expr>)
| <величина> [NOT] CONTAINING <величина>
| <величина> [NOT] STARTING [WITH] <величина>
| (<условие поиска>)
| NOT <условие поиска>
| <условие поиска> OR <условие поиска>
| <условие поиска> AND <условие поиска>
<оператор сравнения> = {= | < | > | <= | >= |!< |!> | <> |!=}
<select_one> = оператор SELECT, выбирающий одну колонку и возвра щающий ровно одно значение
<select_list> = оператор SELECT, выбирающий одну колонку, возвра щающий ноль или много значений
<select_expr> = оператор SELECT, выбирающий несколько величин и возвращающий ноль или много значений
<список сортировки> =
{Колонка | Номер}
[ASC | DESC]
[, <список сортировки>...]
Некоторые параметры, входящие в этот оператор, описаны в табл. 1
Таблица 1 - Описание параметров оператора SELECT
Параметр | Описание |
DISTINCT | ALL | DISTINCT – предотвращает дублирование данных, которые будут извлечены. ALL (по умолчанию) – приведет к извлечению всех данных |
{* | <величина> [, <величина>...]} | Звездочка (*) означает, что надо извлекать все колонки из указанных таблиц. <величина> [, <величина>...] – извлекает список указанных колонок, переменных или выражений |
INTO:Переменная [,:Переменная...] | Используется только в триггерах и хранимых процедурах для операторов SELECT, возвращающих не более одной строки. Указывается список переменных, в которые извлекаются величины |
FROM <tableref> [, <tableref>...] | Указывает список таблиц, просмотров и хранимых процедур, из которых извлекаются данные. Список может включать соединения и соединения могут быть вложенными |
table | Имя существующей в базе данных таблицы |
view | Имя существующего базе данных просмотра |
procedure | Имя существующей хранимой процедуры, предназначенной для использования в операторе SELECT |
Псевдоним | Короткое альтернативное имя для таблицы, просмотра или колонки. После описания в <tableref>, псевдоним может использоваться для ссылок на таблицу или просмотр |
join_type | Задает тип соединения, которое может быть внутренним или внешним |
Как видно из синтаксиса оператора SELECT, обязательными являются только предложение SELECT с перечнем выдаваемых колонок и предложение FROM.
|
|
Пример простейшего оператора SELECT:
Выдать перечень всех служащих:
SELECT * FROM Employee;
Ниже приведено несколько упрощенных вариантов синтаксиса оператора SELECT, помогающих научиться составлять простые запросы.
Упрощенный синтаксис внутреннего соединения (стандарт SQL-92):
SELECT Колонка [, Колонка...] | *
FROM <tableref_left> [INNER] JOIN <tableref_right>
[ON <условие поиска>]
[WHERE <условие поиска>];
Упрощенный синтаксис внешнего соединения:
SELECT Колонка [, Колонка...] | *
FROM <tableref_left>
{LEFT | RIGHT | FULL} [OUTER] JOIN
<tableref_right>
[ON <условие поиска>]
[WHERE <условие поиска>];
Упрощенный синтаксис использования подзапроса:
SELECT [DISTINCT] Колонка [, Колонка...]
FROM <tableref> [, <tableref>...]
WHERE
{expression {[NOT] IN | <оператор сравнения>}
| [NOT] EXISTS
}
(SELECT [DISTINCT] Колонка [, Колонка...]
FROM <tableref> [, <tableref>...]
WHERE <условие поиска>
);