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

Для выборки информации из таблиц баз данных используется оператор 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;
1

Хотя SELECT * полезен общих запросов, в рабочем коде это плохая практика, поскольку добавление столбца в таблицу приведет к изменению результатов.

2

В некоторых базах данных, предложение DISTINCT автоматически упорядочивает строки, поэтому ORDER BY не требуется. Но это не требуется стандартом SQL, и QHB не гарантирует, что DISTINCT отсортирует выводимые строки.