2.5. ÐÑполнение запÑоÑа #
ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð°Ð½Ð½Ñе из ÑаблиÑÑ, нÑжно вÑполниÑÑ Ð·Ð°Ð¿ÑоÑ. ÐÐ»Ñ ÑÑого пÑедназнаÑен 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] РнекоÑоÑÑÑ
СУÐÐ, вклÑÑÐ°Ñ ÑÑаÑÑе веÑÑии Postgres Pro, ÑеализаÑÐ¸Ñ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ DISTINCT авÑомаÑиÑеÑки ÑпоÑÑдоÑÐ¸Ð²Ð°ÐµÑ ÑÑÑоки, Ñак ÑÑо ORDER BY добавлÑÑÑ Ð½Ðµ обÑзаÑелÑно. Ðо ÑÑандаÑÑ SQL ÑÑого не ÑÑебÑÐµÑ Ð¸ ÑекÑÑÐ°Ñ Ð²ÐµÑÑÐ¸Ñ Postgres Pro не гаÑанÑиÑÑÐµÑ Ð¾Ð¿ÑеделÑнного поÑÑдка ÑÑÑок поÑле DISTINCT.