Перейти к основному содержимому

Запрос к таблице

:::{note} Эта страница переведена при помощи нейросети GigaChat.
::

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

SELECT * FROM weather;

Здесь * – это сокращение для «всех столбцов». Поэтому тот же результат можно получить, используя:

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 * полезен для запросов на скорую руку, в производственном коде он считается плохим стилем, так как добавление столбца в таблицу может изменить результаты.

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

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 содержит булево выражение (значение истинности), и возвращаются только те строки, для которых булево выражение истинно. В квалификации допускаются обычные булевы операторы (AND, OR и 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 вместе:

SELECT DISTINCT city
FROM weather
ORDER BY city;

Примечание:

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