§ 24. Использование SQL для построения запросов

24.3. Маніпуліраванне данымі ў табліцы БД

Мова маніпулірявання данымі DML уключае аператары, якія змяняюць стан даных. Гэтымі аператарамі з’яўляюцца:

  • SELECT (выбраць) — выбар даных з табліц
  • INSERT (уставіць) — дабаўленне даных у табліцу.
  • UPDATE (абнавіць) — змяненне даных у табліцы.
  • DELETE (выдаліць) — выдаленне даных з табліцы.

INSERT

Сінтаксіс аператара INSERT:

INSERT INTO <імя табліцы>
[(<імя слупка>,...)]
VALUES (<значэнне_поля>,…)

У раздзеле VALUES значэнні палёў павінны быць паказаны ў тым парадку, у якім палі задаваліся пры стварэнні табліцы.

Спіс слупкоў можа адсутнічаць. Калі спіс не паказаны ў аператары, то гэта азначае, што спіс значэнняў павінен быць поўным, г. зн. змяшчаць значэнні для ўсіх палёў табліцы (прыклад 24.8).

У Access адначасова можна дабавіць у табліцу толькі адзін запіс.

SELECT

Аператар SELECT — адзін з найбольш важных і выкарыстоўваемых аператараў DML, які мае найбольш складаную структуру сярод усіх аператараў. Ён дазваляе выбраць даныя з БД і ператвараць да патрэбнага віду атрыманыя вынікі. Вынікам выканання аператара SELECT заўсёды з’яўляецца табліца.

Сінтаксіс аператара SELECT:

    • SELECT <спіс атрыбутаў>
    • FROM <злучаемыя адносіны>
    • [WHERE <умовы выбаркі>]
    • [ORDER BY <крытэрыі сартавання>]
    • [GROUP BY <крытэрыі групіроўкі>]
    • [HAVING <умовы адбору груп>]

У прыкладах 24.9—24.13 разгледжаны розныя варыянты выкарыстання аператара SELECT у адносінах да табліцы «Сеансы» (прыклад 24.1).

У якасці ўмовы выбаркі ў раздзеле WHERE аператара SELECT можна выкарыстоўваць лагічныя выразы, якія выкарыстоўваюць палі табліц, канстанты, знакі параўнання, злучнікі AND і OR, адмаўленне NOT.

Пры запісе ўмоў выкарыстоўваюцца

Для лікаў і дат

Для радкоў

  • <, >, >=, <=
  • IN, BETWEEN — для вызначэння дыяпазону
  • LIKE 'радок' — параўнанне з узорам

Выкарыстанне розных умоў для выбаркі даных разгледжана ў прыкладзе  24.10.

У якасці крытэрыя сартавання ў раздзеле ORDER BY аператара SELECT паказваюцца імёны палёў, па якіх патрабуецца ўпарадкаваць запісы ў табліцы. Сартаванне можна выконваць па некалькіх палях. Прынцып работы такога сартавання аналагічны шматузроўневаму сартаванню ў Excel. Спачатку запісы размяшчаюцца ў тым парадку, які вызначаны для першага поля. Парадак, вызначаны для наступнага поля, упарадкоўвае толькі тыя запісы, якія маюць аднолькавыя значэнні ў першым полі. Далей сартаванне ўжываецца толькі да тых запісаў, якія маюць аднолькавыя значэнні як у першым полі, так і ў другім.

Па змоўчанні запісы ў табліцы сартуюцца па ўзрастанні (ASC), для сартавання ў адваротным парадку неабходна дабавіць ключавое слова DESC (прыклад 24.11).

Пры складанні запытаў пры дапамозе аператара SELECT для атрымання некаторай статыстычнай інфармацыі (сумы, колькасці, сярэдняга значэння і г. д.) выкарыстоўваюцца агрэгіруючыя функцыі. Гэта функцыі, якія працуюць з наборам даных і вяртаюць выніковае значэнне. Асноўныя з іх:

Функцыя

Апісанне

COUNT

Вяртае колькасць значэнняў у паказаным слупку

SUM

Вяртае суму значэнняў у паказаным слупку

AVG

Вяртае сярэдняе значэнне ў паказаным слупку

MIN

Вяртае мінімальнае значэнне ў паказаным слупку

MAX

Вяртае максімальнае значэнне ў паказаным слупку

Усе гэтыя функцыі вяртаюць адзінае значэнне. Пры гэтым функцыі COUNT, MIN і MAX выкарыстоўваюцца ў дачыненні да даных любога тыпу, а SUM і AVG выкарыстоўваюцца толькі для даных лікавага тыпу.

Ужываць агрэгіруючыя функцыі можна ў дачыненні да ўсіх радкоў табліцы (прыклад 24.12), радкоў, вызначаным у раздзеле WHERE (прыклад 24.13) ці да груп радкоў.  У адным запыце можна паказваць некалькі агрэгіруючых функцый, запісаўшы іх праз коску.

Сінтаксіс агрэгіруючых функцый:

<Функцыя>(<выраз>)

У якасці аргумента агрэгіруючай функцыі часцей за ўсё выкарыстоўваецца назва поля табліцы, над значэннямі якога праводзяцца вылічэнні. Таксама дапускаецца ў якасці аргумента выкарыстоўваць выразы, якія ўключаюць у сябе адвольную камбінацыю назваў палёў, канстант, функцый, аб’яднаных арыфметычнымі аперацыямі.

У прыкладзе 24.14 разгледжана ўжыванне агрэгіруючых функцый COUNT, SUM і AVG у аператары SELECT у адносінах да табліцы «Сеансы в мае»:

У раздзеле GROUP BY аператара SELECT запісваецца імя поля, па якім павінна ажыццяўляцца групоўка даных. У гэтым выпадку значэнне агрэгіруючай функцыі вылічваецца для кожнай групы (прыклад 24.15).

Вынікі запытаў можна выкарыстоўваць у іншых запытах — атрымліваецца ўкладзены запыт (прыклад 24.16).

UPDATE

Сінтаксіс аператара UPDATE:
UPDATE <Імя табліцы>
SET <імя поля> = <выраз>
[WHERE <умова абнаўлення>]

З дапамогай аднаго аператара UPDATE могуць быць зададзены значэнні для любой колькасці слупкоў. Аднак у адным і тым жа аператары UPDATE можна ўносіць змяненні ў кожны слупок паказанай табліцы толькі адзін раз. Пры адсутнасці раздзела WHERE будуць абноўлены ўсе радкі табліцы. У прыкладзе 24.17 прыведзены запыт на абнаўленне з указаннем у раздзеле WHERE, якія даныя трэба абнавіць.

DELETE

Выкарыстоўваецца для выдалення запісаў з табліц БД (прыклад 24.18).

Сінтаксіс аператара DELETE:
DELETE FROM <Імя табліцы>
WHERE <умовы выдалення>

Калі раздзел WHERE адсутнічае, выдаляюцца ўсе радкі з табліцы.

Прыклад 24.8. Дабаўленне даных у табліцу.

INSERT INTO [Сеансы в мае] 
VALUES (1, 'Джентельмены', '21:00', 8.50)

Значэнне радка ў гэтым выпадку можна ўводзіць без двукосся, паколькі ў радку няма прабелаў:

   VALUES (1, Джентельмены, '21:00', 8.50)   

Вынік:

Прыклад 24.9. Запыт на выбар усіх даных з табліцы.

   SELECT * FROM Сеансы   

Вынік:

Прыклад 24.10. Запыты на выбар даных, якія задавальняюць некаторую ўмову.

1. Выбраць даныя з палёў «Фильм», «Время», «Стоимость» табліцы «Сеансы» для запісаў, у якіх кошт білета меншы за 10  р.

SELECT Кинотеатр, Фильм, Время, Стоимость
FROM Сеансы
WHERE Стоимость < 10.00

Вынік:

2. Выбраць даныя з палёў «Кинотеатр», «Фильм», «Время», «Стоимость» табліцы «Сеансы» для запісаў, у якіх кошт білета ад 9 да 10 10 р.

SELECT Кинотеатр, Фильм, Время, Стоимость
FROM Сеансы
WHERE Стоимость BETWEEN 9 AND 10

Вынік:

3. Выбраць даныя з палёў «Фильм», «Время», «Стоимость» табліцы «Сеансы» для запісаў, у якіх значэнне поля «Кинотеатр» супадае са значэннем 'Аврора'.

SELECT Фильм, Время, Стоимость
FROM Сеансы
WHERE Кинотеатр LIKE 'Аврора'

Вынік:

4. Выбраць даныя з палёў «Фильм», «Время», «Стоимость» табліцы «Сеансы» для запісаў, у якіх значэнне поля «Кинотеатр» заканчваецца на 'р'.

SELECT Кинотеатр, Фильм, Время
FROM Сеансы
WHERE Кинотеатр LIKE '*р'

Вынік:

Прыклад 24.11. Сартаванне даных у табліцы.

1. Выконваць сартаванне даных у табліцы «Сеансы» па полі «Время» ў парадку ўзрастання.

SELECT Кинотеатр, Фильм, Время
FROM Сеансы
ORDER BY Время

Вынік:

2. Выканаць сартаванне даных у табліцы «Сеансы» па полі «Кинотеатр» у парадку спадання, а па полі «Время»у парадку ўзрастання.

SELECT Кинотеатр, Фильм, Время
FROM Сеансы
ORDER BY Кинотеатр DESC, Время ASC

Вынік:

Прыклад 24.12. Ужыванне агрэгіруючых функцый да вызначаных радкоў табліцы ў запытах на выбарку.

Знайсці ў табліцы «Сеансы» самы позні сеанс з коштам квітка ад 6 да 9 р.

SELECT MIN (Стоимость) 
AS [Минимальная стоимость] 
FROM Сеансы

Вынік:

Прыклад 24.13. Ужыванне агрэгіруючых функцый да вызначаных радкоў табліцы ў запытах на выбарку.

Знайсці ў табліцы «Сеансы» самы позні сеанс з коштам квітка ад 6 да 9 р.

SELECT MAX (Время) AS [Позний сеанс] FROM Сеансы
WHERE Стоимость BETWEEN 6 AND 9

Вынік:

Прыклад 24.14. Выкарыстанне агрэгіруючых функцый у запытах на выбарку.

1. SUM.

Знайсці ў табліцы «Сеансы в мае» сумарны кошт білетаў.

SELECT SUM (Стоимость) 
AS [Суммарная стоимость] 
FROM [Сеансы в мае]

Вынік:

2. AVG.

Знайсці ў табліцы «Сеансы в мае» сярэдні кошт білетаў з двума лічбамі пасля коскі.

SELECT ROUND(AVG (Стоимость), 2)
AS [Средняя стоимость] 
FROM [Сеансы в мае]

Результат:

Прыклад 24.15. Выкарыстанне агрэгіруючых функцый у дачыненні да груп радкоў у запытах на выбарку.

Знайсці ў табліцы «Сеансы в мае» сумарную колькасць білетаў для кожнага фільма.

SELECT Фильм,
SUM ([Количество билетов])
AS [Кол_билетов]
FROM [Сеансы в мае] GROUP BY Фильм

Вынік:

Прыклад 24.16. Укладзены запыт на выбарку.

SELECT * FROM Туры 
WHERE Цена = (SELECT MIN(Цена) 
FROM Туры 
WHERE Страна = 'Норвегия')

Запыт вяртае даныя з табліцы «Туры» пра самы танны тур у Нарвегію.

Прыклад 24.17. Запыты на абнаўленне табліцы «Сеансы в мае».

UPDATE [Сеансы в мае]
SET [Количество билетов] = [Количество билетов] - 5
WHERE Кинотеатр LIKE 'Мир'

У выніку выканання запыту колькасць білетаў на кожны з сеансаў у кінатэатры «Мир» паменшыцца на 5.

Прыклад 24.18. Запыт на выдаленне даных з табліцы «Сеансы в мае».

DELETE FROM [Сеансы в мае]
WHERE Кинотеатр LIKE 'Мир'

У выніку выканання запыту з табліцы будуць выдалены ўсе сеансы ў кінатэатры «Мир».