160 likes | 449 Views
Podzapytania w języku SQL. Czas pójść już dalej. Czego się nauczymy?. Umieszczać wewnętrzną instrukcję SELECT w zewnętrznej instrukcji SELECT Właściwości różnych rodzajów podzapytań Tego, że podzapytania pozwalają budować bardzo złożone instrukcje z prostych elementów. Rodzaje podzapytań .
E N D
Podzapytania w języku SQL Czas pójść już dalej
Czego się nauczymy? • Umieszczać wewnętrzną instrukcję SELECT w zewnętrznej instrukcji SELECT • Właściwości różnych rodzajów podzapytań • Tego, że podzapytania pozwalają budować bardzo złożone instrukcje z prostych elementów
Rodzaje podzapytań • Jednowierszowe – zwracają do zewnętrznej instrukcji SQL zero lub jeden wiersz • Wielowierszowe – zwracają do zewnętrzej instrukcji SWL co najmniej jeden wiersz • Wielokolumnowe – zwracają do zewnętrznej instrukcji SQL więcej niż jedną kolumnę • Skorelowane – odwołują się do jednej lub kilku kolumn z zewnętrznej instrukcji SQL(te podzapytania wykonywane są więcej niż jeden raz) • Zagnieżdżone – są umieszczane wewnątrz innego podzapytania. Można zagnieżdżać podzapytania do 255 poziomu
Podzapytania w klauzuli WHERE(1) • Podaj id oraz nazwisko pracowników pracujących w zespole administracji select id_zesp, nazwisko from pracownicy where id_zesp= (select id_zesp from zespoly where nazwa='ADMINISTRACJA')
Podzapytania w klauzuli WHERE(2) • Wybierz najgorzej zarabiającego asystenta select nazwisko, etat from pracownicy where etat='ASYSTENT' and placa_pod= (select min(placa_pod) from pracownicy where etat='ASYSTENT')
Podzapytania wyznaczające wiele krotek – operator in • Wyświetl nazwiska i płace pracowników zatrudnionych w zespołach algorytmy i administracja select nazwisko, placa_pod from pracownicy where id_zesp in (select id_zesp from zespoly where nazwa='ADMINISTRACJA' or nazwa='ALGORYTMY')
Podzapytania wyznaczające wiele krotek – operator any • stosowany z operatorami logicznymi, warunek jest prawdziwy jeśli jest spełniony dla jakiejkolwiek wartości zwróconej przez podzapytanie • Pokaż nazwiska tych pracowników, którzy zarabiają więcej niż którykolwiek pracownik zespołu 30 SELECT nazwisko, placa_pod, etat, id_zesp FROM pracownicy WHERE placa_pod > ANY (SELECT DISTINCT placa_pod FROM pracownicy WHERE id_zesp = 30)
Podzapytania wyznaczające wiele krotek – operator all • stosowany z operatorami logicznymi, warunek jest prawdziwy jeśli jest spełniony dla wszystkich wartości zwróconej przez podzapytanie • Pokaż nazwiska tych pracowników, którzy zarabiają więcej niż wszyscy pracownicy zespołu 30 SELECT nazwisko, placa_pod, etat, id_zesp FROM pracownicy WHERE placa_pod > ALL (SELECT placa_pod FROM pracownicy WHERE id_zesp = 30)
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 SELECT z.nazwa, AVG(p.placa_pod) AS srednia FROM pracownicy p RIGHT OUTER JOIN zespoly z ON p.id_zesp = z.id_zesp GROUPBY z.nazwa HAVING AVG(p.placa_pod) > (SELECT AVG(placa_pod) FROM pracownicy)
Podzapytania skorelowane(1) Cechy • 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 SELECT atrybut a, atrybut b, ... FROM relacjaPodzapytanie nadrzędne WHERE atrybutn >= ( SELECT atrybutj FROM relacja Podzapytanie skorelowane WHERE atrybut j = atrybut b );
Podzapytania skorelowane(2) Polecenie SELECT z podzapytaniem skorelowanym wykonywane jest następująco: 1. pobranie krotki Kn przez zapytanie nadrzędne 2. wykonanie podzapytania na podstawie wartości z krotki Kn 3. zaakceptowanie bądź odrzucenie krotki Kn 4. 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. SELECT p.nazwisko, p.placa_pod FROM pracownicy p WHERE p.placa_pod > (SELECT AVG(placa_pod) FROM pracownicy WHERE id_zesp = p.id_zesp)
Podzapytania skorelowane(3) Pracownicy p Pracownicy SELECT nazwisko, placa_pod, id_zesp FROM pracownicy p WHERE placa_pod> (SELECT AVG(placa_pod) FROM pracownicy WHERE id_zesp=p.id_zesp)
Podzapytania skorelowane(4) – operator EXIST, NOT EXIST • 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ł Pokaż tylko tych pracowników, którzy mają podwładnych SELECT id_prac, nazwisko, etat, id_zesp FROM pracownicy p WHEREEXISTS (SELECT id_prac FROM pracownicy WHERE id_szefa = p.id_prac)
Zakończenie Jak to opanujecie to tak będziecie mogli chodzić po szkole