В простейшем случае команда SELECT
выбирает из заданной таблицы все данные (то есть все записи и все поля). Полная выборка данных производится командой:
SELECT * FROM имя таблицы;
Как упоминалось при описании синтаксиса SELECT
, звездочка (*
) является сокращенным обозначением всех несистемных полей. Таким образом, команда SELECT *
выбирает из указанной таблицы все поля и все записи, поскольку количество записей в итоговом наборе не ограничивается. В листинге 12 приведен пример выборки всех записей (*
) из таблицы books
базы данных booktown.
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.
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).
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, но с другими названиями полей.
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 |