Команда  SELECT
	Центральное место в SQL занимает команда SELECT, предназначенная для построения запросов и выборки данных из таблиц и представлений. Данные, возврашаемые в результате запроса, называются  итоговым набором,  как и таблицы, они состоят из записей и полей.
	Данные итогового набора не хранятся на диске в какой-либо постоянной форме. Итоговый набор является лишь временным представлением данных, полученных в результате запроса. Структура полей итогового набора может соответствовать структуре исходной таблицы, но может и радикально отличаться от нее. 
	Из-за своей особой роли в PostgreSQL команда SELECT также является самой сложной командой, обладающей многочисленными секциями и параметрами. Ниже приведено общее определение синтаксиса SELECT.   Термин выражение соответствует имени поля или общему выражению (например, результату операции, в которой участвует значение поля и константа или значения двух полей).

 SELECT [ALL | DISTINCT [ON( выражение [,...])]]
         цель [ AS имя ] [,...] 
[FROM  источник [,...] ]
 [[NATURAL] тип_соединения источник [ON условие | USING(список_полей)]]
  [...]
[ WHERE условие ] 
[ GROUP BY критерий [,...] [ HAVING условие [,...] ]
[ { UNION  |  INTERSECT  |  EXCEPT }  [ ALL ] подзапрос ] 
[ ORDER BY выражение [ ASC | DESC | USING оператор ] [,...] ]
[ FOR UPDATE [ OF таблица [,...]]] 
[ LIMIT { число | ALL } [ { OFFSET | , } начало] ]

В этом описании источник представляет собой имя таблицы или подзапрос. Эти общие формы имеют следующий синтаксис:

FROM { [ONLY] таблица [[AS] синоним [(синоним_поля[,...])]] |
             (запрос) [AS] синоним [(синоним_поля[,...])] }

•	ALL. Необязательное ключевое слово. ALL указывает на то, что в выборку включаются все найденные записи.
•	DISTINCT [ ON ( выражение [, ...] ) ]. Секция DISTINCT определяет поле или выражение, значения которого должны входить в итоговый набор не более одного раза.
•	цель [ AS имя ] [,...]. В качестве цели обычно указывается имя поля, хотя цель также может быть константой, идентификатором, функцией , общим выражением или даже подзапросом. Перечисляемые цели разделяются занятыми, существует возможность динамического назначения имен целей в секции AS. Звездочка (*) является сокращенным обозначением всех несистемных полей, вместе с ней в списке могут присутствовать и другие цели.
•	FROM источник [, ...]. В секции FROM указывается источник, в котором PostgreSQL ищет заданные цели. В данном случае источник является именем таблицы или подзапросом. Допускается перечисление нескольких источников, разделенных запятыми (декортово произведение), но хорошим стилем считается использование секций JOIN, что соответствует стандарту ANSI.
•	[ NATURAL ] тип_соединения  источник [ ON условие | USING ( список полей ) ].  
o	Использование  NATURAL  означает, что два набора данных соединяются по равным значениям одноименных полей (например, если обе таблицы содержат поле с именем id, то соединяются записи с совпадающими значениями полей id). При наличии ключевого слова NATURAL учитываются синонимы полей (если они были назначены), а секции ON и USING становятся не только ненужными, но и недопустимыми.
o	тип_соединения -  допустимы следующие типы соединений: 
•	[INNER] JOIN  (то есть JOIN без уточнения подразумевает INNER JOIN) – внутреннее соединение
•	 LEFT [OUTER] JOIN, 
•	RIGHT [OUTER] JOIN,
•	FULL [OUTER] JOIN 
•	CROSS JOIN.
o	источник  -   второй из соединяемых наборов данных (имя таблицы или подзапрос).
o	ON ( условие [. ..   ] )  - отношение между источниками. В секции ON можно
задать произвольный критерий по аналогии с тем, как задаются условия в секции WHERE. В критерии могут использоваться синонимы таблиц и полей.
o	USING (список полей)  -  одноименные поля источников, по совпадающим значениям которых производится соединение.  В отличие от NATURAL JOIN позволяет
ограничиться некоторыми одноименными полями, тогда как NATURAL проводит
соединение по всем одноименным полям. По аналогии с NATURAL в параметрах
секции USING учитываются синонимы полей.
•	WHERE условие. Секция WHERE ограничивает итоговый набор заданными критериями. Условие должно возвращать простое логическое значение (true или false), но оно может состоять из нескольких внутренних условий, соединенных логическими операторами (например, AND или OR).
•	GROUP BY критерий [, ... ]. Секция GROUP BY обеспечивает группировку записей по заданному критерию. Причем критерий может быть простым именем поля или произвольным выражением, примененным к значениям итогового набора.
•	HAVING условие [,  ... ]. Секция HAVING похожа на секцию WHERE, но условие проверяется на уровне целых групп, а не отдельных записей.
•	{ UNION | INTERSECT | EXCEPT } [ ALL ] подзапрос. Выполнение одной из трех операций, в которых участвуют два запроса (исходный и дополнительный);  итоговые данные возвращаются в виде набора с обобщенной структурой, из которого удаляются дубликаты записей (если не было задано ключевое слово ALL):
o	UNION — соединение (записи, присутствующие в любом из двух наборов);
o	INTERSECT — пересечение (записи, присутствующие одновременно в двух наборах);
o	EXCEPT — исключение (записи, присутствующие в основном наборе SELECT, но не входящие в подзапрос).
•	ORDER BY выражение. Сортировка результатов команды SELECT по заданному выражению.
•	[ ASC | DESC | USING оператор ]. Порядок сортировки, определяемой секцией ORDER BY выражение: по возрастанию (ASC) или по убыванию (DESC). С ключевым словом USING может задаваться оператор, определяющий порядок сортировки (например, <  или  >).
•	FOR UPDATE [ OF таблица [,... ] ]. Возможность монопольной блокировки возвращаемых записей. В транзакционных блоках FOR UPDATE блокирует записи указанной таблицы до завершения транзакции. Заблокированные записи не могут обновляться другими транзакциями.
•	LIMIT { число | ALL }. Ограничение максимального количества возвращаемых записей или возвращение всей выборки (ALL).
•	{ OFFSET | , } начало. Точка отсчета записей для секции LIMIT. Например, если в секции LIMIT установлено ограничение в 100 записей, а в секции OFFSET — 50, запрос вернет записи с номерами 50-150 (если в итоговом наборе найдется столько записей).
Компоненты секции FROM.
•	[ ONLY ] таблица. Имя таблицы, используемой в качестве источника для команды SELECT. Ключевое слово ONLY исключает из запроса записи всех таблиц-потомков.
•	[ AS ] синоним. Источникам FROM могут назначаться необязательные псевдонимы, упрощающие запрос (например, на таблицу books можно ссылаться по псевдониму b). Ключевое слово AS является необязательным.
•	( запрос ) [ AS ] синоним. В круглых скобках находится любая синтаксически правильная команда SELECT. Итоговый набор, созданный запросом, используется в качестве источника FROM так, словно выборка производится из статической таблицы. При выборке из подзапроса обязательно должен назначаться синоним.
•	( синоним_поля [, ... ] ). Синонимы могут назначаться не только всему источнику, но и его отдельным полям. Перечисляемые синонимы нолей разделяются запятыми и группируются в круглых скобках за синонимом источника FROM. Синонимы перечисляются в порядке следования полей в таблице, к которой они относятся.