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
Plik z chomika:
uchym
Inne pliki z tego folderu:
PL_SQL 5.pdf
(303 KB)
Relacyjny model danych.pdf
(356 KB)
Relacyjny model danych 1.pdf
(416 KB)
Relacyjny model danych 4.pdf
(253 KB)
SBD 13.pdf
(324 KB)
Inne foldery tego chomika:
Zgłoś jeśli
naruszono regulamin