Prezentacja do cwiczenia 9 mssql

background image

1

1

Łączenie tabel i

Łączenie tabel i

podzapytania.

podzapytania.

(Join, Union

(Join, Union

, select

, select

)

)

Prezentacja do ćwiczenia 9

Prezentacja do ćwiczenia 9

Materiały wykorzystane w przykładach:

Materiały wykorzystane w przykładach:

Materiały pomocnicze do ćwiczeń laboratoryjnych\Ćwiczenie 9

Materiały pomocnicze do ćwiczeń laboratoryjnych\Ćwiczenie 9

background image

2

2

Zakres ćwiczeń

Prezentacja przybliży zagadnienia związane z tworzeniem zapytań łączących

Prezentacja przybliży zagadnienia związane z tworzeniem zapytań łączących

kilka tablic w celu uzyskania jednego wynikowego zbioru danych.

kilka tablic w celu uzyskania jednego wynikowego zbioru danych.

Poruszono problem zagnieżdżonych instrukcji SELECT i stosowania instrukcji

Poruszono problem zagnieżdżonych instrukcji SELECT i stosowania instrukcji

SELECT jako uzupełniające kryterium wyszukiwania.

SELECT jako uzupełniające kryterium wyszukiwania.

W celu utrwalenia wiedzy prezentację zakończy ćwiczenie do

W celu utrwalenia wiedzy prezentację zakończy ćwiczenie do

samodzielnego

samodzielnego

wykonania.

wykonania.

background image

3

3

Dane w relacyjnych bazach danych podzielone są na tabele. Proces
normalizacji bazy danych również niesie za sobą konieczność
dzielenia tablic. Prędzej czy później zaistnieje potrzeba łączenia
tablic, w celu uzyskania interesującej nas tabeli wynikowej.

Proces taki nazywamy złączeniem (po anglelsku join). Ze
względu na sposób łączenia dzieli się operacje złączeń na trzy grupy:

• złączenia wewnętrzne
• złączenia zewnętrzne
• złączenia bezwarunkowe (samozłączenia)

Podsumowując:

Złączenia umożliwiają łączenie danych z różnych tabel w pojedynczy
wiersz wynikowy.

Złączenia tabel w języku SQL

background image

4

4

Podstawowe pytanie: jak łączone są ze sobą informacje z dwóch tabel?

Złączenia bezwarunkowe = CROSS JOIN

Tabele mogą różnić się od siebie wszystkimi cechami, nie

narzucanymi przez model relacyjny, a więc: ilością wierszy, ilością

kolumn, oraz ich typami. Kluczem jest pojęcie znane z algebry iloczyn

kartezjański.
Operacje łączenia tabel zawierają w trakcie ich realizacji wstępny etap

utworzenia nowej tabeli, będącej iloczynem kartezjańskim wierszy z

łączonych tabel.

Najprostsze zapytanie, pozwalające się o tym przekonać, ma postać:

SELECT * FROM tabela1, tabela2

Składnia powyższego zapytania oparta jest o standard języka SQL-89.

Nowsza postać róznoważnego zapytania, w standardzie oznaczanym

jako SQL-92, przedstawia się następująco:

SELECT * FROM tabela1 CROSS JOIN tabela2

Złączenia bezwarunkowe

background image

5

5

Złączenie to generuje pełny iloczyn kartezjański obu zbiorów. Każdy

Złączenie to generuje pełny iloczyn kartezjański obu zbiorów. Każdy

wiersz z 1

wiersz z 1

zbioru tworzy wiersz wynikowy z każdym wierszem zbioru .

zbioru tworzy wiersz wynikowy z każdym wierszem zbioru .

Przykład :

Przykład :

Jeżeli 1 zbiór zawiera 10 wierszy, a drugi zawiera 100 wierszy to zbiór

Jeżeli 1 zbiór zawiera 10 wierszy, a drugi zawiera 100 wierszy to zbiór

wynikowy ma 1000 wierszy.

wynikowy ma 1000 wierszy.

Złączenia bezwarunkowe
cd.

background image

6

6

Złączenia wewnętrzne

Złączenia wewnętrzne odnoszą jeden wiersz w tabeli do jednego

lub większej liczby wierszy w innej tabeli. Każdy wiersz wyniku

złączenia wewnętrznego stanowi połączenie wartości z dwóch

związanych ze sobą wierszy.

Składnia zapytania wykorzystującego złączenie wewnętrzne

(INNER JOIN) oparta o standard języka SQL-89 (obecnie używany

jest standard SQL-92) wygląda następująco:

SELECT t1.kolumna1, t2.kolumna2
FROM tabela 1 as t1 INNER JOIN tabela 2 as t2
ON t1.kolumna1 = t2.kolumna2;

Słowo kluczowe INNER JOIN między nazwami tabeli wskazuje, że

złączenie powinno być złączeniem wewnętrznym. Klauzula ON

definiuje natomiast warunek złączenia lub warunek, który musi

oddziaływać na dwa wiersze, aby można było je uznać za

połączone.

Kolejność występowania nazw tabel w złączeniu wewnętrznym nie

ma znaczenia. Słowo INNER jest opcjonalne, te samo zapytanie

bez słowa kluczowego INNER zwróci taki sam rezultat.

background image

7

7

W zapytaniach wykorzystujących złączenia można zastosować klauzulę
WHERE zawierającą dodatkowe kryteria wyszukiwania. W tym

przypadku

zapytanie będzie miało następującą postać:

SELECT t1.kolumna1, t2.kolumna2
FROM tabela 1 as t1 INNER JOIN tabela 2 as t2
ON t1.kolumna1 = t2.kolumna2;
WHERE t1.id_wiersza = 1;

Złączenia wewnętrzne

Złączenia wewnętrzne

background image

8

8

Złączać możemy kilka tablic, zapytanie będzie w tym przypadku

następującej

postaci:

SELECT t1.kolumna1, t2.kolumna2
FROM tabela 1 as t1 INNER JOIN tabela 2 as t2
ON t1.kolumna1 = t2.kolumna2;
INNER JOIN tabela 3 as t3
ON t2.id_wiersza = t3.id_wiersza;

Złączenia takie są realizowane w kolejności od lewej do prawej strony

instrukcji

SQL.
Najpierw tworzy się zbiór wynikowy ze złączenia tablicy 1 oraz tablicy 2 a

on z

kolei łączy się z tablicą 3 dając ostateczny zbiór wynikowy.

Złączenia wewnętrzne

Złączenia wewnętrzne

background image

9

9

Przykład 1:

Przykład 1:

Wyświetlamy wypożyczenia pojazdów dla klienta o nazwisku Uler.

Wyświetlamy wypożyczenia pojazdów dla klienta o nazwisku Uler.

SELECT

SELECT

imie,nazwisko,marka,model

imie,nazwisko,marka,model

FROM

FROM

pojazdy p

pojazdy p

INNER JOIN

INNER JOIN

(klient k

(klient k

INNER JOIN

INNER JOIN

wypozyczenie w

wypozyczenie w

ON

ON

k.id_klienta =

k.id_klienta =

w.id_klienta)

w.id_klienta)

ON

ON

p.id_pojazdy = w.id_pojazdy

p.id_pojazdy = w.id_pojazdy

WHERE

WHERE

nazwisko='Uler';

nazwisko='Uler';

Złączenia wewnętrzne -
przykład

Rysunek 1

background image

10

10

Jak widać z rysunku 1, aby uzyskać interesujący nas rezultat należy wyświetlić
informacje z 4 tablic a co za tym idzie dokonać ich złączenia.

Dla przykładu w tabeli wypożyczenia znajduje się tylko pole id_klienta a brakuje
niektórych informacji np: imienia, nazwiska. Po informacje te należy sięgnąć do
tabeli „klient” dokonując złączenia tablic „wypożyczenia” oraz „klient” złączenie
dokonujemy za pomocą pola „id_klienta” które jest wspólne dla obu złączanych
tabel.

Złączenia wewnętrzne – przykład cd.

background image

11

11

Złączenie zewnętrzne jest typem złączenia, w którym wiersz

Złączenie zewnętrzne jest typem złączenia, w którym wiersz

zbioru wynikowego nie musi zawierać wierszy pochodzących z

zbioru wynikowego nie musi zawierać wierszy pochodzących z

obydwu tabel objętych złączeniem. Jedna lub dwie tabele mają

obydwu tabel objętych złączeniem. Jedna lub dwie tabele mają

charakter opcjonalny. Ten typ złączenia należy stosować w

charakter opcjonalny. Ten typ złączenia należy stosować w

przypadku gdy złączenie powinno zostać wykonane, jeśli tylko jest

przypadku gdy złączenie powinno zostać wykonane, jeśli tylko jest

możliwe. Bez względu na to czy dokonano złączenia czy nie,

możliwe. Bez względu na to czy dokonano złączenia czy nie,

muszą zostać zwrócone pewne wiersze.

muszą zostać zwrócone pewne wiersze.

Złączenia zewnętrzne dzielimy na:

Złączenia zewnętrzne dzielimy na:

lewostronne

lewostronne

prawostronna

prawostronna

pełne złączenia

pełne złączenia

Złączenia zewnętrzne

Złączenia zewnętrzne

background image

12

12

Lewostronne złączenia zewnętrzne są wykorzystywane w

Lewostronne złączenia zewnętrzne są wykorzystywane w

przypadkach, gdy w wyniku muszą zostać zwrócone wszystkie

przypadkach, gdy w wyniku muszą zostać zwrócone wszystkie

wiersze z jednej tabeli niezależnie od tego, czy w drugiej tabeli

wiersze z jednej tabeli niezależnie od tego, czy w drugiej tabeli

znajdują się jakiekolwiek odpowiadające im wiersze.

znajdują się jakiekolwiek odpowiadające im wiersze.

Przykładem może być chęć wyświetlenia klientów i ich

Przykładem może być chęć wyświetlenia klientów i ich

wypożyczeń, którzy nie koniecznie muszą posiadać w danym

wypożyczeń, którzy nie koniecznie muszą posiadać w danym

czasie jakiekolwiek wypożyczenia.

czasie jakiekolwiek wypożyczenia.

Lewostronne złączenia

Lewostronne złączenia

zewnętrzne

zewnętrzne

background image

13

13

Przykład 2:

Przykład 2:

Wyświetlamy klientów którzy na wypożyczenie pojazdów wydali

Wyświetlamy klientów którzy na wypożyczenie pojazdów wydali

kwotę od 100 do 500 zł.

kwotę od 100 do 500 zł.

Lewostronne złączenia

Lewostronne złączenia

zewnętrzne

zewnętrzne

Rysunek 2

SELECT k.imie, k.nazwisko, w.cena
FROM klient AS k
LEFT JOIN wypozyczenie AS w
ON k.id_klienta = w.id_klienta
WHERE w.cena>100 And w.cena<500;

background image

14

14

Znaczenie prawostronnego złączenia zewnętrznego jest niemal identyczne jak i lewostronnego złączenia

Znaczenie prawostronnego złączenia zewnętrznego jest niemal identyczne jak i lewostronnego złączenia

zewnętrznego. Jedyna istotna różnica na umiejscowieniu tablicy z wymaganymi wierszami po prawej

zewnętrznego. Jedyna istotna różnica na umiejscowieniu tablicy z wymaganymi wierszami po prawej

stronie instrukcji złączenia.

stronie instrukcji złączenia.

Przykład 3:

Przykład 3:

--SELECT k.id_klienta, k.imie, k.nazwisko, w.id_wypozyczenie

--SELECT k.id_klienta, k.imie, k.nazwisko, w.id_wypozyczenie

--FROM wypozyczenie as w RIGHT OUTER JOIN klient as k

--FROM wypozyczenie as w RIGHT OUTER JOIN klient as k

--ON k.id_klienta = w.id_klienta

--ON k.id_klienta = w.id_klienta

--WHERE nazwisko ='Uler' ;

--WHERE nazwisko ='Uler' ;

SELECT k.id_klienta, k.imie, k.nazwisko, w.id_wypozyczenie

SELECT k.id_klienta, k.imie, k.nazwisko, w.id_wypozyczenie

FROM klient as k

FROM klient as k

LEFT OUTER JOIN wypozyczenie as w ON k.id_klienta = w.id_klienta

LEFT OUTER JOIN wypozyczenie as w ON k.id_klienta = w.id_klienta

WHERE nazwisko ='Uler' ;

WHERE nazwisko ='Uler' ;

Prawostronne złączenia

Prawostronne złączenia

zewnętrzne

zewnętrzne

background image

15

15

Oba powyższe zapytania z zwracają ten sam wynik (są równoważne).

Oba powyższe zapytania z zwracają ten sam wynik (są równoważne).

Aby się przekonać wykonaj zapytania zawarte w pliku Przykład 3.sql).

Aby się przekonać wykonaj zapytania zawarte w pliku Przykład 3.sql).

W celu uniknięcia niejasności zaleca się stosowane złączeń

W celu uniknięcia niejasności zaleca się stosowane złączeń

lewostronnych.

lewostronnych.

Rysunek 3

Prawostronne złączenia

Prawostronne złączenia

zewnętrzne cd.

zewnętrzne cd.

Zapytanie z przykładu 3 zwraca następujący zbiór wynikowy:

background image

16

16

UNION

UNION

Słowo kluczowe UNION służy do łączenia wyników wykonania

Słowo kluczowe UNION służy do łączenia wyników wykonania

dwóch instrukcji SELECT w jeden zbiór wynikowy. Ze zbioru tego

dwóch instrukcji SELECT w jeden zbiór wynikowy. Ze zbioru tego

eliminowane są wszystkie duplikaty wierszy. W celu zachowania

eliminowane są wszystkie duplikaty wierszy. W celu zachowania

zduplikowanych wierszy stosujemy słowo kluczowe UNION ALL.

zduplikowanych wierszy stosujemy słowo kluczowe UNION ALL.

Przykład 4:

Przykład 4:

Rysunek 4

Pierwsze zapytanie pobiera
klientów którzy mają
jakiekolwiek wypożyczenia
drugie zapytanie pobiera
wszystkich klientów
Słowo kluczowe UNION łączy
oba zbiory wynikowe. Słowo
kluczowe DISTINCT jest tu
zbyteczne ponieważ UNION
i tak odrzuci powtarzające
się wyniki.

SELECT DISTINCT k.imie, k.nazwisko,
k.nr_tel
FROM klient as k
INNER JOIN wypozyczenie as w
ON k.id_klienta = w.id_klienta
UNION
SELECT k.imie, k.nazwisko, k.nr_tel
FROM klient as k

background image

17

17

SELECT w SELECT

SELECT w SELECT

Powyższe zapytanie wyświetla klientów, którzy nie mają żadnych

Powyższe zapytanie wyświetla klientów, którzy nie mają żadnych

wypożyczeń a jednak mimo to są w tabeli klient.

wypożyczeń a jednak mimo to są w tabeli klient.

Przykład 5:

Zastosowanie zagnieżdżonej instrukcji SELECT (SELECT w SELECT)
Pozwala np. na eliminacje pewnego zbioru ze zbioru wynikowego.

Rysunek 5

SELECT imie, nazwisko
FROM klient
WHERE nazwisko NOT IN
(SELECT DISTINCT k.nazwisko
FROM klient as k, wypozyczenie as w
WHERE k.id_klienta = w.id_klienta);

background image

18

18

Ćwiczenia

Ćwiczenia

1. Wyświetl wszystkich pracowników, którzy wypożyczyli

1. Wyświetl wszystkich pracowników, którzy wypożyczyli

skutery (s – skuter w tabeli pojazdy) marki Honda

skutery (s – skuter w tabeli pojazdy) marki Honda

(wykorzystaj inner join)

(wykorzystaj inner join)

2. Wyświetl wszystkie motocykle (m – motocykl w tabeli

2. Wyświetl wszystkie motocykle (m – motocykl w tabeli

pojazdy) o pojemności różnej od 650 cm3 (wykorzystaj

pojazdy) o pojemności różnej od 650 cm3 (wykorzystaj

zagnieżdżoną instrukcję select)

zagnieżdżoną instrukcję select)


Document Outline


Wyszukiwarka

Podobne podstrony:
Prezentacja do cwiczenia 6 mssql
Prezentacja do cwiczenia 5 mssql
Prezentacja do cwiczenia 7 mssql
Prezentacja do cwiczenia 4 mssql
Prezentacja do cwiczenia 8 mssql
Prezentacja do cwiczenia 3 mssql
Prezentacja do cwiczenia 10 mssql
Prezentacja do cwiczenia 11 mssql
Prezentacja do cwiczenia 2
Enzymologia materiały do ćwiczeń
Higiena Przewodnik do cwiczen
Materiały do ćwiczeń z geologii
Instrukcja do cwiczenia 1
GEOGRAFIA NA CZASIE 3 ODPOWIEDZI DO ĆWICZEŃ
Instrukcje do ćwiczeń 2013
Materialy pomocnicze do cwiczen Statystyka cz I
parazytologia lekarska przewodnik do ćwiczeń UM Poznań
ściąga do ćwiczennia XII, Szkoła, penek, Przedmioty, Urządzenia nawigacyjne, Zaliczenie, egzamin, Ś

więcej podobnych podstron