Самоучитель по SQL-сервер в Linux



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.
  • NATURAL. Необязательное ключевое слово NATURAL означает, что объединение двух источников производится по всем одноименным полям. Наличие ключевого слова NATURAL исключает необходимость объединения по явно заданным условиям.
  • условие_объедипения. После ключевого слова ON указывается условие объединения. Синтаксис аналогичен синтаксису секции WHERE.
  • список_полей_объединения. Список полей, приведенный в секции USING, представляет собой сокращенную запись для секции ON. Предполагается, что объединение производится по совпадающим значениям одноименных полей двух объединяемых источников.

Результаты

Основным результатом команды SELECT является список записей итогового набора, за которым следует количество записей в выборке. Также возможны сообщения об ошибках.

  • ERROR: Relation 'источник' does not exist. Ошибка — указанная таблица или представление отсутствует в текущей базе данных.
  • ERROR: Table name "источник" specified more than once. Ошибка — таблица или представление встречается в списке дважды без определения псевдонима. Ошибка исправляется определением псевдонима в секции AS для одного из источников.
  • ERROR: Attribute 'поле' not found. Ошибка — поле не найдено ни в одном из перечисленных источников.

Описание

Команда SELECT предназначена для выборки данных из таблицы, представления, подзапроса или набора, полученного в результате объединения. Секция WHERE определяет критерий отбора записей; если запись не удовлетворяет критерию, она не включается в набор. При отсутствии секции WHERE в выборку включаются все записи источника данных.

В команде SELECT могут включаться различные секции, полный список которых с краткими описаниями приведен выше в пункте «Параметры». Дополнительные примеры их использования имеются в главе 4.

Примеры

Следующая команда возвращает все записи из таблицы books:

booktown=# SELECT * FROM books;

id 1 title | authorjd | subjectjd

7808 | The Shining 4156 9

4513 Dune 1866 | 15

4267 | 2001: A Space Odyssey 2001 15

1608 The Cat in the Hat 1809 2

1590 Bartholomew and the Oobleck 1809 2

25908 Franklin in the Dark 15990 | 2

1501 Goodnight Moon 2031 | 2

190 Little Women 16 6

1234 The Velveteen Rabbit 25041 3

2038 Dynamic Anatomy 1644 | 0

156 The Tell-Tale Heart 115 9

41472 Practical PostgreSQL 1212 4

41473 | Programming Python 7805 | 4

41477 Learning Python 7805 j 4

41478 | Perl Cookbook 7806 | 4

(15 rows)

В другом примере выборка ограничивается записями с кодом, большим 5000:

booktown=# SELECT * FROM books WHERE id > 5000;

id title | authorjd | subjectjd

7808 | The Shining | 4156 | 9 25908

Franklin in the Dark 15990 2

41472 Practical PostgreSQL | 1212 4

41473 I Programming Python 7805 | 4

41477 I Learning Python 7805 | 4

41478 | Perl Cookbook 7806 | 4

(6 rows)




Книжный магазин