Чтобы извлечь данные из таблицы, таблица
запрашивается (queried). Для этого используется оператор
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]
В некоторых системах баз данных, включая старые версии
Digital Q.DataBase, реализация
DISTINCT автоматически упорядочивает строки, и
поэтому ORDER BY не нужен. Но это не
требуется стандартом SQL, и текущий
Digital Q.DataBase не гарантирует, что
DISTINCT приводит к упорядочиванию строк.