SELECT
SELECT
Выборка записей из таблицы или представления.
Синтаксис
SELECT [ ALL | DISTINCT [ ON ( уникальное_выражение [. ...] ) ] ]
цель [ AS выходное_имя ] [. ...]
[ FROM источник [ { . | CROSS JOIN } ...] ] [ WHERE условие_фильтрации ]
[ GROUP BY условие_группировки [. ... ] ]
[ HAVING агрегатное_условие [. ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL ] подзапрос ]
[ ORDER BY выражение [ ASC DESC | USING оператор ] [. ...] ]
[ FOR UPDATE [ OF таблица [. ... 3 3 3
[ LIMIT { число | ALL } [ { OFFSET , } начало ] 3
источник ::= { [ ONLY ] таблица [ * 3
[ [ AS ] псевдоним источника [ ( список_псевдонимов) ] ] |
( подзапрос ) [ [ AS ] псевдоним [ ( список_псевдонимов ) ] ] |
источник [ NATURAL 3 тип_обьединения источник
[ ON ( условие_обьединения ) | USING ( список_полей_объединения ) ] }
тип_обьединения -.-.= [ INNER |
LEFT [ OUTER ]
RIGHT [ OUTER ]
FULL [ OUTER ] ] JOIN
Параметры
- ALL | DISTINCT. Ключевое слово DISTINCT означает, что при наличии дубликатов в нескольких записях в выборку включается только одна (первая) запись. Ключевое слово ALL означает, что в выборку включаются все записи независимо от наличия дубликатов (используется по умолчанию). Обратите внимание: секция ORDER BY сортирует записи перед удалением дубликатов. Совместное использование этих секций позволяет убедиться в том, что в выборку включена именно та запись, которая вас интересует.
- DISTINCT ON. Ключевое слово ON, следующее за ключевым словом DISTINCT, позволяет задать одно или несколько выражений, уникальность которых проверяется командой.
- уникальное_выражение. Имя поля источника или синтаксически правильное выражение, уникальность значения которого проверяется секцией DISTINCT ON при удалении дубликатов.
- цель. Имя поля источника или синтаксически правильное выражение.
- выходное_имя. После ключевого слова AS указывается альтернативное имя выходного поля. В дальнейшем это имя используется при выводе данных, а также для ссылок в секциях ORDER BY и GROUP BY в той же команде SELECT. Помните, что это имя не действует в секциях WHERE и HAVING; в них должны использоваться настоящие имена.
- FROM источник. Таблица, подзапрос или объединенный набор, из которого берутся данные.
- { . | CROSS JOIN }. Перечисляемые источники разделяются запятыми или секциями CROSS JOIN.
- WHERE. Секция WHERE содержит условия фильтрации итогового набора.
- условие. Логическое выражение, применяемое к негруппированным целевым выражениям.
- GROUP BY. Секция GROUP BY содержит условия группировки записей.
- условие группировки. Имя поля источника или синтаксически правильное выражение, используемое для группировки записей.
- HAVING. Секция HAVING содержит условия фильтрации итогового набора.
- агрегатное условие. Логическое выражение, применяемое к группированным целевым выражениям.
- UNION. Слияние двух итоговых наборов, имеющих совместимую структуру, в один объединенный итоговый набор.
- INTERSECT. Из итогового набора исключаются все записи, не входящие в итоговый набор следующего подзапроса (то есть результат представляет собой пересечение двух множеств записей).
- EXCEPT. Из итогового набора исключаются все записи, входящие в итоговый набор следующего подзапроса (то есть результат представляет собой разность двух множеств записей).
- подзапрос. Полная команда SELECT. Чтобы в подзапрос могли входить секции ORDER BY, FOR UPDATE и LIMIT, он должен быть заключен в круглые скобки.
- ORDER BY. Сортировка итогового набора по заданным критериям.
- выражение [ ASC | DESC | USING оператор']. Имя поля итогового набора, по которому секция ORDER BY сортирует результаты. Ключевое слово ASC указывает на то, что сортировка выполняется по возрастанию (этот режим используется по умолчанию), а с ключевым словом DESC результат сортируется по убыванию. В секции USING указывается оператор (например, >), используемый для последующих сравнений.
- FOR UPDATE. Установка блокировки ROW SHARE MODE (см. описание команды LOCK) для таблицы-источника в текущей транзакции.
- OF таблица. Таблица, для которой устанавливается блокировка ROW SHARE MODE, если секция FROM содержит несколько таблиц.
- LIMIT. Вывод части полученного итогового набора.
- ALL | число. С ключевым словом ALL итоговый набор не ограничивается (режим используется по умолчанию). Если задан параметр число, итоговый набор ограничивается заданным количеством записей.
- { OFFSET | . } начало. Ключевое слово OFFSET (может заменяться запятой после ключевого слова LIMIT) означает, что в итоговом наборе игнорируется указанное количество начальных записей.
Перечисленные ниже ключевые слова и параметры могут присутствовать в каждом определении источника.
- [ ONLY ] таблица [ * ], Имя существующей таблицы или представления, из которого производится выборка. При отсутствии ключевого слова ONLY поиск также производится во всех производных таблицах. С этой же целью можно добавить после имени таблицы символ *.
- подзапрос. Команда SELECT, выполняемая в секции FROM другой команды SELECT. В результате выполнения подзапроса создается временная таблица, записи которой обрабатываются во время выполнения команды. Код подзапросов заключается в круглые скобки.
- [ AS ] псевдоним_источника. Альтернативное имя для источника данных, упоминаемого в секции FROM.
- список_псевдонимов. Разделенный запятыми список псевдонимов для полей предшествующего источника. Количество псевдонимов в списке может быть меньше количества нолей в источнике, к которому относится список.
- тип_объедипения. Тип объединения, задается одним из следующих значений: о [ INNER ] JOIN;
- LEFT [ OUTER ] JOIN;
- RIGHT [ OUTER ] JOIN;
- FULL [ OUTER ] JOIN.
Результаты
Основным результатом команды SELECT является список записей итогового набора, за которым следует количество записей в выборке. Также возможны сообщения об ошибках.
- ERROR: Relation 'источник' does not exist. Ошибка — указанная таблица или представление отсутствует в текущей базе данных.
- ERROR: Table name "источник" specified more than once. Ошибка — таблица или представление встречается в списке дважды без определения псевдонима. Ошибка исправляется определением псевдонима в секции AS для одного из источников.
- ERROR: Attribute 'поле' not found. Ошибка — поле не найдено ни в одном из перечисленных источников.
Описание
Команда SELECT предназначена для выборки данных из таблицы, представления, подзапроса или набора, полученного в результате объединения. Секция WHERE определяет критерий отбора записей; если запись не удовлетворяет критерию, она не включается в набор. При отсутствии секции WHERE в выборку включаются все записи источника данных.
В команде SELECT могут включаться различные секции, полный список которых с краткими описаниями приведен выше в пункте «Параметры». Дополнительные примеры их использования имеются в главе 4.