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

Podobne dokumenty
Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Język SQL. Rozdział 8. Język manipulowania danymi DML

Ćwiczenie 4 - połączenia

Autor: Joanna Karwowska

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Język SQL. Rozdział 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

Język SQL. Rozdział 2. Proste zapytania

Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING.

Podstawy języka SQL cz. 2

Język SQL. Rozdział 7. Zaawansowane mechanizmy w zapytaniach

Język SQL. Rozdział 8. Język manipulowania danymi DML zadania

Wprowadzenie do języka SQL

SQL do zaawansowanych analiz danych część 1.

Relacyjny model danych. Relacyjny model danych

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

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

Podstawy SQL. 1. Wyświetl całość informacji z relacji ZESPOLY. 2. Wyświetl całość informacji z relacji PRACOWNICY

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

Ćwiczenie zapytań języka bazy danych PostgreSQL

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

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

Laboratorium nr 10. Temat: Połączenia relacji

Laboratorium Bazy danych SQL 2

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

Optymalizacja poleceń SQL Metody dostępu do danych

Klasyczna Analiza Danych

Wykład 6. SQL praca z tabelami 3

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Przestrzenne bazy danych Podstawy języka SQL

Wymagania: Konstrukcja prostych zapytań w języku SQL, umiejętność wykorzystania funkcji wierszowych i agregujących.

ACESS- zadania z wykorzystaniem poleceń SQL

3. Podzapytania, łączenie tabel i zapytań

Relacyjny model danych

Model relacyjny. Wykład II

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

SQL Structured Query Language

Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do

INFORMATYKA GEODEZYJNO- KARTOGRAFICZNA Relacyjny model danych. Relacyjny model danych Struktury danych Operacje Oganiczenia integralnościowe

Cwiczenie 4. Połączenia, struktury dodatkowe

RBD Relacyjne Bazy Danych

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Relacyjne bazy danych. Podstawy SQL

Model relacyjny. Wykład II

Technologie baz danych

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Widok Connections po utworzeniu połączenia. Obszar roboczy

SQL Structured Query Language

Ćwiczenie 5 podzapytania

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Język PL/SQL. Rozdział 2. Kursory

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

Bazy Danych i Usługi Sieciowe

1 Wstęp do modelu relacyjnego

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

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Ćwiczenie 6 - DML. Tworzenie, modyfikacja i usuwanie krotek. Podstawy poleceń COMMIT i ROLLBACK. Ćwiczenie 6 DML. Wymagania: Bazy Danych

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

Systemy GIS Tworzenie zapytań w bazach danych

Technologie baz danych

Relacyjne bazy danych. Podstawy SQL

Optymalizacja poleceń SQL Wprowadzenie

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

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Funkcje. Rozdział 3. Funkcje. Funkcje znakowe (1) Funkcje wierszowe

Algebra relacji. nazywamy każdy podzbiór iloczynu karteziańskiego D 1 D 2 D n.

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

SQL (ang. Structured Query Language)

bazy danych - heterogeniczność producenci funkcjonalność modele danych protokoły komunikacyjne

Tadeusz Pankowski Relacyjne bazy danych. są podstawą zachodniej cywilizacji

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Ćwiczenie 3 funkcje agregujące

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

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

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

Rozdział 14 Funkcje analityczne

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

Grupowanie i funkcje agregacji

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

Optymalizacja poleceń SQL Indeksy

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

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

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

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Podzapytania. SELECT atrybut_1, atrybut_2,... FROM relacja WHERE atrybut_n operator (SELECT atrybut_1, FROM relacja WHERE warunek

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

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

INDEKSY. Biologiczne Aplikacje Baz Danych. dr inż. Anna Leśniewska

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

Microsoft SQL Server Podstawy T-SQL

Wykład 5. SQL praca z tabelami 2

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

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

Rozpatrzymy bardzo uproszczoną bazę danych o schemacie

Język SQL. Rozdział 3. Funkcje wierszowe

PLAN WYKŁADU BAZY DANYCH MODEL DANYCH. Relacyjny model danych Struktury danych Operacje Integralność danych Algebra relacyjna HISTORIA

Ćwiczenie 1 podstawy

BAZY DANYCH algebra relacyjna. Opracował: dr inż. Piotr Suchomski

SQL Structured Query Language

Transkrypt:

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe Iloczyn kartezjański, połączenie równościowe, połączenie nierównościowe, połączenie zwrotne, połączenie zewnętrzne, składnia jawna połączeń, składnia niejawna połączeń, operatory zbiorowe. 1

Iloczyn kartezjański Iloczyn kartezjański (ang. cross-join) dwóch relacji to zbiór wszystkich możliwych kombinacji krotek z obu relacji. W większości wypadków wystąpienie iloczynu kartezjańskiego sygnalizuje błąd w zapytaniu. Iloczyn kartezjański rzadko bywa przydatny. Iloczyn kartezjański w składni jawnej: SELECT nazwisko, etat, nazwa FROM pracownicy CROSS JOIN etaty; Iloczyn kartezjański w składni niejawnej: SELECT nazwisko, etat, nazwa FROM pracownicy, etaty; 2

Połączenie (1) Zapytanie, którego wynikiem jest kombinacja tych rekordów z dwóch relacji, dla których spełniony jest warunek połączeniowy. Połączenie jest podzbiorem iloczynu kartezjańskiego. Ogólna postać: składnia jawna SELECT lista atrybutów FROM relacja_1 operator_połączenia relacja_2 warunek_połączeniowy WHERE pozostałe_warunki...; składnia niejawna SELECT lista atrybutów FROM relacja_1, relacja_2 WHERE warunek_połączeniowy AND pozostałe_warunki...; 3

Podział połączeń ze względu na postać warunku połączeniowego: równościowe (ang. equijoin): naturalne (ang. natural join) zwykłe nierównościowe (ang. nonequijoin) ze względu na sposób dopasowania rekordów łączonych relacji: wewnętrzne (ang. inner join, simple join) w zbiorze wynikowym tylko te rekordy z obu relacji, dla których spełniony jest warunek połączeniowy zewnętrzne (ang. outer join) w zbiorze wynikowym rekordy obu relacji, dla których spełniony jest warunek połączeniowy + pozostałe rekordy (z jednej lub obu relacji). ze względu na łączone relacje: zwykłe zwrotne (ang. self join) 4

PRACOWNICY ID_PRAC NAZWISKO Połączenie równościowe (1) ID_ZESP 180 200 MAREK ZAKRZEWICZ 10 30 210 BIAŁY 30 ID_ZESP 10 30 ZESPOLY NAZWA ADMINISTRACJA SYSTEMY EKSPERCKIE PRACOWNICY ID_PRAC NAZWISKO ETAT 180 200 BLAZEWICZ SLOWINSKI PROFESOR PROFESOR 210 KOSZLAJDA ADIUNKT NAZWA PROFESOR ADIUNKT ETATY PLACA_MIN 800 510 Połączenie, w którym warunek połączeniowy wykorzystuje operator równości W wyniku połączenia równościowego otrzymujemy wszystkie krotki z obu relacji spełniające warunki połączenia. ang. equijoin 5

Połączenie równościowe (2) Operator połączenia w składni jawnej: INNER JOIN... ON słowo INNER można pominąć SELECT lista_atrybutów FROM relacja_1 INNER JOIN relacja_2 ON warunek połączeniowy; Przykład: SELECT nazwisko, placa_pod, nazwa, placa_min FROM pracownicy INNER JOIN etaty ON etat = nazwa; 6

Połączenie równościowe (3) Jeżeli w łączonych relacjach występują atrybuty o takich samych nazwach, to w zapytaniu muszą być poprzedzone nazwą relacji w celu uniknięcia dwuznaczności. SELECT nazwisko, zespoly.id_zesp, pracownicy.id_zesp, nazwa FROM pracownicy join zespoly ON pracownicy.id_zesp = zespoly.id_zesp; W klauzuli FROM można wprowadzić aliasy (alternatywne nazwy relacji) i używać aliasów zamiast nazw relacji. Jeśli alias został użyty, to nie wolno używać oryginalnej nazwy relacji. SELECT nazwisko, p.id_zesp, z.id_zesp, nazwa FROM pracownicy p JOIN zespoly z ON p.id_zesp = z.id_zesp; aliasy 7

Połączenie równościowe (4) Składnia niejawna: SELECT nazwisko, placa_pod, nazwa FROM pracownicy, etaty WHERE etat = nazwa; SELECT nazwisko, zespoly.id_zesp, nazwa FROM pracownicy, zespoly WHERE pracownicy.id_zesp = zespoly.id_zesp; SELECT nazwisko, z.id_zesp, nazwa FROM pracownicy p, zespoly z WHERE p.id_zesp = z.id_zesp; 8

Połączenie naturalne (1) Jeśli nazwy atrybutów w warunku połączeniowym są takie same, wówczas połączenie równościowe nosi nazwę połączenia naturalnego (ang. natural join). Składnia jawna: operator NATURAL JOIN warunki równości dotyczą wszystkich par atrybutów o takich samych nazwach, należących do łączonych relacji. SELECT lista_atrybutów FROM relacja_1 NATURAL JOIN relacja_2; operator JOIN... USING () warunki równości dotyczą tylko atrybutów wymienionych po słowie USING SELECT lista_atrybutów FROM relacja_1 JOIN relacja_2 USING (lista_atrybutów); 9

Połączenie naturalne (2) Przykłady: SELECT nazwisko, id_zesp, nazwa FROM pracownicy NATURAL JOIN zespoly; SELECT nazwisko, id_zesp, nazwa FROM pracownicy JOIN zespoly USING (id_zesp); W składni niejawnej brak osobnej konstrukcji dla połączenia naturalnego SELECT nazwisko, z.id_zesp, nazwa FROM pracownicy p, zespoly z WHERE p.id_zesp = z.id_zesp; 10

Połączenie naturalne a równościowe różnice W wyniku połączenia naturalnego (zarówno NATURAL JOIN jak i JOIN... USING () atrybut połączeniowy występuje tylko raz. W wyniku połączenia równościowego występują oba atrybuty połączeniowe z obu łączonych relacji. SELECT * FROM pracownicy NATURAL JOIN zespoly; SELECT * FROM pracownicy JOIN zespoly USING (id_zesp); ID_ZESP ID_PRAC NAZWISKO ETAT ID_SZEFA ZATRUDNIO PLACA_POD PLACA_DOD NAZWA ADRES 10 100 WEGLARZ DYREKTOR 01-JAN-68 1730 420.5 ADMINISTRACJA PIOTROWO 3A 40 110 BLAZEWICZ PROFESOR 10001-MAY-73 1350 210 ALGORYTMY WLODKOWICA 16 30 120 SLOWINSKI PROFESOR 10001-SEP-77 1070 SYSTEMY EKSPERCKIE STRZELECKA 14 SELECT * FROM pracownicy JOIN zespoly ON pracownicy.id_zesp = zespoly.id_zesp; ID_PRAC NAZWISKO ETAT ID_SZEFA ZATRUDNIO PLACA_POD PLACA_DOD ID_ZESP ID_ZESP NAZWA ADRES 100 WEGLARZ DYREKTOR 01-JAN-68 1730 420.5 10 10 ADMINISTRACJA PIOTROWO 3A 110 BLAZEWICZ PROFESOR 10001-MAY-73 1350 210 40 40 ALGORYTMY WLODKOWICA 16 120 SLOWINSKI PROFESOR 10001-SEP-77 1070 30 30 SYSTEMY EKSPERCKIE STRZELECKA 14 11

Połączenie nierównościowe (1) PRACOWNICY ETATY ID_PRAC NAZWISKO PLACA_POD NAZWA PLACA_MIN PLACA_MAX 180 200 MAREK ZAKRZEWICZ 410.2 208 SEKRETARKA STAŻYSTA 270 450 150 250 Połączenie, w którym w warunku połączeniowym zastosowano inny niż = operator języka SQL. ang. non-equijoin 12

Połączenie nierównościowe (2) Przykłady: SELECT nazwisko, nazwa, placa_pod, placa_min, placa_max FROM pracownicy JOIN etaty ON placa_pod BETWEEN placa_min AND placa_max; SELECT nazwisko, nazwa, placa_pod, placa_min, placa_max FROM pracownicy, etaty WHERE placa_pod BETWEEN placa_min AND placa_max; 13

PRACOWNICY Połączenie zewnętrzne (1) ZESPOLY ID_PRAC NAZWISKO ID_ZESP ID_ZESP NAZWA 180? MAREK? 10? 40 50 ALGORYTMY BADANIA OPERACYJNE null null null PRACOWNICY ZESPOLY ID_PRAC NAZWISKO ID_ZESP ID_ZESP NAZWA 180 300 MAREK NOWICKI 10 99 50? BADANIA OPERACYJNE? null null 14

Połączenie zewnętrzne (2) Przy połączeniu wewnętrznym wiersze z obu relacji nie posiadające odpowiedników spełniających warunek połączenia nie są wyświetlane. Połączenie zewnętrzne (ang. outer join) zachowuje wszystkie krotki z wybranej relacji, łącząc je z "wirtualnymi" krotkami z drugiej krotki. "Wirtualne" krotki są wypełnione wartościami pustymi. Operator w składni jawnej: LEFT RIGHT FULL OUTER JOIN... ON USING (): LEFT połączenie lewostronne, do wyniku połączenia wewnętrznego obu relacji zostaną dodane te rekordy z relacji z lewej strony operatora, które nie połączyły się z rekordami relacji z prawej strony operatora RIGHT połączenie prawostronne, do wyniku połączenia wewnętrznego obu relacji zostaną dodane te rekordy z relacji z prawej strony operatora, które nie połączyły się z rekordami relacji z lewej strony operatora FULL połączenie obustronne, wynik połączenia wewnętrznego obu relacji zostanie uzupełniony o rekordy obu relacji, dla których nie został spełniony warunek połączeniowy 15

Słowo OUTER jest opcjonalne. Przykłady: SELECT nazwa, nazwisko, etat Połączenie zewnętrzne (3) FROM pracownicy p RIGHT OUTER JOIN ZESPOLY z ON z.id_zesp = p.id_zesp; SELECT nazwa, nazwisko, etat FROM PRACOWNICY p LEFT OUTER JOIN zespoly z ON z.id_zesp = p.id_zesp; SELECT nazwa, nazwisko, etat FROM ZESPOLY FULL OUTER JOIN PRACOWNICY USING (id_zesp); 16

Połączenie zewnętrzne (4) Jeśli oprócz warunku połączeniowego w zapytaniu umieszczono dodatkowy warunek filtrujący na kolumnie z relacji, w której może "zabraknąć" rekordów, warunek powinien zostać umieszczony po operatorze AND w klauzuli FROM zapytania. SELECT nazwa, nazwisko, etat FROM ZESPOLY z LEFT OUTER JOIN pracownicy p ON z.id_zesp = p.id_zesp AND placa_pod > 1000; SELECT nazwa, nazwisko, etat FROM ZESPOLY z LEFT OUTER JOIN pracownicy p ON z.id_zesp = p.id_zesp WHERE placa_pod > 1000; 17

Połączenie zewnętrzne (5) Składnia niejawna operator (+) w warunku połączeniowym wskazuje relację, w której "zabraknie" rekordów do połączenia z drugą relacją (a więc to relacja w warunku po stronie bez (+) zachowa wszystkie swoje rekordy). Przykłady: SELECT z.id_zesp, z.nazwa, p.nazwisko FROM ZESPOLY z, pracownicy p WHERE p.id_zesp (+) = z.id_zesp; SELECT z.id_zesp, z.nazwa, p.nazwisko FROM zespoly z, PRACOWNICY p WHERE p.id_zesp = z.id_zesp (+); 18

Połączenie zewnętrzne (6) Ograniczenia: jeśli warunek połączeniowy jest złożony, operator (+) musi zostać zastosowany do wszystkich części składowych warunku. warunek związany z połączeniem zewnętrznym nie może używać operatora IN ani nie może być łączony z innymi warunkami za pomocą operatora OR w składni niejawnej brak możliwość wykonania obustronnego połączenia zewnętrznego. SELECT z.id_zesp, z.nazwa, p.nazwisko FROM ZESPOLY z, pracownicy p WHERE p.id_zesp (+) = z.id_zesp AND p.placa_pod (+) > 1000; 19

Połączenie zwrotne (1) PRACOWNICY ID_PRAC NAZWISKO ID_SZEFA P 130 140 190 BRZEZIŃSKI MORZY MATYSIAK 100 130 140 S ID_PRAC NAZWISKO ID_SZEFA ID_PRAC NAZWISKO ID_SZEFA 130 140 190 BRZEZIŃSKI MORZY MATYSIAK 100 130 140 130 140 190 BRZEZIŃSKI MORZY MATYSIAK 100 130 140 Połączenie (ang.self join), w którym relacja łączy się "sama z sobą" (występuje kilkukrotnie w klazuli FROM). Użycie aliasów w połączeniu zwrotnym jest obowiązkowe. 20

Połączenie zwrotne (2) SELECT p.nazwisko, s.nazwisko FROM pracownicy p, pracownicy s WHERE p.id_szefa = s.id_prac; SELECT p.nazwisko, s.nazwisko FROM pracownicy p JOIN pracownicy s ON p.id_szefa = s.id_prac; 21

Połączenia wielu relacji Połączenie jest operacją binarną, jeśli w zapytaniu więcej niż dwie relacje, wówczas połączenie jest realizowane parami, np.: relacja A z relacją B, wynik połączenia z relacją C, itd. Łącząc N relacji należy podać minimum N-1 warunków połączenia. SELECT p.nazwisko, z.nazwa, e.nazwa, e.placa_min, e.placa_max FROM pracownicy p JOIN zespoly z ON p.id_zesp = z.id_zesp JOIN etaty e ON p.placa_pod BETWEEN placa_min AND placa_max; SELECT p.nazwisko, z.nazwa, e.nazwa, e.placa_min, e.placa_max FROM pracownicy p, zespoly z, etaty e WHERE p.id_zesp = z.id_zesp AND p.placa_pod BETWEEN placa_min AND placa_max; 22

UNION suma zbiorów eliminuje duplikaty UNION ALL suma zbiorów nie eliminuje duplikatów INTERSECT część wspólna zbiorów eliminuje duplikaty MINUS (standard SQL: EXCEPT) różnica zbiorów eliminuje duplikaty Operatory zbiorowe SELECT etat Operatory zbiorowe nazywamy również operatorami złączeń pionowych (vertical join) ponieważ łączą kolumny zbiorów wynikowych. FROM pracownicy WHERE id_zesp = 20 MINUS SELECT etat FROM pracownicy WHERE id_zesp = 30 ORDER BY etat; SELECT nazwisko FROM pracownicy UNION SELECT nazwa FROM zespoly; 23

Reguły stosowania operatorów zbiorowych W łączonych operatorami zbiorowymi klauzulach SELECT musi wystąpić ta sama liczba atrybutów. Typy odpowiednich atrybutów różnych klauzul SELECT muszą być zgodne. W wyniku zapytania pojawiają się nazwy atrybutów wyłącznie z pierwszej klauzuli SELECT. Klauzula ORDER BY może być użyta tylko jako ostatnia klauzula zapytania. Polecenia SELECT są wykonywane w kolejności ich wystąpienia (od góry do dołu), nawiasy umożliwiają zmianę domyślnej kolejności wykonywania łączonych operatorami zbiorowymi poleceń SELECT. UWAGA: w celu zapewnienia zgodności ze standardem SQL w przyszłych wydaniach Oracle operator INTERSECT będzie miał największy priorytet. 24