Материал предоставлен http://it.rfet.ru

Простая команда SELECT

В простейшем случае команда SELECT выбирает из заданной таблицы все данные (то есть все записи и все поля). Полная выборка данных производится командой:

SELECT * FROM имя таблицы;

Как упоминалось при описании синтаксиса SELECT, звездочка (*) является сокращенным обозначением всех несистемных полей. Таким образом, команда SELECT * выбирает из указанной таблицы все поля и все записи, поскольку количество записей в итоговом наборе не ограничивается. В листинге 12 приведен пример выборки всех записей (*) из таблицы books базы данных booktown.

Листинг 12. Выборка всех записей из таблицы books.

SELECT * FROM books;

id   | title          | author_id | subject_id
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     | 4
41478 | Perl Cookbook | 7806      | 4
(15 rows)

Выбор полей

Команда SELECT * является хорошим примером простейшего запроса, но на практике необходимая информация нередко ограничивается несколькими полями таблицы. Чтобы повысить эффективность выборки и сделать запрос более наглядным, рекомендуется явно перечислить все необходимые поля вместо полной выборки с символом *. В частности, ограничение выборки особенно актуально при использовании секции JOIN, подробно рассматриваемой ниже в подразделе “Объединение наборов данных”.

Поля, включаемые в итоговый набор, перечисляются после ключевого слова SELECT. Запрос возвращает данные только для полей, входящих в этот список. Порядок перечисления полей не обязан совпадать с их порядком в структуре таблицы; допускается как многократное вхождение, так и отсутствие некоторых полей в списке. Пример приведен в листинге 13.

Листинг 13. Изменение порядка следования полей при выборке.

booktown=# SELECT Id, author_id, title, id FROM books;

id   | authorjd | title | id
7808 | 4156     | The Shining | 7808
4513 | 1866     | Dune | 4513
4267 | 2001     | 2001: A Space Odyssey | 4267
1608 | 1809     | The Cat in the Hat | 1608
1590 | 1809     | Bartholomew and the Oobleck | 1590
25908| 15990    | Franklin in the Dark | 25908
1501 | 2031     | Goodnight Moon | 1501
190  | 16       | Little Women | 190
1234 | 25041    | The Velveteen Rabbit | 1234
2038 | 1644     | Dynamic Anatomy | 2038
156  | 115      | The Tell-Tale Heart | 156
41472| 1212     | Practical PostgreSQL | 41472
41473| 7805     | Programming Python | 41473
41477| 7805     | Learning Python | 41477
41478| 7806     | Perl Cookbook | 41478
(15 rows)

Как нетрудно убедиться, команды SELECT в листингах 12 и 13 возвращают одинаковые наборы данных. Во втором наборе используется другой порядок следования полей (поле subject_id отсутствует, а поле id встречается дважды), что связано с явным перечислением полей после ключевого слова SELECT.

Выражения, константы и синонимы

Целями команды SELECT могут быть не только простые поля, но и произвольные выражения (включающие вызовы функций или различные операции с идентификаторами) и константы. Синтаксис команды практически не изменяется, появляется лишь одно дополнительное требование – все самостоятельные выражения,, идентификаторы и константы должны разделяться запятыми. В списке разрешены произвольные комбинации разнотипных целей.

Команда SELECT также может использоваться для простого вычисления и вывода результатов выражений и констант. В этом случае она не содержит секции FROM или имен столбцов (листинг 14).

Листинг 14. Выражения и константы.

testdb=# SELECT 2+2,

testdb-# pi (),

testdb-# 'PostgreSQL is more than a calculator!';

?column?| pi | ?column?

4 | 3.14159265358979 | PostgreSQL

is more than a calculator!

(1 row)

Для каждой цели в списке может задаваться необязательная секция AS, которая назначает синоним (новое произвольное имя) для каждого поля в итоговом наборе. Имена синонимов подчиняются тем же правилам, что и имена обычных идентификаторов (в частности, они могут содержать внутренние пробелы или совпадать с ключевыми словами при условии заключения их в апострофы и т. д.)

Назначение синонима не влияет на исходное поле и действует лишь в контексте итогового набора, возвращаемого запросом. Секция AS особенно удобна при “выборке” выражений и констант, поскольку синонимы позволяют уточнить смысл неочевидных выражений или констант. В листинге 15 приведены те же результаты, что и в листинге 14, но с другими названиями полей.

Листинг 15. Секция AS с выражениями и константами.

booktown=# SELECT 2 + 2 AS "2 plus 2",  pi() AS "the pi fnction", 'PostgreSQL is more than a calculator!' AS comments;

2 plus 2 | the pi function | comments
4 | 3.14159265358979 | PostgreSQL is more than a calculator!
(1 row)
Выборка данных командой SELECTВыбор источников в секции FROM