Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

Podobne dokumenty
Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Autor: Joanna Karwowska

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

3. Podzapytania, łączenie tabel i zapytań

Diagramy związków encji. Laboratorium. Akademia Morska w Gdyni

Wykład 6. SQL praca z tabelami 3

Podstawy języka SQL cz. 2

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Systemy GIS Tworzenie zapytań w bazach danych

SQL (ang. Structured Query Language)

Model relacyjny. Wykład II

Technologie baz danych

Ćwiczenie zapytań języka bazy danych PostgreSQL

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

Aliasy Select p.first_name, p.salary, j.job_title from employees p, jobs j where p.job_id=j.job_id;

Autor: Joanna Karwowska

Złączenie CROSS JOIN jest to tzw. złączenie krzyżowe, którego ogólna postać wygląda następująco:

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Struktura drzewa w MySQL. Michał Tyszczenko

Przestrzenne bazy danych Podstawy języka SQL

Relacyjne bazy danych. Podstawy SQL

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

SIECI KOMPUTEROWE I BAZY DANYCH

Bazy danych. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL.

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

Grupowanie i funkcje agregacji

Przykładowa baza danych BIBLIOTEKA

Wykład 05 Bazy danych

Laboratorium Bazy danych SQL 2

Model relacyjny. Wykład II

Wprowadzenie do baz danych

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Paweł Rajba

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Laboratorium nr 10. Temat: Połączenia relacji

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

1 Wstęp do modelu relacyjnego

Marek Rakowski Zdanie SELECT wybieranie danych z wielu tabel Strona 1 z 6

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Program szkoleniowy Efektywni50+ Moduł IV Podstawy relacyjnych baz danych i język SQL

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Wykład 8. SQL praca z tabelami 5

Rozpatrzymy bardzo uproszczoną bazę danych o schemacie

Relacyjne bazy danych. Podstawy SQL

Plan. Łączenie danych z wielu tabel złączenia JOIN suma zbiorów - UNION Użycie aliasów dla nazw tabel

P o d s t a w y j ę z y k a S Q L

SIECI KOMPUTEROWE I BAZY DANYCH

Wstęp do SQL. copyright: KGiIS WGGiOŚ AGH

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Bazy danych. Wykład V Kwerendy. Copyrights by Arkadiusz Rzucidło 1

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych

Podstawy technologii WWW

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

Bazy danych Język SQL część 2 Wykład dla studentów matem

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

NORTHWIND. Anonco.pl. ćwiczenia praktyczne. KiK s Tutorials. NORTHWIND dwiczenia praktyczne. ANONCO.PL/SQL SQLSERVERDLAOPORNYCH.WORDPRESS.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

QUERY język zapytań do tworzenia raportów w AS/400

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Oracle11g: Wprowadzenie do SQL

Optymalizacja poleceń SQL Metody dostępu do danych

Pobieranie danych z wielu tabel i łączenie wyników zapytań

RBD Relacyjne Bazy Danych

SQL - Structured Query Language. strukturalny język zapytań

Oracle PL/SQL. Paweł Rajba.

Grupowanie i funkcje agregujące

SQL firmy Oracle cz.2. Praca z wieloma tabelami.

Bazy danych 6. Klucze obce. P. F. Góra

Technologie baz danych

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Informatyka Ćwiczenie 10. Bazy danych. Strukturę bazy danych można określić w formie jak na rysunku 1. atrybuty

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Autor: Joanna Karwowska

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

Wprowadzenie do Doctrine ORM

Bazy danych. Wprowadzenie. SKiBD

SQL Structured Query Language

Krzysztof Kluza proste ćwiczenia z baz danych

Plan. ! Łączenie danych z wielu tabel. ! Użycie aliasów dla nazw tabel. " złączenia JOIN. " suma zbiorów - UNION

Bazy Danych. SQL Podstawy języka II: zapytania. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

Bazy danych 2. Wykład 4 Structured Query Language (SQL)

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Baza danych. Baza danych to:

Krótki przegląd zapytań

Laboratorium Technologii Informacyjnych. Projektowanie Baz Danych

Wprowadzenie do baz danych

Transkrypt:

Akademia Morska w Gdyni Gdynia 2004

1. Złączenie definicja Złączenie (JOIN) to zbiór rekordów stanowiących wynik zapytania służącego pobraniu danych z połączonych tabel (związki jeden-do-jeden, jeden-do-wiele lub wiele-do-wiele ). Istnieją dwa podstawowe sposoby konstruowania złączeń (instrukcja SELECT): 1. łączone tabele w klauzuli FROM i warunki złączenia w WHERE 2. zastosowanie instrukcji JOIN w ramach składni instrukcji SELECT W czasie konstrukcji zapytań ze złączeniem dowolnego typu bardzo pomocne okazują się rozszerzone diagramy związków encji (E-R), na których ujęta jest zależność klucz obcy-klucz główny łączonych tabeli (a więc tabeli mogących podlegać złączeniu). wydawnictwa ksiazki ksiazki_autorzy autorzy nazwa ulica miasto telefon fax numer konta tytul cena isbn data_wydania wydawnictwa_ ksiazki_ autorzy_ imie nazwisko tytul_naukowy wiek Legenda: klucz główny klucz obcy Rysunek 1 Rozszerzony diagram E-R dla bazy danych wykorzystywanej na zajęciach 1.1. Złączenie z użyciem FROM i WHERE W przypadku dwóch tabel, połączonych za pomocą klucza obcego wskazującego na klucz główny drugiej tabeli (związki jeden-do-jeden i jeden-do-wiele ), najczęściej chcemy zawęzić wynik iloczynu kartezjańskiego tych tabel, który byłyby zwrócony przez proste zapytanie np.: SELECT * from ksiazki, wydawnictwa; Ze zbioru wszystkich par rekordów k i w, takich, że rekord k pochodzi z tabeli ksiazki a rekord w z tabeli wydawnictwa (związek jeden-do-wiele, wiele książek w ramach jednego wydawnictwa), chcemy wybrać tylko te pary rekordów k i w dla których prawdziwy jest związek: książka określona rekordem k została wydana przez Joanna Szłapczyńska (asiasz@am.gdynia.pl) Strona 2 z 7

wydawnictwo w. Taką operację można zrealizować w oparciu o znaną już klauzulę filtracji wyników WHERE: SELECT * from ksiazki, wydawnictwa WHERE ksiazki.wydawnictwa_=wydawnictwa.; Aby zapewnić prawłowy dostęp do pól (np. kolumna ID występuje zarówno w tabeli ksiazki jak również w tabeli wydawnictwa) w powyższym przykładzie zastosowano kwalifikator : <nazwa_tabeli>.<nazwa_kolumny>. wydało: SELECT ksiazki.tytul, wydawnictwa.nazwa from ksiazki, wydawnictwa WHERE ksiazki.wydawnictwa_=wydawnictwa.; Uwaga: W przypadku złączeń definiowanych za pomocą klauzul FROM i WHERE (sposób 1.) RDBMS najpierw tworzy wstępny zbiór wyników będący iloczynem kartezjańskim, a dopiero później wyszukuje te rekordy, które spełniają zadany warunek w klauzuli WHERE. 1.2. Złączenie z użyciem klauzuli JOIN W przypadku stosowania klauzuli JOIN zbiór wstępnych wyników jest najczęściej znacznie mniejszy, ograniczany jest warunkiem po słowie kluczowym ON. Złączenia konstruowane zgodnie ze sposobem 2. wymagają użycia instrukcji JOIN w miejscu nazw tabel po słowie kluczowym FROM instrukcji SELECT. Składnia instrukcji JOIN (http://www.mysql.com/doc/en/join.html): table_reference, table_reference table_reference [INNER CROSS] JOIN table_reference [join_condition] table_reference STRAIGHT_JOIN table_reference table_reference LEFT [OUTER] JOIN table_reference [join_condition] table_reference NATURAL [LEFT [OUTER]] JOIN table_reference { OJ table_reference LEFT OUTER JOIN table_reference ON conditional_expr } table_reference RIGHT [OUTER] JOIN table_reference [join_condition] table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference Joanna Szłapczyńska (asiasz@am.gdynia.pl) Strona 3 z 7

gdzie table_reference jest zdefiniowane jako: table_name [[AS] alias] [[USE INDEX (key_list)] [IGNORE INDEX (key_list)] [FORCE INDEX (key_list)]] a join_condition jest zdefiniowany jako: ON conditional_expr USING (column_list) Kolejne rozdziały opracowania omawiają główne typy złączeń realizowanych w oparciu o instrukcję JOIN wraz z przykładami. 2. Złączenia wewnętrzne (INNER JOIN) Złączenie wewnętrzne (INNER JOIN) to zbiór rekordów będący iloczynem kartezjańskim łączonych tabel ograniczony przez dodatkowe warunki złączenia, najczęściej są to warunki równości kluczy głównego i obcego (tzw. złączenie równościowe - EQUIJOIN). Równoważne składnie złączeń wewnętrznych: 1. SELECT <kolumna_1>,...<kolumna_n> from <nazwa_tabeli_1>, <nazwa_tabeli_2> WHERE <warunek_połączenia> 2. SELECT <kolumna_1>,...<kolumna_n> from <nazwa_tabeli_1> INNER JOIN <nazwa_tabeli_2> {ON <warunek_połączenia> USING <lista kolumn>} 3. SELECT <kolumna_1>,...<kolumna_n> from <nazwa_tabeli_1> CROSS JOIN 4. SELECT <kolumna_1>,...<kolumna_n> from <nazwa_tabeli_1> JOIN Ponieważ domyślnym typem złączenia (JOIN) jest w MySQL złączenie wewnętrzne składnie JOIN oraz INNER JOIN są równoważne. Polecenie CROSS JOIN, służące do realizacji iloczynu kartezjańskiego, jest również tożsame ze złączeniem wewnętrznym INNER JOIN w sytuacji, gdy CROSS JOIN posiada określony warunek złączenia. wydało (równoważne składniowo sposoby): Joanna Szłapczyńska (asiasz@am.gdynia.pl) Strona 4 z 7

SELECT ksiazki.tytul, wydawnictwa.nazwa from ksiazki, wydawnictwa WHERE ksiazki.wydawnictwa_=wydawnictwa.; SELECT ksiazki.tytul, wydawnictwa.nazwa from ksiazki INNER JOIN wydawnictwa ON ksiazki.wydawnictwa_=wydawnictwa.; SELECT ksiazki.tytul, wydawnictwa.nazwa from ksiazki CROSS JOIN wydawnictwa ON ksiazki.wydawnictwa_=wydawnictwa.; SELECT ksiazki.tytul, wydawnictwa.nazwa from ksiazki JOIN wydawnictwa ON ksiazki.wydawnictwa_=wydawnictwa.; Uwaga: W przypadku, jeśli jedna z porównywanych kolumn (w równościowym warunku złączenia) przyjmuje wartość NULL jej wartość nie znajdzie się w wyniku tego złączenia (zgodnie z ogólnymi zasadami obsługiwania wartości NULL przez operacje porównania). Jest to ważna cecha charakterystyczna złączeń wewnętrznych. W powyższym przykładzie złączenie wewnętrzne nie zawiera ani tych wydawnictw, które nie wydały żadnej książki ani też tych książek, dla których jeszcze nie znaleziono wydawcy. Składnia języka SQL umożliwia nadawanie aliasów nazwom tabel, co znacznie ułatwia odwoływanie się do kolumn poprzez kwalifikator <alias>.<nazwa_kolumny> zamiast: <nazwa_tabeli>.<nazwa_kolumny> wydało przy wykorzystaniu aliasowania nazw tabel: SELECT k.tytul, w.nazwa from ksiazki AS k INNER JOIN wydawnictwa AS w ON k.wydawnictwa_=w.; Jeśli łączone tabele posiadają te same nazwy kolumn łączących (kluczy obcych i kluczy głównych) możemy zastosować jedną z równoważnych klauzul: USING lub też NATURAL JOIN zgodnie ze składnią:... A INNER JOIN B USING (<nazwa_kolumny_1>,..., <nazwa_kolumny_1>)..... A NATURAL JOIN B Joanna Szłapczyńska (asiasz@am.gdynia.pl) Strona 5 z 7

Wywołanie z użyciem klauzuli USING wymaga, aby obie łączone tabele posiadały wszystkie pola wymienione na liście. Natomiast złączenie NATURAL JOIN oznacza złączenie wewnętrzne dla warunku równości wszystkich kolumn o tych samych nazwach w łączonych tablicach (uwaga: nie jest wymagane specyfikowanie nazw kolumn i RDBMS automatycznie wyszukuje kolumny o tych samych nazwach!). wydało, przy założeniu, że tablica ksiązki ma zdefiniowany klucz główny jako ksiazki_ oraz klucz obcy jako wydawnictwa_ oraz tablica wydawnictwa ma zdefiniowany klucz główny jako wydawnictwa_ (równoważne sposoby): SELECT ksiazki.tytul, wydawnictwa.nazwa from ksiazki INNER JOIN wydawnictwa USING (wydawnictwa_); SELECT ksiazki.tytul, wydawnictwa.nazwa from ksiazki NATURAL JOIN wydawnictwa; 3. Złączenia zewnętrzne (OUTER JOIN) Złączenia zewnętrzne (OUTER JOIN) rozszerzają pojęcie złączenia wewnętrznego zwracając rekordy, które spełniają określone warunki złączenia oraz wszystkie inne rekordy z jednej (lub obu) łączonych tabel. Wyróżniamy następujące typy złączeń zewnętrznych: Złączenie lewe (LEFT JOIN) rozszerza zbiór rekordów złączenia wewnętrznego o te rekordy z tablicy z lewej strony złączenia, dla których nie przyporządkowano żadnych odpowiadających rekordów z tablicy prawej w złączeniu Złączenie prawe (RIGHT JOIN) analogicznie do złączenia lewego, tylko odpowiednio dla prawej strony złączenia Złączenie zewnętrzne pełne (FULL JOIN) - rozszerza zbiór rekordów złączenia wewnętrznego o te rekordy z tablicy z lewej oraz prawej złączenia, dla nie przyporządkowano żadnych odpowiadających rekordów z łączonej tablicy Składnia złączeń zewnętrznych w MySQL: Złączenie lewe (LEFT JOIN) Joanna Szłapczyńska (asiasz@am.gdynia.pl) Strona 6 z 7

SELECT <kolumna_1>,...<kolumna_n> from <nazwa_tabeli_1> LEFT JOIN Złączenie prawe (RIGHT JOIN) SELECT <kolumna_1>,...<kolumna_n> from <nazwa_tabeli_1> RIGHT JOIN Złączenie pełne (FULL JOIN) W obecnej wersji MySQL (4.1.1) złączenie pełne nie jest obsługiwane. Wyświetlenie pełnej listy nazw wydawnictw wraz z wydanymi przez nie książkami (z uwzględnieniem tych wydawnictw, które do tej pory nie wydały żadnej książki) (równoważne sposoby): SELECT ksiazki.tytul, wydawnictwa.nazwa from wydawnictwa LEFT JOIN ksiazki on ksiazki.wydawnictwa_=wydawnictwa.; SELECT ksiazki.tytul, wydawnictwa.nazwa from ksiazki RIGHT JOIN wydawnictwa on ksiazki.wydawnictwa_=wydawnictwa.; Dopuszczalne jest również tworzenie złączenia (wewnętrznego lub zewnętrznego) kilkukrotnie, tak aby zrealizować połączenie więcej niż dwóch tabel. Np. dla złączenia tabel A, B i C stosujemy notację: FROM A JOIN B ON <warunek_zlaczenia_1> JOIN C ON <warunek_zlaczenia_2> Wyświetlenie pełnej listy autorów wraz z tytułami książek które napisali (z uwzględnieniem tych autorów, którzy na razie nie wydali żadnej książki): SELECT imie, nazwisko, tytul FROM autorzy LEFT JOIN ksiazki_autorzy ON ksiazki_autorzy.autorzy_=autorzy. LEFT JOIN ksiazki ON ksiazki_autorzy.ksiazki_=ksiazki. ORDER BY nazwisko; Joanna Szłapczyńska (asiasz@am.gdynia.pl) Strona 7 z 7