Podzapytania

Transkrypt

Podzapytania
Podzapytania
Podzapytanie jest poleceniem SELECT zagnieżdżonym w
innym poleceniu SELECT. Podzapytanie może wystąpić
wszędzie tam, gdzie system spodziewa się zbioru wartości,
czyli w klauzulach SELECT, FROM, WHERE, HAVING
SELECT atrybut_1, atrybut_2,...
FROM relacja
WHERE atrybut_n operator
(SELECT atrybut_1,
FROM relacja
WHERE warunek
Bazy danych - laboratorium, Hanna Kleban
Podzapytania
Podzapytanie to oddzielna instrukcja SELECT, która wykonywana
jest w zapytaniu jako pierwsza i jej wynik w postaci wartości jest
przekazywany do warunku w głównym zapytaniu.
SELECT nazwaolejku FROM olejki
WHERE idskladnikarosliny=
(SELECT idskladnikarosliny FROM olejki
WHERE nazwaolejku = 'cynamon')
11
Bazy danych - laboratorium, Hanna Kleban
Podzapytania
Operatorem może być:
= ; <>; <; >; <=; >=
IN
ANY, ALL
Bazy danych - laboratorium, Hanna Kleban
Podzapytania zwracające jedną wartość
Lewa strona predykatu wymaga
podzapytaniem po prawej stronie.
zgodnego
wyniku
z
Jeżeli w predykacie jest operator logiczny, to podzapytanie musi
zwrócić pojedynczą wartość.
liczba > (podzapytanie zwraca pojedynczą liczbę)
napis = (podzapytanie zwraca pojedynczy napis)
Bazy danych - laboratorium, Hanna Kleban
Podzapytanie wyznaczające wiele krotek
Operator IN można stosować zarówno dla pojedynczych wartości,
jak i listy.
IN
równy dowolnej wartości uzyskanej w wyniku zapytania
wewnętrznego
NOT IN
różne od wszystkich wartości uzyskanych w wyniku zapytania
wewnętrznego.
Przykład
Podaj nazwy olejków, które mają takie samo stężenie jak
olejek o nazwie imbir
Bazy danych - laboratorium, Hanna Kleban
Podzapytanie wyznaczające wiele krotek
select nazwaolejku from olejki
where idolejku IN
(select idolejku from olejkistezenia
where stezenie=
(select stezenie from olejkistezenia
where idolejku =
(select idolejku from olejki
where nazwaolejku ='imbir')))
Bazy danych - laboratorium, Hanna Kleban
13,15,22,32,36,53
0,849
15
Podzapytania wyznaczające wiele krotek
Jeżeli podzapytanie może zwrócić listę wartości, a predykat
akceptuje tylko jedną wartość należy zastosować słowo kluczowe
ANY lub ALL.
ANY – służy do porównania wartości z każdą wartością zwracaną
przez podzapytanie.
Liczba >ANY (lista wartości) oznacza, że warunek jest spełniony,
gdy liczba jest większa niż przynajmniej jeden element listy.
Liczba >ALL (lista wartości) oznacza, że warunek jest spełniony,
jeżeli liczba jest większa od wszystkich elementów listy.
Bazy danych - laboratorium, Hanna Kleban
Podzapytania wyznaczające wiele krotek
liczba = ALL (lista) – należy ostrożnie stosować operator logiczny =
z ALL. Jeżeli lista zawiera różne wartości (5,6) to powyższy
predykat jest fałszywy.
Przykład
Wypisz stężenia i identyfikatory tych olejków, które maja stężenie
przynajmniej takie jak stężenie olejków: Cynamon, Eukaliptus,
Majeranek.
Bazy danych - laboratorium, Hanna Kleban
Podzapytania wyznaczające wiele krotek
select Stezenie as[Stężenie],IDOlejku
from OlejkiStezenia
where Stezenie >=any
(select Stezenie
from OlejkiStezenia
where IDOlejku in
(select IDOlejku from Olejki
where NazwaOlejku in
('Cynamon','Majeranek','Eukaliptus')))
Bazy danych - laboratorium, Hanna Kleban
Podzapytania wyznaczające wiele krotek
Przykład
Wypisz stężenia i identyfikatory tych olejków, które mają stężenia
większe od stężeń olejków: Cynamon, Eukaliptus, Majeranek.
select Stezenie,IDOlejku from OlejkiStezenia
where Stezenie >=all
(select Stezenie from OlejkiStezenia
where IDOlejku in
(select IDOlejku from Olejki where NazwaOlejku
in('Cynamon','Majeranek','Eukaliptus')))
Bazy danych - laboratorium, Hanna Kleban
Podzapytanie
Podzapytania mogą być użyte w więcej niż jednym predykacie.
SELECT *
FROM .....
WHERE
warunek
1
(podzapytanie 1)
operator logiczny warunek 2
(podzapytanie 2)
Bazy danych - laboratorium, Hanna Kleban
Podzapytanie
Przykład
Podaj nazwy olejków które produkowane sa z tego samego typu
lub składnika co olejek cynamon.
select nazwaolejku,idskladnikarosliny,idtypurosliny
from olejki
where idskladnikarosliny=
(select idskladnikarosliny from olejki
where nazwaolejku = 'cynamon')
or idtypurosliny = (select idtypurosliny from olejki
where nazwaolejku = 'cynamon')
Bazy danych - laboratorium, Hanna Kleban
Najczęściej spotykane błędy
Lista atrybutów w klauzuli SELECT podzapytania jest niezgodna z
listą atrybutów warunku.
Podzapytanie zwraca więcej niż jeden wiersz a w warunku użyto
operatora przewidzianego do porównania wartości skalarnych.
Bazy danych - laboratorium, Hanna Kleban
Reguły zagnieżdżeń podzapytań
W podzapytaniu nie używamy klauzuli ORDER BY;
Klauzula ORDER BY może wystąpić wyłącznie jako ostatnia
klauzula najbardziej zewnętrznego zapytania;
Liczba oraz typ atrybutów występujących w klauzuli SELECT
podzapytania musi być zgodna z liczbą i typem atrybutów użytych
w warunku zapytania zewnętrznego, tj. zapytania wyższego
poziomu;
W podzapytaniu można używać operatorów zbiorowych;
Bazy danych - laboratorium, Hanna Kleban
Reguły zagnieżdżeń podzapytań
Podzapytania są zawsze wykonywane w kolejności od najgłębiej
zagnieżdżonego do najbardziej zewnętrznego.
Bazy danych - laboratorium, Hanna Kleban
Podzapytania skorelowane
Podzapytanie skorelowane jest wykonywane dla każdej krotki
przeglądanej przez zapytanie zewnętrzne.
Podzapytanie skorelowane operuje na wartościach atrybutów
przekazanych przez zapytanie zewnętrzne.
Podzapytanie skorelowane zawsze posiada odwołanie do atrybutu
zapytania zewnętrznego.
Bazy danych - laboratorium, Hanna Kleban
Podzapytania skorelowane
Podzapytaniem skorelowanym wykonywane jest następująco:
•pobranie wiersza Wn przez zapytanie zewnętrzne,
•wykonanie zapytania wewnętrznego na podstawie wartości z
wiersza Wn ,
•zaakceptowanie bądź odrzucenie wiersza Wn,
•pobranie kolejnego wiersza Wn+1 przez zapytanie zewnętrzne i
powtórzenie kroków 2-4
Bazy danych - laboratorium, Hanna Kleban
Podzapytania skorelowane
Przykład
Wypisz nazwy oraz identyfikatory olejków, którym przypisane są
jakiekolwiek ostrzeżenia
SELECT NazwaOlejku,IDOlejku
FROM Olejki
WHERE EXISTS (SELECT *
FROM OlejkiOstrzezenia
WHERE IDOlejku=Olejki.IDOlejku)
ORDER BY NazwaOlejku
Bazy danych - laboratorium, Hanna Kleban

Podobne dokumenty