• Nie Znaleziono Wyników

2 Baza w SQL – złączenia - powtórzenie

N/A
N/A
Protected

Academic year: 2021

Share "2 Baza w SQL – złączenia - powtórzenie"

Copied!
4
0
0

Pełen tekst

(1)

2 Baza w SQL – złączenia - powtórzenie

1. Zaprojektuj bazę danych Autorzy. Pamiętaj o kodowaniu polskich znaków.

2. Zaprojektuj tabele: Autorzy i Ksiazki. Pamiętaj o zdefiniowaniu kluczy podstawowych i obcych.

Tabela Autorzy Tabela Ksiazki

3. Uzupełnij tabele danymi.

4. Zrzuty tabel i zapytań umieść w pliku Worda.

5. Pełne złączenie tabel:

 Utwórz zapytanie wybierające dane z tabel Autorzy i Ksiazki z następujących kolumn:

tytul, imie, nazwisko.

 SELECT Ksiazki.tytul, Autorzy. imie, Autorzy.nazwisko FROM Autorzy, Ksiazki;

Ponieważ nazwy pobieranych kolumn z obu tabel nie powtarzają się, można też zastosować formułę skróconą:

 SELECT tytul, imie, nazwisko FROM Autorzy, Ksiazki;

Serwer wykonał tzw. pełne złączenie obu tabel w którym każdy wiersz z tabeli Ksiazki został połączony z każdym wierszem tabeli Autorzy (iloczyn kartezjański obu tabel).

Zdecydowanie bardziej interesująca byłaby lista wszystkich książek wraz z imionami i nazwiskami ich autorów. W związku z tym do zapytania należy dodać warunek wiążący autorów i napisane przez nich książki.

(2)

6. Powiązanie łączonych tabel:

 Utwórz zapytanie wybierające dane z tabel Autorzy i Ksiazki wiążące książki z ich autorami. W warunku WHERE zapisz zachodzące powiązanie (id z tabeli Autorzy i autorId z tabeli Ksiazki).

Jeżeli w zapytaniu konieczne jest określanie tabel, z których pochodzą pobierane kolumny, czyli zapytanie powinno mieć analogiczną składnię do instrukcji przedstawionej w pkt.4, zamiast nazw pełnych często stosuje się aliasy, nierzadko jedno- lub dwuliterowe. Pozwala to na znaczne skrócenie zapisu, na przykład zamiast pisać Ksiazki.tytul, wystarczy k.tytul.

7. Aliasy zamiast pełnych nazw tabel.

 Utwórz zapytanie z pkt.5 w taki sposób, aby przy każdej kolumnie znajdowało się określenie, z której tabeli ona pochodzi. Zastosuj możliwie skróconą wersję zapisu.

SELECT k.tytul, a. imie, a.nazwisko FROM Ksiazki AS k, Autorzy As a WHERE k.autorId = a.id;

Ponieważ słowo AS jest opcjonalne, można też użyć wersji jeszcze bardziej skondensowanej:

SELECT k.tytul, a. imie, a.nazwisko FROM Ksiazki k, Autorzy a WHERE k.autorId = a.id;

Należy przy tym zwrócić uwagę, że aliasy nazw tabel zostały użyte również w warunku klauzuli WHERE.

8. Złączenie typu INNER JOIN. Jest to połączenie danych z dwóch tabel będące odpowiednikiem instrukcji opisanej w punkcie 4. Konstrukcja zapytania SELECT ze złączeniem INNER JOIN będzie miała postać:

SELECT kolumna1, kolumna2, … kolumnaN FROM tabela1 [INNER] JOIN tabela2 [ON warunek]

Jeżeli pobierane są kolumny o takich samych nazwach, to konieczne jest dodatkowe określenie tabel, z których pochodzą; można stosować aliasy nazw tabel (zgodnie z opisem w pkt.7).

(3)

Aby zatem uzyskać pełne złączenie tabel Autorzy i Książki, zawierające kolumny tytul, imie, nazwisko można zastosować jedną z instrukcji:

SELECT tytul, imie, nazwisko FROM Ksiazki JOIN Autorzy;

SELECT tytul, imie, nazwisko FROM Ksiazki INNER JOIN Autorzy;

SELECT Ksiazki.tytul, Autorzy. imie, Autorzy.nazwisko FROM Ksiazki INNER JOIN Autorzy;

SELECT k.tytul, a. imie, a.nazwisko FROM Ksiazki k INNER JOIN Autorzy a;

Są to odpowiedniki przypomnianej wcześniej instrukcji:

SELECT tytul, imie, nazwisko FROM Autorzy, Ksiazki;

We wszystkich wymienionych przypadkach można również zastosować dodatkowe wyrażenie określające warunki złączenia występujące po klauzuli ON.

9. Użyj złączenia typu INNER JOIN do wyświetlenia danych z tabel Ksiazki i Autorzy. Zastosuj klauzulę ON z warunkiem łączącym książki i autorów.

10. Złączenie typu LEFT JOIN pozwala na uwzględnienie w wyniku danych, które nie mają swoich odpowiedników w złączanych tabelach. Oznacza to, że jeżeli w pierwszej tabeli znajdują się wiersze, które nie mają swoich odpowiedników w drugiej tabeli, i tak zostaną uwzględnione w złączeniu, a w pustych kolumnach zostaną wpisane wartości NULL. Wróćmy do przykładu z książkami i autorami. Może się zdarzyć, że w tabeli Ksiazki znajdą się dane książki, której nie będzie wpisu w tabeli Autorzy. Będzie to błąd polegający na niespójności danych w bazie, ale jest to całkiem realna sytuacja. Uzupełnijmy więc tabelę Ksiazki. Należy dodać książkę o identyfikatorze 10, tytule „Klin”, identyfikatorze autora 4 i numerze ISBN 8385103201. Tabela Autorzy niech pozostanie bez zmian. Książka o identyfikatorze 10 ma autora o identyfikatorze 4.

Taki identyfikator nie istnieje jednak w tabeli Autorzy.

Zastosuj złączenie LEFT JOIN, aby wyświetlić dane książek i ich autorów, tak aby w wyniku pojawiły się również tytuły, dla których nie ma wpisów w tabeli Autorzy.

(4)

Wyszukiwanie niespójnych danych.

Wyświetl dane takich książek, dla których brakuje wpisów w tabeli Autorzy. Aby wykonać to ćwiczenie należy użyć zapytania o konstrukcji podobnej do tej z pkt.9, ale z dodanym warunkiem w klauzuli WHERE (Autorzy.id IS NULL). W zapytaniu wykorzystany został operator IS NULL wskazujący, czy mamy do czynienia z wartością pustą NULL.

11. Złączenie typu RIGHT JOIN działa analogicznie jak LEFT JOIN, z tą różnicą, że w tabeli wynikowej uwzględniane są wiersze z drugiej tabeli, które nie mają swoich odpowiedników w pierwszej tabeli. Załóżmy, że w tabeli Autorzy znajdzie się wpis zawierający w polu id identyfikator, który nie występuje w tabeli Ksiązki. Uzupełnijmy tabelę Autorzy. Należy dodać autora o identyfikatorze 5, imieniu „Terry” i nazwisku „Pratchett”. Tabela Ksiazki niech pozostanie bez zmian. W tabeli Autorzy będzie istniał wpis dotyczący autora, którego książek nie ma w bazie.

Zastosuj złączenie RIGHT JOIN, aby wyświetlić dane książek i ich autorów, tak aby w wyniku pojawili się również autorzy, których książek nie ma jeszcze w tabeli Ksiazki.

Jego wykonanie spowoduje uzyskanie wyniku widocznego poniżej na rysunku.

Wyszukiwanie niespójnych danych.

Wyświetl dane takich Autorów, dla których brakuje wpisów w tabeli Ksiazki. Aby wykonać to ćwiczenie należy użyć zapytania o konstrukcji podobnej do tej z pkt.11, ale z dodanym warunkiem w klauzuli WHERE (tytul IS NULL).

Łatwo zauważyć, że RIGHT JOIN i LEFT JOIN to funkcjonalne odpowiedniki. Wystarczy zamienić kolejność tabel, aby uzyskiwać jedno lub drugie zapytanie.

12. Konwersja typu zapytania.

Użyj złączenia typu LEFT JOIN do uzyskania takich samych rezultatów jak w pkt.12.

13. Pokaż pracę nauczycielowi w celu sprawdzenia wykonanych ćwiczeń.

Cytaty

Powiązane dokumenty

Na podstawie poniższych opisów rozpoznaj porty morskie i wpisz we właściwe miejsca ich nazwy wybrane spośród podanych.. Gdańsk, Gdynia,

Jak nietrudno się domyślić, złączenie zewnętrzne lewostronne to takie, w którym do wyniku złączenia wprowadzone zostaną bezwarunkowo wszystkie wiersze z tabeli, stojącej po

Matematyka wtedy w szkole to był dla mnie przedmiot, który bardzo lubiłam, i rzeczywiście bardzo dobrze się w nim czułam.. Poza tym to była podstawa mojego

e) Podaj osoby, których nazwiska zaczynają się na No. f) Podaj osoby, których imiona nie zaczynają się na literę A. Użyj operatora IN. Wyniki posortuj malejąco według

Wyświetl imiona i nazwiska wszystkich klientów oraz identyfikatory towarów, które zakupili. Wyświetl imiona i nazwiska tych osób, które nie zakupiły

W czasie zajęć oraz na ich końcu nauczyciel powinien zastosować samoocenę, prosząc dzieci, aby odniosły się do tego, kiedy w czasie zajęć czuły się przyjemnie i radośnie,

jeden z uczniów przygotowuje pytania do ankiety, drugi uczeń opracowuje formularz ankiety, trzeci uczeń przygotowuje się do prowadzania ankiety. Należy zwrócić szczególną uwagę

Układamy obrazki w rzędach obok siebie - wykorzystujemy 3 kartki w