Чтобы получить данные из таблицы, выполняется запрос к таблице . Для этого используется оператор 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
содержит логическое выражение (значение истинности), и возвращаются только те строки, для которых логическое выражение истинно. В квалификации разрешены обычные булевы операторы ( 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
вместе: [3]
SELECT DISTINCT city
FROM weather
ORDER BY city;
[2] ХотяSELECT *
это полезно для импровизированных запросов, это широко считается плохим стилем в производственном коде, поскольку добавление столбца в таблицу изменит результаты.
[3] В некоторых системах баз данных, включая более старые версии PostgreSQL , реализацияDISTINCT
автоматического упорядочения строкORDER BY
не нужна. Но это не требуется по стандарту SQL, и текущая версия PostgreSQL не гарантирует, чтоDISTINCT
строки будут упорядочены.
0 комментариев