SQL - 2.pdf

(419 KB) Pobierz
7.04.2015
SQL ­ 2
Wykład 2
SQL ­ instrukcja SELECT
 
Streszczenie
Będziemy kontynuować studiowanie języka SQL. Mianowicie, dokończymy prezentację
zapytań rozpoczętą w wykładzie 1. Rozważymy kolejno następujące konstrukcje:
1. 
2. 
3. 
4. 
operatory algebraiczne na zapytaniach,
operatory złączenia,
zapytania sumaryczne i grupujące,
podzapytania,
5.  operatory złączenia zewnętrznego.
 
2.1 Operatory algebraiczne na zapytaniach
Do określenia danych, które chcemy wydobyć z bazy danych, można użyć kilku
zapytań połączonych ze sobą operatorami algebraicznymi zgodnie ze składnią:
 
instrukcja_SELECT operator instrukcja_SELECT
 
Są trzy takie operatory:
1. UNION, UNION ALL ­ sumowanie zbiorów wyników (odpowiednio, z eliminacją bądź
nie ­ powtórzeń wierszy),
2. INTERSECT ­ przecięcie zbiorów wyników,
3. EXCEPT ­ różnica zbiorów wyników (w Oracle MINUS).
Przykład
 
Wypisz numery działów, w których w danej chwili nie są zatrudnieni żadni pracownicy.
Naturalne jest użycie operatora MINUS:
SELECT Dept.Deptno FROM Dept
http://edu.pjwstk.edu.pl/wyklady/sbd/scb/w2.htm
1/31
7.04.2015
SQL ­ 2
MINUS
SELECT Emp.Deptno FROM Emp;
    DEPTNO
‐‐‐‐‐‐‐‐‐‐
        40
Przykład
 
Wypisz nazwiska pracowników, zamieszczając przy pracownikach działu numer 10
gwiazdkę.
Naturalne jest użycie operatora UNION:
SELECT Emp.Ename||'*' FROM Emp
WHERE Emp.Deptno = 10
UNION
SELECT Emp.Ename FROM Emp
WHERE Emp.Deptno <> 10
ORDER BY 1;
EMP.ENAME||'*'
‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ADAMS
ALLEN
BLAKE
CLARK*
FORD
JAMES
JONES
KING*
MARTIN
MILLER*
SCOTT
SMITH
TURNER
WARD
Aby móc zastosować operator algebraiczny, liczba i typy kolumn w składowych
zapytaniach muszą być takie same.
Według Standardu, tabela wynikowa nie posiada nazw kolumn. Natomiast Oracle, przy
wypisywaniu zawartości tabeli wynikowej, jako etykiet kolumn używa wyrażeń z
pierwszej instrukcji SELECT.
http://edu.pjwstk.edu.pl/wyklady/sbd/scb/w2.htm
2/31
7.04.2015
SQL ­ 2
Klauzula ORDER BY może wystąpić tylko na końcu całego zapytania. W klauzuli ORDER
BY do wynikowych kolumn odwołujemy się używając ich kolejnych numerów 1, 2,....
 
2.2 Zapytania dotyczące kilku tabel (złączenia tabel)
Informacja wypisywana z bazy danych może dotyczyć kilku tabel. Dane z kilku tabel
są na ogół złączane korzystając z naturalnych powiązań między wierszami tabel
opartych na związkach klucz obcy ­> klucz główny. W takich przypadkach najczęściej
klucz obcy i klucz główny mają tę samą nazwę. W celu ich odróżnienia konieczne jest
użycie konstrukcji poprzedzania nazwy kolumny nazwą tabeli np. Emp.Deptno ­ czyli
kwalifikowania nazwy kolumny nazwą tabeli.
Przykład
 
Wypisz wszystkich pracowników i dla każdego z nich podaj nazwę jego działu.
SELECT Emp.Empno, Emp.Ename, Dept.Dname
FROM Emp, Dept
WHERE Emp.Deptno= Dept.Deptno;
     EMPNO ENAME      DNAME
‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐
      7369 SMITH      RESEARCH
      7499 ALLEN      SALES
      7521 WARD       SALES
      7566 JONES      RESEARCH
      7654 MARTIN     SALES
      7698 BLAKE      SALES
      7782 CLARK      ACCOUNTING
      7788 SCOTT      RESEARCH
      7839 KING       ACCOUNTING
      7844 TURNER     SALES
      7876 ADAMS      RESEARCH
      7900 JAMES      SALES
      7902 FORD       RESEARCH
      7934 MILLER     ACCOUNTING
Wiersz każdego pracownika zostaje złączony z dokładnie jednym, odpowiadającym mu
przez wartość Deptno, wierszem z tabeli Dept.
Predykat 
Emp.Deptno=Dept.Deptno
 występujący w powyższej instrukcji SELECT nazywa się
http://edu.pjwstk.edu.pl/wyklady/sbd/scb/w2.htm
3/31
7.04.2015
SQL ­ 2
predykatem złączenia, w odróżnieniu od innych predykatów nazywanych predykatami
ograniczającymi np.
   Sal>1000
lub
   Loc='Warszawa'
Zwróćmy uwagę na istotność podania warunku złączenia. Gdybyśmy go opuścili,
otrzymalibyśmy zbiór wszystkich możliwych kombinacji wierszy ze złączanych tabel –
nie tylko tych, które są ze sobą powiązane wspólną cechą, taką jak numer działu w
powyższym zapytaniu. Wynik takiego pełnego połączenia tabel nosi nazwę iloczynu
kartezjańskiego tych tabel.
 
Operatory złączenia
W Standardzie SQL jak i w Oracle od wersji 9i warunek złączenia można także zapisać
w klauzuli FROM jako część jednego z operatorów  złączenia i to w różny sposób. Dla
powyższego zapytania są możliwe następujące zapisy:
SELECT Emp.Empno, Emp.Ename, Dept.Dname
FROM Emp JOIN Dept ON Emp.Deptno = Dept.Deptno;
(tej postaci z operatorem złączenia JOIN będziemy używać zazwyczaj od tej pory)
albo gdy nazwy kolumn złączenia są takie same
SELECT Emp.Empno, Emp.Ename, Dname
FROM Emp JOIN Dept USING (Deptno);
albo jeszcze krócej
SELECT Empno, Ename, Dname
FROM Emp NATURAL JOIN Dept;
W ostatnim przypadku za kolumy złączenia przyjmuje się wszystkie wspólne, tzn.
mające takie same nazwy, kolumny.
 
Samozłączenia
Korzystając ze związku klucz obcy ­> klucz główny można dokonać złączenia tabeli z
nią samą. Wówczas ta sama tabela występuje w dwóch (lub więcej) rolach
wskazywanych przez aliasy dołączane do nazwy tabeli w klauzuli FROM.
http://edu.pjwstk.edu.pl/wyklady/sbd/scb/w2.htm
4/31
7.04.2015
SQL ­ 2
Przykład
 
Wypisz nazwiska wszystkich pracowników i nazwiska ich kierowników.
SELECT Prac.Ename, Kier.Ename AS Mgr
FROM Emp Prac JOIN Emp Kier ON Prac.Mgr = Kier.Empno;
ENAME      MGR
‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐
SMITH      FORD
ALLEN      BLAKE
WARD       BLAKE
JONES      KING
MARTIN     BLAKE
BLAKE      KING
CLARK      KING
SCOTT      JONES
TURNER     BLAKE
ADAMS      SCOTT
JAMES      BLAKE
FORD       JONES
MILLER     CLARK
Alias Prac reprezentuje tu wiersz pracownika, a alias Kier wiersz jego kierownika –
zapewnienie zachodzenia związku między nimi uzyskuje się dzięki warunkowi, który
ma postać równości identyfikatorów:
Prac.Mgr = Kier.Empno
Dzięki temu, wiersz z nazwiskiem pracownika zostaje złączony z dokładnie jednym
wierszem pochodzącym z tej samej tabeli – mianowicie wierszem z nazwiskiem jego
kierownika, określonym przez identyfikator Prac.Mgr.
Najbardziej naturalnym rodzajem złączenia jest złączenie przez związek klucz obcy ­>
klucz główny. Jednak w ogólności warunek złączenia dwóch (lub więcej) tabel może
być zupełnie dowolny. W przypadku naszej przykładowej bazy danych jest jeszcze
jedno złączenie mające naturalny charakter, które przedstawimy w następującym
zadaniu.
Przykład
 
http://edu.pjwstk.edu.pl/wyklady/sbd/scb/w2.htm
5/31
Zgłoś jeśli naruszono regulamin