Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL.

Коpie: 2
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.

(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 4: Język bazy danych - SQL Połączenia.

Podobne prezentacje


Prezentacja na temat: "(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL."— Zapis prezentacji:

1 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL

2 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Wprowadzenie do języka SQL język dostępu do bazy danychjęzyk dostępu do bazy danych język deklaratywnyjęzyk deklaratywny grupy poleceń języka:grupy poleceń języka: –DQL (ang. Data Query Language) –DML (ang. Data Manipulation Language) –DDL (ang. Data Definition Language) –DCL (ang. Data Control Language) polecenie SQL może być zapisane:polecenie SQL może być zapisane: –w jednym bądź wielu wierszach –dużymi lub małymi literami polecenie SQL kończymy średnikiempolecenie SQL kończymy średnikiem SELECT * FROM pracownicy; pracownicy;

3 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Projekcja SELECT nazwisko, etat FROM pracownicy; SELECT nazwisko, etat FROM pracownicy; wybór wartości określonych atrybutów relacjiwybór wartości określonych atrybutów relacji Wyrażenia arytmetyczne operatory arytmetyczneoperatory arytmetyczne –+, -, *, / SELECT nazwisko, placa_pod*12, placa_dod+200 FROM pracownicy; SELECT nazwisko, placa_pod*12, placa_dod+200 FROM pracownicy;

4 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Aliasy atrybutów relacji alias - alternatywna nazwa atrybutualias - alternatywna nazwa atrybutu SELECT nazwisko, placa_pod*12 roczna_placa, placa_dod+200 "nowe dodatki" FROM pracownicy; SELECT nazwisko, placa_pod*12 roczna_placa, placa_dod+200 "nowe dodatki" FROM pracownicy; Operator konkatenacji - || umożliwia łączenie wartości wyświetlanych atrybutówumożliwia łączenie wartości wyświetlanych atrybutów SELECT 'Pracownik ' || nazwisko FROM pracownicy; SELECT 'Pracownik ' || nazwisko FROM pracownicy;

5 (c) 1999, Instytut Informatyki Politechniki Poznańskiej funkcja NVL o następującej specyfikacjifunkcja NVL o następującej specyfikacji NVL (wyrażenie, wartość) Obsługa wartości pustych SELECT nazwisko, placa_pod*12 + placa_dod FROM pracownicy; SELECT nazwisko, placa_pod*12 + placa_dod FROM pracownicy; SELECT nazwisko, placa_pod*12 + NVL (placa_dod, 0) FROM pracownicy; SELECT nazwisko, placa_pod*12 + NVL (placa_dod, 0) FROM pracownicy; Eliminowanie duplikatów SELECT etat FROM pracownicy; SELECT DISTINCT etat FROM pracownicy; słowo kluczowe DISTINCTsłowo kluczowe DISTINCT

6 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Edycja poleceń input tekst rozszerza bufor o wiersz tekst change /stary/nowy zamienia łańcuch znaków stary na nowy w bieżącym wierszu bufora listwyświetla zawartość bufora list n wyświetla wiersz bufora o numerze n delkasuje bieżący wiersz bufora poleceń runwyświetla i wykonuje polecenie przechowywane w buforze

7 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Edycja poleceń cd. save nazwa_plikuzapisuje zawartość bufora w pliku tekstowym get nazwa_plikuwczytuje do bufora zawartość pliku editumożliwia edycję zawartości bufora za pomocą edytora tekstowego (zmienna _EDITOR) start nazwa_plikuwykonuje polecenia zawarte w polecenia zawarte w pliku describe nazwa_relacji wyświetla schemat relacji exitkończy sesję użytkownika spool nazwa_plikuzapisuje w pliku informacje pojawiające się na ekranie spool offkończy zapisywanie do pliku

8 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Porządkowanie wyników zapytania klauzula ORDER BYklauzula ORDER BY kolejność sortowania - słowo kluczowe ASC lub DESCkolejność sortowania - słowo kluczowe ASC lub DESC ORDER BY występuje zawsze jako ostatnia klauzula zapytaniaORDER BY występuje zawsze jako ostatnia klauzula zapytania SELECT nazwisko, etat FROM pracownicy ORDER BY etat DESC, nazwisko ASC; SELECT nazwisko, etat FROM pracownicy ORDER BY etat DESC, nazwisko ASC;

9 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Selekcja krotek relacji klauzula WHEREklauzula WHERE składnia poleceniaskładnia polecenia SELECT atrybut 1, atrybut 2,... FROM relacja WHERE atrybut m operator wartość SELECT atrybut 1, atrybut 2,... FROM relacja WHERE atrybut m operator wartość Operatory operatory matematyczneoperatory matematyczne =,!=, <>,>,>=,,>,>=,<,<= SELECT nazwisko, placa_pod, etat FROM pracownicy WHERE placa_pod > 400; SELECT nazwisko, placa_pod, etat FROM pracownicy WHERE placa_pod > 400;

10 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Operatory cd. operatory SQLoperatory SQL –BETWEEN... AND... SELECT nazwisko, placa_pod, etat FROM pracownicy WHERE placa_pod BETWEEN 900 AND 1200; SELECT nazwisko, placa_pod, etat FROM pracownicy WHERE placa_pod BETWEEN 900 AND 1200; –IN SELECT nazwisko, placa_pod, id_zesp FROM pracownicy WHERE etat IN ('PROFESOR', 'DYREKTOR'); SELECT nazwisko, placa_pod, id_zesp FROM pracownicy WHERE etat IN ('PROFESOR', 'DYREKTOR');

11 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Operatory cd. –LIKE SELECT nazwisko, placa_pod, id_zesp FROM pracownicy WHERE nazwisko LIKE 'M%'; SELECT nazwisko, placa_pod, id_zesp FROM pracownicy WHERE nazwisko LIKE 'M%'; –IS NULL SELECT nazwisko, placa_pod FROM pracownicy WHERE placa_dod IS NULL; SELECT nazwisko, placa_pod FROM pracownicy WHERE placa_dod IS NULL;

12 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Operatory cd. negacje operatorów SQLnegacje operatorów SQL –NOT BETWEEN... AND... –NOT IN –NOT LIKE –IS NOT NULL SELECT nazwisko, placa_pod, id_zesp FROM pracownicy WHERE etat NOT IN ('PROFESOR', 'DYREKTOR'); SELECT nazwisko, placa_pod, id_zesp FROM pracownicy WHERE etat NOT IN ('PROFESOR', 'DYREKTOR');

13 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Warunki złożone klauzuli WHERE operatory logiczne w klauzuli WHEREoperatory logiczne w klauzuli WHERE –AND –OR SELECT nazwisko, placa_pod, id_zesp FROM pracownicy WHERE etat = 'ASYSTENT' AND placa_pod > 400; SELECT nazwisko, placa_pod, id_zesp FROM pracownicy WHERE etat = 'ASYSTENT' AND placa_pod > 400;

14 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Warunki złożone klauzuli WHERE cd. operatory logiczne mogą być stosowane jednocześnie w tej samej klauzuli WHEREoperatory logiczne mogą być stosowane jednocześnie w tej samej klauzuli WHERE AND posiada wyższy priorytet niż ORAND posiada wyższy priorytet niż OR zmiana priorytetu jest możliwa za pomocą nawiasówzmiana priorytetu jest możliwa za pomocą nawiasów SELECT nazwisko, etat FROM pracownicy WHERE placa_pod > 500 AND etat = 'ADIUNKT' OR etat = 'ASYSTENT'; SELECT nazwisko, etat FROM pracownicy WHERE placa_pod > 500 AND etat = 'ADIUNKT' OR etat = 'ASYSTENT';

15 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania 2-1.Wyświetl wszystkich pracowników o zarobkach z przedziału. select nazwisko, id_zesp, placa_pod from pracownicy where placa_pod between 300 and 800; 2-2.Wyświetl całość informacji o pracownikach zespołów 10 i 20, zgodnie z alfabetycznym porządkiem nazwisk. select * from pracownicy where id_zesp in (10, 20) order by nazwisko;

16 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd. 2-3.Wyświetl wszystkich pracowników o nazwiskach rozpoczynających się od liter KO i JE. select nazwisko from pracownicy where nazwisko like 'KO%' or nazwisko like 'JE%'; 2-4.Wyświetl nazwiska, etaty i płace podstawowe pracowników, którzy mają przełożonych. select nazwisko, etat, placa_pod from pracownicy where id_szefa is not null;

17 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd. 2-5.Wyświetl nazwiska i etaty wszystkich asystentów zespołu 20 w porządku leksykograficznym nazwisk. select nazwisko, etat from pracownicy where etat='ASYSTENT' and id_zesp=20 order by nazwisko asc;

18 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd. 2-6.Wyświetl nazwiska i roczne wynagrodzenie wszystkich pracowników zatrudnionych w roku 1992 i 1993, w kolejności malejącego wynagrodzenia. PRACOWNIK ROCZNE_ZAROBKI HAPKE(ASYSTENT) 6840 JEZIERSKI (ASYSTENT) select nazwisko||' ('||etat||')' pracownik, 12*(placa_pod+nvl(placa_dod,0)) roczne_zarobki from pracownicy where zatrudniony like '%92' or zatrudniony like '%93' order by 2 desc;

19 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Funkcje grupowe operują na podzbiorach krotek relacji, nazywanych grupamioperują na podzbiorach krotek relacji, nazywanych grupami wyznaczają wartość operując na atrybutach wielu krotekwyznaczają wartość operując na atrybutach wielu krotek funkcje:funkcje: –avg ([distinct|all] wyrażenie) –count ([distinct|all] wyrażenie) –max ([distinct|all] wyrażenie) –min ([distinct|all] wyrażenie) –sum ([distinct|all] wyrażenie) SELECT AVG(placa_pod) FROM pracownicy; SELECT AVG(placa_pod) FROM pracownicy; SELECT count(*) FROM pracownicy WHERE id_zesp=20; SELECT count(*) FROM pracownicy WHERE id_zesp=20;

20 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Podział krotek na grupy - klauzula GROUP BY SELECT id_zesp, avg(placa_pod) FROM pracownicy GROUP BY id_zesp; SELECT id_zesp, avg(placa_pod) FROM pracownicy GROUP BY id_zesp; wyznacz średnie płace w każdej z grup zespołowychwyznacz średnie płace w każdej z grup zespołowych wyznacz średnie płace w każdej z grup etatowych dla poszczególnych zespołówwyznacz średnie płace w każdej z grup etatowych dla poszczególnych zespołów SELECT id_zesp, etat, avg(placa_pod) FROM pracownicy GROUP BY id_zesp, etat; SELECT id_zesp, etat, avg(placa_pod) FROM pracownicy GROUP BY id_zesp, etat; Podział grup na podgrupy

21 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Klauzula HAVING wybór grup spełniających określone warunkiwybór grup spełniających określone warunki wyświetl grupy etatowe, których suma płac podstawowych przekracza 4000 PLNwyświetl grupy etatowe, których suma płac podstawowych przekracza 4000 PLN SELECT etat, sum(placa_pod) FROM pracownicy GROUP BY etat HAVING sum(placa_pod) > 4000; SELECT etat, sum(placa_pod) FROM pracownicy GROUP BY etat HAVING sum(placa_pod) > 4000; wyświetl maksymalne płace w ramach grup etatowych, z pominięciem grupy adiunktówwyświetl maksymalne płace w ramach grup etatowych, z pominięciem grupy adiunktów SELECT etat, max(placa_pod) FROM pracownicy WHERE etat != 'ADIUNKT' GROUP BY etat; SELECT etat, max(placa_pod) FROM pracownicy WHERE etat != 'ADIUNKT' GROUP BY etat;

22 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania 2-7.Wyświetl liczbę pracowników zatrudnionych na etacie profesora. select count(*) profesorowie from pracownicy where etat='PROFESOR'; 2-8.Wyświetl przeciętną, miesięczną płacę oraz przeciętne roczne zarobki każdej grupy etatowej (uwzględnij płacę dodatkową). select etat, avg(placa_pod) srednia_placa_pod, avg(12*(placa_pod+nvl(placa_dod,0))) roczne_zarobki from pracownicy group by etat;

23 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd. 2-9.Wyświetl numery zespołów zatrudniających powyżej 3 pracowników. select id_zesp, count(*) liczba_pracownikow from pracownicy group by id_zesp having count(*)>3; 2-10.Sprawdź, czy wszystkie numery pracowników są unikalne. select id_prac from pracownicy group by id_prac having count(*)>1;

24 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd Dla każdego szefa wyświetl płacę najmniej zarabiającego podwładnego. Pomiń grupy, w których minimalna płaca jest niższa od 300 zł. Uporządkuj wyniki według malejących zarobków. select id_szefa, min(placa_pod) from pracownicy group by id_szefa having min(placa_pod)>300 order by min(placa_pod) desc;

25 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Połączenie równościowe nazwiskoid_zesp MAREK ZAKRZEWICZ id_prac nazw a ADMINISTRACJA SYSTEMY EKSPERCKIE id_zes p BIAŁY 30 PRACOWNICY ZESPOLY SELECT nazwisko, z.id_zesp, nazwa FROM pracownicy p, zespoly z WHERE p.id_zesp = z.id_zesp; SELECT nazwisko, z.id_zesp, nazwa FROM pracownicy p, zespoly z WHERE p.id_zesp = z.id_zesp;

26 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Połączenie nierównościowe nazwiskoplaca_pod MAREK ZAKRZEWICZ id_prac placa_mi n 270 nazwa SEKRETARKA PRACOWNICY ETATY SELECT nazwisko, nazwa FROM pracownicy, etaty WHERE placa_pod BETWEEN placa_min AND placa_max; SELECT nazwisko, nazwa FROM pracownicy, etaty WHERE placa_pod BETWEEN placa_min AND placa_max; placa_ma x 450 STAŻYSTA

27 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Połączenie zewnętrzne SELECT z.id_zesp, z.nazwa, p.nazwisko FROM pracownicy p, zespoly z WHERE p.id_zesp = z.id_zesp; Zespół 50 - BADANIA OPERACYJNE nie zostanie wyświetlony Zadanie: wyświetlić wszystkie zespoły, nawet te, które nie zatrudniają pracowników

28 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Połączenie zewnętrzne cd. id_zespnazwanazwiskoid_zesp SYSTEMY ROZPROSZONE BADANIA OPERACYJNE JEZIERSKI KONOPKA ADMINISTRACJAMAREK10 ??? SELECT z.id_zesp, z.nazwa, p.nazwisko SELECT z.id_zesp, z.nazwa, p.nazwisko FROM pracownicy p, zespoly z FROM pracownicy p, zespoly z WHERE p.id_zesp (+) = z.id_zesp; WHERE p.id_zesp (+) = z.id_zesp; SELECT z.id_zesp, z.nazwa, p.nazwisko SELECT z.id_zesp, z.nazwa, p.nazwisko FROM pracownicy p, zespoly z FROM pracownicy p, zespoly z WHERE p.id_zesp (+) = z.id_zesp; WHERE p.id_zesp (+) = z.id_zesp;

29 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Połączenie zewnętrzne cd. id_zespnazwanazwiskoid_zesp 20 SYSTEMY ROZPORSZONE JEZIERSKI KONOPKA ADMINISTRACJAMAREK10 ??? SELECT z.id_zesp, z.nazwa, p.nazwisko SELECT z.id_zesp, z.nazwa, p.nazwisko FROM pracownicy p, zespoly z FROM pracownicy p, zespoly z WHERE p.id_zesp = z.id_zesp (+); WHERE p.id_zesp = z.id_zesp (+); SELECT z.id_zesp, z.nazwa, p.nazwisko SELECT z.id_zesp, z.nazwa, p.nazwisko FROM pracownicy p, zespoly z FROM pracownicy p, zespoly z WHERE p.id_zesp = z.id_zesp (+); WHERE p.id_zesp = z.id_zesp (+); KIWLENKO

30 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Połączenie zwrotne relacji nazwisko id_szefa BRZEZIŃSKI MORZY id_prac 130 MATYSIAK Pracownicy PS nazwiskoid_szefa BRZEZIŃSKI MORZY id_prac 130 MATYSIAK nazwiskoid_szefa BRZEZIŃSKI MORZY id_prac 130 MATYSIAK SELECT p.nazwisko, s.nazwisko SELECT p.nazwisko, s.nazwisko FROM pracownicy p, pracownicy s FROM pracownicy p, pracownicy s WHERE p.id_szefa = s.id_prac; WHERE p.id_szefa = s.id_prac; SELECT p.nazwisko, s.nazwisko SELECT p.nazwisko, s.nazwisko FROM pracownicy p, pracownicy s FROM pracownicy p, pracownicy s WHERE p.id_szefa = s.id_prac; WHERE p.id_szefa = s.id_prac;

31 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania 2-12.Wyświetl wszystkich pracowników z ul. Piotrowo 3a; wyniki uporządkuj według nazwisk pracowników. select nazwisko, adres from pracownicy p, zespoly z where (z.adres = 'PIOTROWO 3A') and (p.id_zesp = z.id_zesp) order by nazwisko; 2-13.Wyświetl nazwiska, miejsca pracy oraz nazwy zespołów tych pracowników, których miesięczna pensja przekracza 400. select nazwisko, adres, nazwa from pracownicy p, zespoly z where(placa_pod > 400) and (p.id_zesp = z.id_zesp);

32 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd Wyświetl nazwiska, etaty, wynagrodzenia, kategorie płacowe i nazwy zespołów pracowników nie będących asystentami. Wyniki uszereguj zgodnie z malejącym wynagrodzeniem. select nazwisko, etat, placa_pod, e.nazwa kategoria, z.nazwa zespol from pracownicy p, etaty e, zespoly z where (etat <> 'ASYSTENT') and (p.id_zesp = z.id_zesp) and (placa_pod between placa_min and placa_max) order by placa_pod desc;

33 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd Wyświetl zespoły nie zatrudniające pracowników. select z.nazwa zespol from pracownicy p, zespoly z where (p.id_zesp(+) = z.id_zesp) and (p.id_prac is null); (p.id_prac is null); 2-16.Wyświetl nazwiska i numery pracowników wraz z numerami i nazwiskami ich szefów. select p.id_prac, p.nazwisko podwladny, s.id_prac, s.nazwisko szef from pracownicy p, pracownicy s where p.id_szefa = s.id_prac;

34 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd W zleceniu z powyższego zadania dokonaj modyfikacji umożliwiających wyświetlenie pracownika WĘGLARZ, który nie ma szefa. select p.id_prac, p.nazwisko podwladny, s.id_prac, s.nazwisko szef s.nazwisko szef from pracownicy p, pracownicy s where p.id_szefa = s.id_prac(+);

35 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Operatory zbiorowe UNIONUNION –suma zbiorów –eliminuje duplikaty UNION ALLUNION ALL –suma zbiorów –nie eliminuje duplikatów INTERSECTINTERSECT –część wspólna zbiorów –eliminuje duplikaty MINUSMINUS –różnica zbiorów –eliminuje duplikaty SELECT etat FROM pracownicy WHERE id_zesp = 10 UNION SELECT etat FROM pracownicy WHERE id_zesp = 30; ORDER BY 1; SELECT etat FROM pracownicy WHERE id_zesp = 10 UNION SELECT etat FROM pracownicy WHERE id_zesp = 30; ORDER BY 1;

36 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Reguły stosowania operatorów zbiorowych w łączonych operatorami zbiorowymi klauzulach SELECT musi wystąpić ta sama liczba atrybutóww łączonych operatorami zbiorowymi klauzulach SELECT musi wystąpić ta sama liczba atrybutów typy odpowiednich atrybutów różnych klauzul SELECT muszą być zgodnetypy odpowiednich atrybutów różnych klauzul SELECT muszą być zgodne w wyniku zapytania pojawiają się nazwy atrybutów wyłącznie z pierwszej klauzuli SELECTw wyniku zapytania pojawiają się nazwy atrybutów wyłącznie z pierwszej klauzuli SELECT klauzula ORDER BY może być użyta tylko jako ostatnia klauzula zapytaniaklauzula ORDER BY może być użyta tylko jako ostatnia klauzula zapytania w klauzuli ORDER BY nie stosujemy nazw atrybutów lecz ich numery porządkowew klauzuli ORDER BY nie stosujemy nazw atrybutów lecz ich numery porządkowe polecenia SELECT są wykonywane w kolejności ich wystąpienia (od góry do dołu)polecenia SELECT są wykonywane w kolejności ich wystąpienia (od góry do dołu) nawiasy umożliwiają zmianę domyślnej kolejności wykonywania łączonych operatorami zbiorowymi poleceń SELECTnawiasy umożliwiają zmianę domyślnej kolejności wykonywania łączonych operatorami zbiorowymi poleceń SELECT

37 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania 2-18.Znajdź etat, na którym zatrudniono pracownika w drugiej połowie 93r. oraz w drugiej połowie 94 r. select etat from pracownicy where zatrudniony between '01-JUL-93' and '31-DEC-93' intersect select etat from pracownicy where zatrudniony between '01-JUL-94' and '31-DEC-94';

38 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd Korzystając z operatorów zbiorowych, wyświetl zespoły niezatrudniające pracowników. select z.id_zesp, z.nazwa from pracownicy p, zespoly z where p.id_zesp(+)=z.id_zesp minus select z.id_zesp, z.nazwa from pracownicy p, zespoly z where p.id_zesp=z.id_zesp;

39 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Podzapytania podzapytanie jest poleceniem SELECT zagnieżdżonym w innym poleceniu SELECTpodzapytanie jest poleceniem SELECT zagnieżdżonym w innym poleceniu SELECT ogólny format zagnieżdżania zapytań:ogólny format zagnieżdżania zapytań: SELECT atrybut1, atrybut2,... FROM relacja WHERE atrybut operator (SELECT atrybut FROM relacja FROM relacja WHERE warunek); WHERE warunek); SELECT atrybut1, atrybut2,... FROM relacja WHERE atrybut operator (SELECT atrybut FROM relacja FROM relacja WHERE warunek); WHERE warunek); operator operator =, !=, <>, >, >=,, >, >=, <, <= IN IN ANY, ALL ANY, ALL

40 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Reguły zagnieżdżania podzapytań podzapytanie ograniczamy nawiasami i zagnieżdżamy po prawej stronie warunku zapytania zewnętrznego;podzapytanie ograniczamy nawiasami i zagnieżdżamy po prawej stronie warunku zapytania zewnętrznego; w podzapytaniu nie używamy klauzuli ORDER BY;w podzapytaniu nie używamy klauzuli ORDER BY; klauzula ORDER BY może wystąpić wyłącznie jako ostatnia klauzula najbardziej zewnętrznego zapytania;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, tj. zapytania wyższego poziomu zagnieżdżenia;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, tj. zapytania wyższego poziomu zagnieżdżenia; w podzapytaniu można używać operatorów zbiorowych;w podzapytaniu można używać operatorów zbiorowych; podzapytania są zawsze wykonywane w kolejności od najgłębiej zagnieżdżonego do najbardziej zewnętrznego.podzapytania są zawsze wykonywane w kolejności od najgłębiej zagnieżdżonego do najbardziej zewnętrznego.

41 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Podzapytania wyznaczające jedną krotkę wyznacz pracownika zarabiającego najmniejwyznacz pracownika zarabiającego najmniej SELECT nazwisko, etat, placa_pod FROM pracownicy WHERE placa_pod = (SELECT MIN(placa_pod) FROM pracownicy); FROM pracownicy); SELECT nazwisko, etat, placa_pod FROM pracownicy WHERE placa_pod = (SELECT MIN(placa_pod) FROM pracownicy); FROM pracownicy); wyznacz pracownika zarabiającego najmniej w swoim zespolewyznacz pracownika zarabiającego najmniej w swoim zespole SELECT nazwisko, etat, placa_pod FROM pracownicy WHERE (placa_pod, id_zesp) IN (SELECT MIN(placa_pod), id_zesp FROM pracownicy FROM pracownicy GROUP BY id_zesp); GROUP BY id_zesp); SELECT nazwisko, etat, placa_pod FROM pracownicy WHERE (placa_pod, id_zesp) IN (SELECT MIN(placa_pod), id_zesp FROM pracownicy FROM pracownicy GROUP BY id_zesp); GROUP BY id_zesp);

42 (c) 1999, Instytut Informatyki Politechniki Poznańskiej operator ANYoperator ANY Podzapytania wyznaczające wiele krotek cd. SELECT nazwisko, placa_pod, etat, id_zesp FROM pracownicy WHERE placa_pod > ANY (SELECT DISTINCT placa_pod FROM pracownicy FROM pracownicy WHERE id_zesp = 30); WHERE id_zesp = 30); SELECT nazwisko, placa_pod, etat, id_zesp FROM pracownicy WHERE placa_pod > ANY (SELECT DISTINCT placa_pod FROM pracownicy FROM pracownicy WHERE id_zesp = 30); WHERE id_zesp = 30); operator ALLoperator ALL SELECT nazwisko, placa_pod, etat, id_zesp FROM pracownicy WHERE placa_pod > ALL (SELECT DISTINCT placa_pod FROM pracownicy FROM pracownicy WHERE id_zesp = 30); WHERE id_zesp = 30); SELECT nazwisko, placa_pod, etat, id_zesp FROM pracownicy WHERE placa_pod > ALL (SELECT DISTINCT placa_pod FROM pracownicy FROM pracownicy WHERE id_zesp = 30); WHERE id_zesp = 30);

43 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Podzapytania w klauzuli HAVING wyświetl te zespoły, w których średnia płaca podstawowa jest większa niż średnia płaca w zespole trzydziestymwyświetl te zespoły, w których średnia płaca podstawowa jest większa niż średnia płaca w zespole trzydziestym SELECT id_zesp, AVG (placa_pod) FROM pracownicy HAVING AVG (placa_pod) > (SELECT AVG (placa_pod) FROM pracownicy WHERE id_zesp = 30) GROUP BY id_zesp; SELECT id_zesp, AVG (placa_pod) FROM pracownicy HAVING AVG (placa_pod) > (SELECT AVG (placa_pod) FROM pracownicy WHERE id_zesp = 30) GROUP BY id_zesp;

44 (c) 1999, Instytut Informatyki Politechniki Poznańskiej 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 ALGORYTMYwyświetlić nazwiska i płace pracowników, zarabiających więcej niż wynosi maksymalna płaca w zespole o nazwie ALGORYTMY SELECT nazwisko, placa_pod FROM pracownicy WHERE placa_pod > (SELECT MAX (placa_pod) FROM pracownicy FROM pracownicy WHERE id_zesp = WHERE id_zesp = (SELECT id_zesp FROM zespoly FROM zespoly WHERE nazwa ='ALGORYTMY')); WHERE nazwa ='ALGORYTMY')); SELECT nazwisko, placa_pod FROM pracownicy WHERE placa_pod > (SELECT MAX (placa_pod) FROM pracownicy FROM pracownicy WHERE id_zesp = WHERE id_zesp = (SELECT id_zesp FROM zespoly FROM zespoly WHERE nazwa ='ALGORYTMY')); WHERE nazwa ='ALGORYTMY'));

45 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania Wyświetl najkrócej pracujących pracowników każdego zespołu. Uszereguj wyniki zgodnie z kolejnością zatrudnienia. select id_zesp, nazwisko, zatrudniony from pracownicy where (id_zesp, zatrudniony) in (select id_zesp, max(zatrudniony) from pracownicy from pracownicy group by id_zesp) group by id_zesp) order by zatrudniony; 2-21.Wyświetl zespoły, które nie zatrudniają pracowników. select id_zesp from zespoly z where id_zesp not in (select distinct id_zesp from pracownicy); from pracownicy);

46 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Zadania cd Wyświetl identyfikator i nazwę zespołu wypłacającego swoim pracownikom najwięcej pieniędzy miesięcznie. select id_zesp, nazwa from zespoly where id_zesp= (select id_zesp from pracownicy (select id_zesp from pracownicy group by id_zesp group by id_zesp having sum(placa_pod)= having sum(placa_pod)= (select max(sum(placa_pod)) from pracownicy from pracownicy group by id_zesp) ); group by id_zesp) );

47 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Podzapytania skorelowane cechycechy –wykonywane dla każdej krotki przeglądanej przez zapytanie zewnętrzne –operują na wartościach atrybutów przekazanych przez zapytanie zewnętrzne przykład:przykład: –wyszukaj pracowników zarabiających więcej niż wynosi średnia pensja w ich zespole

48 (c) 1999, Instytut Informatyki Politechniki Poznańskiej Podzapytania skorelowane cd. nazwiskoplaca_pod LECH300 CZECH400 RUS PIAST id_zesp Pracownicy nazwiskoplaca_pod LECH300 CZECH400 RUS PIAST id_zesp P SELECT nazwisko, placa_pod, id_zesp SELECT nazwisko, placa_pod, id_zesp FROM pracownicy p FROM pracownicy p WHERE placa_pod > WHERE placa_pod > (SELECT AVG(placa_pod) FROM pracownicy (SELECT AVG(placa_pod) FROM pracownicy WHERE id_zesp = p.id_zesp); WHERE id_zesp = p.id_zesp); SELECT nazwisko, placa_pod, id_zesp SELECT nazwisko, placa_pod, id_zesp FROM pracownicy p FROM pracownicy p WHERE placa_pod > WHERE placa_pod > (SELECT AVG(placa_pod) FROM pracownicy (SELECT AVG(placa_pod) FROM pracownicy WHERE id_zesp = p.id_zesp); WHERE id_zesp = p.id_zesp);

49 (c) 1999, Instytut Informatyki Politechniki Poznańskiej operator EXISTSoperator EXISTS –umożliwia sprawdzenie czy podzapytanie wyznacza jakąkolwiek wartość operator NOT EXISTSoperator NOT EXISTS przykład: wyszukaj pracowników, którym służbowo podlegają inni pracownicyprzykład: wyszukaj pracowników, którym służbowo podlegają inni pracownicy Podzapytania skorelowane cd. select id_prac, nazwisko, etat, id_zesp from pracownicy p where exists (select id_prac from pracownicy from pracownicy where id_szefa = p.id_prac); where id_szefa = p.id_prac); select id_prac, nazwisko, etat, id_zesp from pracownicy p where exists (select id_prac from pracownicy from pracownicy where id_szefa = p.id_prac); where id_szefa = p.id_prac);


Pobierz ppt "(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL."

Podobne prezentacje


Reklamy Google