Выборка данных командой SELECT
Простая команда SELECT
В простейшем случае команда SELECT выбирает из заданной таблицы все данные (то есть все записи и все поля). Полная выборка данных производится командой:
SELECT * FROM имя таблицы;
Как упоминалось при описании синтаксиса SELECT, звездочка (*) является сокращенным обозначением всех несистемных полей. Таким образом, команда SELECT * выбирает из указанной таблицы все поля и все записи, поскольку количество записей в итоговом наборе не ограничивается. В листинге 4.23 приведен пример выборки всех записей (*) из таблицы books базы данных booktown.
Листинг 4.23. Выборка всех записей из таблицы books.
300ktown=# 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. Запрос возвращает данные только для полей, входящих в этот список. Порядок перечисления полей не обязан совпадать с их порядком в структуре таблицы; допускается как многократное вхождение, так и отсутствие некоторых полей в:писке. Пример приведен в листинге 4.24.
Листинг 4.24. Изменение порядка следования полей при выборке.
booktown=# SELECT Id, author_id, title, id booktown-# 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 в листингах 4.23 и 4.24 возвращают одинаковые наборы данных. Во втором наборе используется другой порядок следования полей (поле subject_id отсутствует, а поле id встречается дважды), что связано с явным перечислением полей после ключевого слова SELECT.