Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Программные интерфейсы общего назначения > Прикладные библиотеки и технологии > Библиотека менеджера QDB > Справочник по командам SQL, поддерживаемым менеджером QDB > SQL: SELECT



SQL: SELECT

Создает запрос к базе данных

Прототип:

SELECT [ALL | DISTINCT] результат [FROM список таблиц]
[WHERE выражение]
[GROUP BY список_выражений]
[HAVING выражение]
[сложный_оператор select]*
[ORDER BY список_выражений_сортировки]
[LIMIT целое_число [( OFFSET | , ) целое_число]]
результат = столбец_результата [, столбец_результата]*
столбец_результата = * | имя_таблицы . * | выражение [ [AS] строка ]
список_таблиц = таблица [оператор_присоединения таблица аргументы присоединения]*
таблица = имя_таблицы [AS псевдоним] | ( select ) [AS псевдоним]
оператор_присоединения = , | [NATURAL] [LEFT | RIGHT | FULL]
[OUTER | INNER | CROSS] JOIN
аргументы_присоединения = [ON выражение] [USING ( список_идентификаторов )]
список_выражений_сортировки = выражение [порядок_сортировки] [, выражение [порядок_сортировки]]*
порядок_сортировки = [COLLATE имя_сортировки] [ASC | DESC]
сложный_оператор = UNION | UNION ALL | INTERSECT | EXCEPT

Описание:

Оператор SELECT создает запрос к базе данных. Его результатом является множество строк данных, каждая из которых содержит определенное количество столбцов. Количество строк может быть нулевым. Количество столбцов в результате задается списком произвольных выражений, который находится между ключевыми словами SELECT и FROM. Выражение "*" эквивалентно всем столбцам всех таблиц. Если выражение представляет собой имя таблицы, за которым следуют символы ".*", результатом являются все столбцы этой таблицы.

Ключевое слово DISTINCT

Ключевое слово DISTINCT возвращает подмножество различных строк результата, при этом значения NULL считаются одинаковыми. По умолчанию оператор SELECT возвращает все строки результата; можно явно задать этот режим с помощью ключевого слова ALL.

Запрос выполняется над одной или несколькими таблицами, которые указаны после ключевого слова FROM. Если несколько имен таблиц разделены запятыми, запрос выполняется над их перекрестным объединением. Для указания объединений также можно использовать все возможности синтаксиса SQL-92. Вместо любого имени таблицы в условии FROM можно указывать подзапрос в круглых скобках. Также можно полностью опускать условие FROM — в этом случае результат будет включать единственную строку со значениями из списка выражений.

Условие WHERE

Условие WHERE фильтрует строки множества результатов запроса.

Условие GROUP BY

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

Условие ORDER BY

Условие ORDER BY задает сортировку строк результата. Его аргументом является список выражений, которые используются в качестве ключа сортировки. Выражения, которые указываются в условии GROUP BY, могут не входить в состав результата простого оператора SELECT, однако каждое выражение сортировки в сложном операторе SELECT должно точно соответствовать одному из столбцов результата. После любого выражения сортировки можно указывать ключевое слово COLLATE, имя функции сортировки текста и/или ключевое слово ASC или DESC, которое определяет порядок сортировки.

Условие LIMIT

Условие LIMIT задает максимальное количество строк, из которых формируется результат. Если LIMIT имеет отрицательное значение, количество строк не ограничено. Необязательное ключевое слово OFFSET указывается после ключевого слова LIMIT и задает количество первых строк, которые не включаются в множество результатов. Условие LIMIT можно использовать только в последнем операторе SELECT составного запроса. Значение LIMIT применяется ко всему запросу, а не к оператору SELECT, в котором оно указано. Если в условии LIMIT указано ключевое слово OFFSET, первое значение соответствует максимальному количеству строк в результате, а второе — количеству первых строк, не включаемых в результат. Если вместо ключевого слова OFFSET указана запятая, первое значение соответствует количеству пропускаемых начальных строк, а второе — максимальному количеству строк в результате. Это кажущееся противоречие создано намеренно для обеспечения максимальной совместимости с существующими СУБД.

Составные операторы SELECT

Составной оператор SELECT формируется из двух или более операторов SELECT, которые связаны друг с другом при помощи операторов UNION, UNION ALL, INTERSECT и EXCEPT. Результаты всех операторов, которые образуют составной оператор SELECT, должны состоять из одинакового количества столбцов. В конце составного оператора SELECT можно указывать только одно условие ORDER BY. Операторы UNION и UNION ALL объединяют результаты операторов SELECT, указанных справа и слева, в одну большую таблицу. Различие этих операторов заключается в том, что результат UNION состоит из уникальных строк, а результат UNION ALL может включать в себя дубликаты. Оператор INTERSECT возвращает пересечение результатов левого и правого операторов SELECT, а оператор EXCEPT — результат левого оператора SELECT после удаления результата правого оператора SELECT. Если составной оператор SELECT включает в себя три или более операторов, они группируются в порядке слева направо.

Тематические ссылки:

Выражения в SQL запросах, Ключевые слова, поддерживаемые QDB




Предыдущий раздел: перейти