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

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

примечание

Эта страница переведена при помощи нейросети 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 заставляет строки упорядочиваться.