Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Mova_SQL.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
106.5 Кб
Скачать

4.2.3. Запити, що використовують exіsts

Квантор EXІSTS (існує) - поняття, запозичене з формальної логіки. У мові SQL предикат із квантором існування представляється вираженням EXІSTS (SELECT * FROM ...).

Таке вираження вважається щирим тільки тоді, коли результат обчислення "SELECT * FROM ..." є непорожньою множиною, тобто коли існує який-небудь запис у таблиці, зазначеної у фразі FROM підзапиту, що задовольняє умові WHERE підзапиту.

Розглянемо приклад. Видати назви постачальників, що поставляють продукт із номером 11.

SELECT Назва

FROM Постачальники

WHERE EXІSTS

( SELECT *

FROM Постачання

WHERE ПС = Постачальники.ПС

AND ПР = 11 );

4.2.4. Функції в підзапиті

Тепер, після знайомства з різними формулюваннями вкладених підзапитів і псевдонімами легше зрозуміти текст і алгоритм реалізації запиту на одержання тих постачальників продуктів для Сирників, що поставляють ці продукти за мінімальну ціну:

SELECT Продукт, Ціна, Назва, Статус

FROM Продукти, Склад, Блюда, Постачання, Постачальники

WHERE Продукти.ПР = Склад.ПР

AND Склад.БЛ = Блюда.БЛ

AND Постачання.ПР = Склад.ПР

AND Постачання.ПС = Постачальники.ПС

AND Блюдо = 'Сирники'

AND Ціна = ( SELECT MІ(Ціна)

FROM Постачання X

WHERE X.ПР = Постачання.ПР );

Природно, що це корельований підзапит: тут спочатку визначається мінімальна ціна продукту, що входить до складу Сирників, і тільки потім з'ясовується його постачальник.

4.3. Об'єднання (unіon)

У літературі по базам даних розглядається реляційна операція "Об'єднання", що дозволяє одержати відношення, яке складається з усіх рядків, що входять в одне чи обох поєднуваних відношень. Але при цьому відношення які об’єднуються повинні бути сумісними по об'єднанню. Для SQL це означає, що дві таблиці можна поєднувати тоді і тільки тоді, коли:

a) вони мають однакове число стовпців, наприклад, m;

б) для всіх і (і = 1, 2, ..., m) і-й стовпець першої таблиці й і-й стовпець другої таблиці мають у точності однаковий тип даних.

Наприклад, видати назви продуктів, у яких немає жирів, або вхідних до складу блюда з кодом БЛ = 1:

SELECT Продукт

FROM Продукти

WHERE Жири = 0

UNІON

SELECT Продукт

FROM Склад

WHERE БЛ = 1

З цього простого приклада видно, що надлишкові дублікати завжди виключаються з результату UNІON. Тому, хоча в розглянутому прикладі Помідори, Зелень і Яблука вибираються обома з двох складових команди SELECT, в остаточному результаті вони з'являються тільки один раз.

Розділ 5. Інструкції модифікації даних в sql. Створення базових таблиць

5.1. Особливості і синтаксис інструкцій модифікації даних

Модифікація даних може виконуватися за допомогою інструкцій DELETE (видалити), ІNSERT (вставити) і UPDATE (відновити). Подібно інструкції SELECT вони можуть оперувати базовими таблицями.

Інструкція DELETE має формат

DELETE

FROM базова таблиця | представлення

[WHERE фраза];

і дозволяє видалити вміст усіх рядків зазначеної таблиці (при відсутності WHERE фрази) чи тих її рядків, що виділяються WHERE фразою.

Інструкція ІNSERT має один з наступних форматів:

ІNSERT

ІNTO {базова таблиця | представлення}

[(стовпець [,стовпець] ...)]

VALUES ({константа | перемінна}

[,{константа | перемінна}] ...);

чи

ІNSERT

ІNTO {базова таблиця | представлення}

[(стовпець [,стовпець] ...)]

підзапит;

У першому форматі в таблицю вставляється рядок зі значеннями полів, зазначеними в переліку фрази VALUES (значення), причому і-те значення відповідає і-му стовпцю в списку стовпців (стовпці, не зазначені в списку, заповнюються NULL-значеннями). Якщо в списку VALUES фрази зазначені всі стовпці таблиці, що модифікується, і порядок їхнього перерахування відповідає порядку стовпців в описі таблиці, то список стовпців у фразі ІNTO можна опустити. Однак не радимо цього робити, тому що при зміні опису таблиці (перестановка чи стовпців зміна їхнього числа) прийдеться переписувати й ІNSERT інструкцію.

В другому форматі спочатку виконується підзапит, тобто за інструкцією SELECT у пам'яті формується робоча таблиця, а потім рядки робочої таблиці завантажуються в таблицю, що модифікується. При цьому і-й стовпець робочої таблиці (і-й елемент списку SELECT) відповідає і-му стовпцю в списку стовпців таблиці, що модифікується. Тут також при виконанні зазначених вище умов може бути опущений список стовпців фрази ІNTO.

Інструкція UPDATE також має два формати. Перший з них:

UPDATE (базова таблиця | представлення}

SET стовпець = значення [, стовпець = значення] ...

[WHERE фраза]

де значення - це

стовпець | вираз | константа | змінна і може включати стовпці лише з обновлюваної таблиці, тобто значення одного зі стовпців таблиці, що модифікується, може замінятися на значення її іншого чи стовпця виразу, що містить значення декількох її стовпців, включаючи змінюваний.

При відсутності WHERE фрази обновляються значення зазначених стовпців у всіх рядках таблиці, що модифікується. WHERE фраза дозволяє скоротити число обновлюваних рядків, вказуючи умови їхнього добору.

Другий формат описує інструкцію, що дозволяє робити відновлення значень таблиці, що модифікується, за значеннями стовпців з інших таблиць. На жаль у ряді СУБД ці формати відрізняються один від одного. Для прикладу приведемо один з таких форматів:

UPDATE {базова таблиця | представлення}

SET стовпець = значення [, стовпець = значення] ...

FROM {базова таблиця | представлення} [псевдонім],

{базова таблиця | представлення} [псевдонім]

[,{базова таблиця | представлення}

[псевдонім]] ...

[WHERE фраза]

Тут перелік таблиць фрази FROM містить ім'я таблиці, що модифікується, і тих таблиць, значення стовпців яких використовуються для відновлення. При цьому, природно, таблиці повинні бути зв'язані між собою в WHERE фразі.

У значеннях, що знаходяться в правих частинах рівностей фрази SET, слід уточнювати імена використовуваних стовпців, випереджаючи їхнім ім'ям таблиці (псевдоніма).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]