Запросы к таблице
Для выборки информации из таблиц баз данных используется оператор SQL SELECT. Общий вид оператора представлен ниже
[WITH запросы_with]
SELECT [DISTINCT] перечень_столбцов
FROM перечень_таблиц
[WHERE условия]
[GROUP BY список_группировки]
[HAVING условия_группировки]
[ORDER BY условия_сортировки]
Следующий запрос позволяет получить все строки таблицы weather:
SELECT * FROM weather;
Здесь символ * означает «все столбцы1». Этот же результат можно получить с помощью запроса:
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, как в примере выше.
Множество выбираемых строк можно ограничить с помощью ключевого слова WHERE. За предложением WHERE следует логическое выражение (условия поиска), и возвращаются только те строки, для которых логическое выражение имеет значение true. В предложении 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
В общем случае выводимые в результирующей таблице строки не упорядочены, однако их можно отсортировать используя преложение ORDER BY (не обязательный):
SELECT * FROM weather
ORDER BY city, temp_lo;
Получить уникальные строки из результирующего набора можно с помощью предложения DISTINCT:
SELECT DISTINCT city
FROM weather;
Результат:
city
---------------
Hayward
San Francisco
(2 rows)
Порядок вывода строк результирующей таблицы может отличаться. Вы можете задать правильную сортировку, используя DISTINCT и ORDER BY вместе2:
SELECT DISTINCT city
FROM weather
ORDER BY city;
Хотя SELECT * полезен общих запросов, в рабочем коде это плохая практика, поскольку добавление столбца в таблицу приведет к изменению результатов.
В некоторых базах данных, предложение DISTINCT автоматически упорядочивает строки, поэтому ORDER BY не требуется. Но это не требуется стандартом SQL, и QHB не гарантирует, что DISTINCT отсортирует выводимые строки.