Запрос к таблице
- :::{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
заставляет строки упорядочиваться.