Чтобы получить данные из таблицы, выполняется запрос к таблице . Для этого используется оператор SQL SELECT . Оператор разделен на список выбора (часть, в которой перечислены возвращаемые столбцы), список таблиц (часть, в которой перечислены таблицы, из которых нужно получить данные) и необязательное уточнение (часть, в которой указаны любые ограничения). . Например, чтобы получить все строки таблицы weather, введите:

SELECT * FROM weather;

Вот *сокращение для « всех столбцов » . [2] Таким образом, тот же результат будет получен с:

SELECT city, temp_lo, temp_hi, prcp, date FROM weather;

Вывод должен быть:

   city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
 San Francisco |      43 |      57 |    0 | 1994-11-29
 Hayward       |      37 |      54 |      | 1994-11-29
(3 rows)

Вы можете писать выражения, а не только простые ссылки на столбцы, в списке выбора. Например, вы можете сделать:

SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

Это должно дать:

     city      | temp_avg |    date
---------------+----------+------------
 San Francisco |       48 | 1994-11-27
 San Francisco |       50 | 1994-11-29
 Hayward       |       45 | 1994-11-29
(3 rows)

Обратите внимание, как это ASпредложение используется для переименования выходного столбца. (Предложение ASявляется необязательным.)

Запрос можно « уточнить » , добавив WHEREпредложение, указывающее, какие строки требуются. Предложение WHEREсодержит логическое выражение (значение истинности), и возвращаются только те строки, для которых логическое выражение истинно. В квалификации разрешены обычные булевы операторы ( ANDOR, и ). NOTНапример, следующий код возвращает погоду в Сан-Франциско в дождливые дни:

SELECT * FROM weather
    WHERE city = 'San Francisco' AND prcp > 0.0;

Результат:

 city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
(1 row)

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

SELECT * FROM weather
    ORDER BY city;
     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 Hayward       |      37 |      54 |      | 1994-11-29
 San Francisco |      43 |      57 |    0 | 1994-11-29
 San Francisco |      46 |      50 | 0.25 | 1994-11-27

В этом примере порядок сортировки указан не полностью, поэтому вы можете получить строки Сан-Франциско в любом порядке. Но вы всегда получите результаты, показанные выше, если сделаете:

SELECT * FROM weather
    ORDER BY city, temp_lo;

Вы можете запросить удаление повторяющихся строк из результата запроса:

SELECT DISTINCT city
    FROM weather;
    city
---------------
 Hayward
 San Francisco
(2 rows)

Здесь снова порядок строк результатов может различаться. Вы можете обеспечить стабильные результаты, используя DISTINCTи ORDER BYвместе: [3]

SELECT DISTINCT city
    FROM weather
    ORDER BY city;

[2] ХотяSELECT *это полезно для импровизированных запросов, это широко считается плохим стилем в производственном коде, поскольку добавление столбца в таблицу изменит результаты.

[3] В некоторых системах баз данных, включая более старые версии PostgreSQL , реализацияDISTINCTавтоматического упорядочения строкORDER BYне нужна. Но это не требуется по стандарту SQL, и текущая версия PostgreSQL не гарантирует, чтоDISTINCTстроки будут упорядочены.