Notatki
Pokaz slajdów
Konspekt
1
Rozdział 5
Podzapytania
  • podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, klauzula WITH, operatory ANY, ALL i EXISTS, zapytania hierarchiczne
2
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.
  • Ogólny format zagnieżdżania zapytań:


  • Operatorem może być:
    • = <> < > <= >=
    • IN
    • ANY, ALL
3
Podzapytania wyznaczające jedną krotkę
  • Wyznacz pracownika zarabiającego najmniej w instytucie







  • Wyznacz najgorzej zarabiającego asystenta


4
Podzapytania wyznaczające wiele krotek (1)
  • Wyświetl nazwiska i płace pracowników, zatrudnionych w zespołach o nazwach "ADMINISTRACJA" lub "ALGORYTMY".
5
Podzapytania wyznaczające wiele krotek (2)
  • Wyświetl nazwiska najgorzej zarabiających pracowników w każdym zespole
6
Podzapytania wyznaczające wiele krotek (3)
  • Operator ANY
    • stosowany z operatorami logicznymi, warunek jest prawdziwy jeśli jest spełniony dla jakiejkolwiek wartości zwróconej przez podzapytanie.





  • Operator ALL
    • stosowany z operatorami logicznymi, warunek jest prawdziwy jeśli jest spełniony dla wszystkich wartości zwróconych przez podzapytanie.

7
Najczęściej spotykane błędy
  • Lista atrybutów w klauzuli SELECT podzapytania jest niezgodna z listą atrybutów w warunku:







  • Podzapytanie zwraca więcej niż jeden wiersz a w warunku użyto operatora przewidzianego do porównywania wartości skalarnych:
8
Podzapytania w klauzuli HAVING
  • Wyświetl te zespoły, w których średnia płaca podstawowa jest większa niż średnia płaca w całym instytucie.










9
Wielopoziomowe zagnieżdżanie zapytań
  • Wyświetlić nazwiska i płace pracowników, zarabiających więcej niż wynosi maksymalna płaca w zespole o nazwie ALGORYTMY
10
Reguły zagnieżdżania 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 typy 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.
  • Podzapytania są zawsze wykonywane w kolejności od najgłębiej zagnieżdżonego do najbardziej zewnętrznego.
  • Podzapytania mogą się znaleźć w dowolnym miejscu w klauzuli WHERE.
11
Podzapytanie skorelowane (1)
  • Cechy
    • Podzapytanie skorelowane jest wykonywane dla każdej krotki przeglądanej przez zapytanie nadrzędne
    • Podzapytanie skorelowane operuje na wartościach atrybutów przekazanych przez zapytanie nadrzędne
    • Podzapytanie skorelowane zawsze posiada odwołanie do atrybutu zapytania nadrzędnego


12
Podzapytanie skorelowane (2)
  • Polecenie SELECT z podzapytaniem skorelowanym wykonywane jest następująco:
    • pobranie krotki Kn przez zapytanie nadrzędne
    • wykonanie podzapytania na podstawie wartości z krotki Kn
    • zaakceptowanie bądź odrzucenie krotki Kn
    • pobranie kolejnej krotki Kn+1 przez zapytanie nadrzędne i powtórzenie kroków 2-4
  • Przykład: Wyświetl nazwiska pracowników zarabiających powyżej średniej dla swojego zespołu.
13
Podzapytanie skorelowane (3)
14
Operator EXISTS
  • Operatory EXISTS, NOT EXISTS
    • Operator zwraca wartość TRUE jeżeli podzapytanie zwraca jakąkolwiek wartość. Podzapytanie nie musi zwracać wartości z bazy danych, równie dobrze może zwracać dowolny literał.
15
Podzapytania w klauzuli SELECT
16
Podzapytania w klauzuli FROM
  • Wynik podzapytania może być wykorzystany jako wejściowy zbiór danych dla innego zapytania. Podzapytanie może się znaleźć w klauzuli FROM, zamiast nazwy relacji. W podzapytaniu w klauzuli FROM dopuszczalne jest użycie klauzuli ORDER BY.
17
Klauzula WITH
18
Zapytania hierarchiczne