Lekcja 3.



Łączenie wielu tabel w sql (ORACLE)

Pierwszym sposobem na połączenie wielu tabel bazy danych jest JOIN (t-sql inner join).

SELECT dzial, osoba, wiek
FROM
t_osobowe join t_dzial on t_osobowe.id_os = t_dzial.id_od

JOIN w SQL pozwala na wybranie z obu tabel bazy danych tylko tych rekordów dla których sprzężenie jest sobie równe (t_osobowe.id_os = t_dzial.id_od) czyli id osób występują w obu tabelach

SELECT dzial, osoba, wiek
FROM
t_osobowe left join t_dzial on t_osobowe.id_os = t_dzial.id_od

W przypadku left join wybrane zostają wszystkie rekordy dla tabeli t_osobowe i tylko te rekordy z t_dzial, gdzie występuje id osoby. Wynik może wyglądać tak:

id_osid_od
11
22
3null

Oznacza to że w tabeli t_dzial nie występuje osoba o id =3

SELECT dzial, osoba, wiek
FROM
t_osobowe right join t_dzial on t_osobowe.id_os = t_dzial.id_od

Działa taks samo jak LEFT JOIN tylko w przecinym kierunku.

Warto wspomnieć, że JOIN w ORACLE jest dość młodą konstrukcją i w starszych wersjach nie było można jej użyć ale nie będziemy tu wracać do historii.

W przeciwieństwie do MSSQL ORACLE daje bardzo wygodną możliwość, łączenie po polach o tej samej nazwie za pomocą USING.

SELECT osoba, wiek, adres, miasto
FROM
t_osobowe join t_dane_adresowe USING(id_os)

oraz:

SELECT osoba, wiek, adres, miasto
FROM
t_osobowe NATURAL JOIN t_dane_adresowe

Natural join w sql pozwala na połączenie po wszystkich polach w obu tabelach gdzie są takie same nazwy.

Inne sposoby łączenia danych w sql to np po przez zagnieżdżanie zapytań

SELECT osoba, wiek, adres, miasto
FROM
t_osobowe NATURAL JOIN (
SELECT adres, miasto FROM t_dane_adresowe ) aaa

Możemy użyć również w sql w operatorze IN wyniku zapytania

SELECT osoba, wiek, adres, miasto
FROM
t_osobowe WHERE id_os IN (
SELECT id_os t_dane_adresowe )

Powyższy przykład pozwala sprawdzić czy w bazie danych w tabeli t_dane_adresowe są wymienione te same id działa podobnie LEFT JOIN.

Dla "=" możemy wskazać wynik skalarny zapytania np:

SELECT osoba, wiek, adres, miasto
FROM
t_osobowe WHERE id_os = (
SELECT id_os t_dane_adresowe WHERE nazwisko = 'Nowak' )

Złączenia nierównościowe

Złączenia nierównościowe (non-equi-join) nie są oparte o relację równości. Związek pomiędzy wierszami dwóch tabel określa się poprzez zastosowanie innego operatora niż równość.

SELECT imie,dochod,stanowisko
FROM t_dane E, t_dochd S
WHERE dochod BETWEEN 200 AND 300

Operatory zbiorowe

Operator UNION

Operator zbiorowy UNION jest używany do tworzenia sumy dwóch zbiorów wierszy. Warunkiem jest by oba zbiory miały tą samą ilość kolumn

SELECT 'zbior 1'
UNION
SELECT 'zbior 2'

Operacja UNION powoduje automatyczną eliminację duplikatów. Aby otrzymać w wyniku wszystkie wiersze z obu tabel należy użyć operatora UNION ALL.

Operator INTERSECT

Operator INTERSECT powoduje wybranie wierszy wspólnych dla wyników obu zapytań SELECT.

Operator MINUS

Operator zbiorowy MINUS powoduje wybranie wierszy zwracanych przez pierwszy SELECT, nie zwracanych przez SELECT drugi.

SQL-KURSY.pl poleca:

Rozpocznij kolonizacje egzoplanety

Książki
ksikaksikaksikaksikaksika

Copyright 2010-2011 Mariusz Kujawski adres mariuszhk@op.pl

obob ob

Valid HTML 4.01 Transitional