Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Посібник Мова SQL кредитно-модульний.doc
Скачиваний:
35
Добавлен:
01.05.2015
Размер:
1.25 Mб
Скачать

Використання повних зовнішніх з'єднань

Результуючий набір, згенерований оператором SELECT, у якому є повне зовнішнє з'єднання, складається із всіх рядків обох таблиць незалежно від того, чи зазначені в таблицях відповідні значення (задані умовами з'єднаннями). У наступному операторіSELECTповне зовнішнє з'єднання використовується для одержання списку назв видавництв, імен і прізвищ авторів:

USE Pubs

SELECT a.Au_fname, a.Au_lname, p.Pub_name

FROM Authors a FULL OUTER JOIN Publishers p

ON a.City = p.City

ORDER BY p.Pub_name ASC, a.Au.lname ASC, a.Au_fname ASC

У результуючому наборі цього запиту перераховані назви всіх видавництв із таблиці Publishersі всіх авторів з таблиціAuthors. Якщо автор живе не в тому місті, де розташоване видавництво, у стовпці результуючого наборуAu_fnameіAu_lnameповертається порожнє значення. Якщо видавництво розташоване не в ттому же місті, де живе автор, у стовпецьPub_name результуючого набору також повертається порожнє значення. При відповідності умові з'єднання заповнюються всі стовпці результуючого набору.

3.Визначення підзапитів усередині операторів select

Підзапитом називається оператор, що повертає єдине значення SELECT, вкладений в інший операторSELECT, INSERT, UPDATE, DELETEабо в інший підзапит. Підзапит дозволяється застосовувати в будь-якому місці, де дозволене використання виразу. Підзапит також називається внутрішнім запитом або внутрішньою вибіркою, а утримуючий підзапит оператор - зовнішнім запитом або зовнішньою вибіркою. У наступному прикладі підзапит вкладений у конструкціюWHEREзовнішнього оператора

SELECT:

USE Northwind

SELECT ProductName

FROM Products

WHERE UnitPrice =

(

SELECT UnitPrice

FROM Products

WHERE ProductName = 'Sir Rodney"s Scones'

)

Убудований оператор SELECTспочатку визначає значенняUnitPriceдля товару за назвою ’Sir Rodney's Scones’, який дорівнює $10, Після цього значення $10 використовується в зовнішньому операторіSELECTдля добування імен всіх продуктів, ціна яких $10. Якщо таблиця фігурує тільки в підзапиті, але не в зовнішньому запиті, то стовпці цієї таблиці не вдається включити у вихідну інформацію (у список вибору зовнішнього запиту). У деяких операторах Transact-SQL підзапит обробляється так, ніби це був незалежний запит і його результати підставляються в зовнішній запит.

Типи підзапитів

Підзапити можна задавати у всіх місцях оператора SELECT. Однак оператори, у складі яких є підзапит, як правило складені в одному з наступних форматів:

  • WHERE <вираз> [NOT] IN (<підзапит>)

  • WHERE <вираз> <оператор_порівняння> [ANY | ALL] (<підзапит>)

  • WHERE [NOT] EXISTS (<підзапит>)

Підзапити із ключовими словами in або not in

Результатом підзапиту із ключовим словом IN (абоNOT IN) є список, що складається з нуля або більшої кількості значень. Результат, що повертає підзапит, використовується зовнішнім запитом.

У наступному прикладі підзапит вкладений у конструкцію WHEREі використається ключове словоIN:

USE Pubs

SELECT Pub_name

FROM Publishers

WHERE Pub_id IN

(

SELECT Pub_id

FROM Titles

WHERE Type = 'business'

)

Спочатку внутрішній запит повертає номери ідентифікаторів видавництв, що випустили літературу, що визначена типом business (1389 і 0736). Потім ці значення підставляються в зовнішній запит, що знаходить назви, що відповідають номерам ідентифікаторів з таблиці Publishers. Підзапити із ключовими словамиNOT IN також повертають список, що складається з нуля або більшої кількості значень. Ці запити абсолютно аналогічні підзапитам із ключовим словомINі відрізняються тільки тим, що ключове словоINзамінене наNOT IN.