Złaczenia tablic: FROM, WHERE, JOIN

Podobne dokumenty
Podzapytania. Podzapytania nieskorelowane i skorelowane

Agregacja i Grupowanie Danych. Funkcje Agregacji. Opcje GROUP BY oraz HAVING

Konstruowanie Baz Danych DQL agregacja danych

Instrukcje DQL: SELECT. Zastosowanie SELECT, opcje i warianty

Wprowadzenie do psql i SQL. Język komend psql. Podstawy instrukcji SELECT

Instrukcje DML INSERT, UPDATE, DELETE. COPY

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

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Wykład 6. SQL praca z tabelami 3

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

Autor: Joanna Karwowska

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

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

Relacyjne bazy danych. Podstawy SQL

Grupowanie i funkcje agregacji

3. Podzapytania, łączenie tabel i zapytań

Relacyjne bazy danych. Podstawy SQL

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

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

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

Podstawy języka SQL cz. 2

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

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

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

Grupowanie i funkcje agregujące

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

Model relacyjny. Wykład II

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

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

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

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła

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

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

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

SQL Structured Query Language

Technologie baz danych

LAB 3 (część 1 Projektu)

SQL (ang. Structured Query Language)

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

ACESS- zadania z wykorzystaniem poleceń SQL

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

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

Model relacyjny. Wykład II

Zadania z SQLa (MS SQL Server)

Systemy GIS Tworzenie zapytań w bazach danych

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

Bazy danych wykład trzeci. Konrad Zdanowski

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

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Współczesne systemy baz danych

RBD Relacyjne Bazy Danych

Paweł Rajba

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

Współczesne systemy baz danych

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

Bazy danych i usługi sieciowe

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

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

Laboratorium Bazy danych SQL 2

SQL praca z tabelami 4. Wykład 7

Przestrzenne bazy danych Podstawy języka SQL

Bazy Danych. SQL Podstawy języka III: powtórzenie. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

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

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

DMX DMX DMX DMX: CREATE MINING STRUCTURE. Tadeusz Pankowski

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

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

Przykładowa baza danych BIBLIOTEKA

Język SQL podstawy zapytań

Szkolenie autoryzowane. MS Tworzenie zapytań do Microsoft SQL Server Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje

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

PODZAPYTANIE (SUBSELECT)

Bazy danych. dr inż. Arkadiusz Mirakowski

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treś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

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

Wyższa Szkoła Zarządzania i Marketingu w Sochaczewie. Grzegorz Domaoski. grzegorz.domanski@wszim-sochaczew.edu.pl. MS SQL Server

Wypisujemy nazwiska pracowników o numerach równych 100 lub 500. SELECT DISTINCT Nazwisko FROM Pracownik WHERE NrPrac IN (100,500);

Autor: Joanna Karwowska

Laboratorium nr 10. Temat: Połączenia relacji

Bazy danych. Informacje podstawowe

Ćwiczenie 4 - połączenia

Autor: Joanna Karwowska

Wprowadzenie do języka SQL

Rozpatrzymy bardzo uproszczoną bazę danych o schemacie

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

Zaawansowany SQL. Robert A. Kłopotek Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW

Ćwiczenie zapytań języka bazy danych PostgreSQL

1 Wstęp do modelu relacyjnego

Podyplomowe Studia Systemy informatyczne w logistyce

Microsoft SQL Server Podstawy T-SQL

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Bazy danych SQL Server 2005

Technologie baz danych

Struktura bazy danych

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

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

Podstawy języka SQL -

Krok 1. SELECT Symbol AS KS INTO Dzielnik FROM Towary WHERE (Nazwa='Orzeszki solone') OR (Nazwa = 'Zupy CHOISE') OR (Nazwa = 'Kawa BURG');

Transkrypt:

JOIN Łączenie tablic 1 Bazy Danych Wykład p.t. Złaczenia tablic: FROM, WHERE, JOIN Antoni Ligęza ligeza@agh.edu.pl http://galaxy.uci.agh.edu.pl/~ligeza Wykorzystano materiały: http: //www.postgresql.org/docs/8.3/interactive/index.html

JOIN Łączenie tablic 2 Komendy SQL: SELECT SELECT [ ALL DISTINCT [ ON ( expression [,...] ) ] ] * expression [ AS output_name ] [,...] [ FROM from_item [,...] ] [ WHERE condition ] [ GROUP BY expression [,...] ] [ HAVING condition [,...] ] [ { UNION INTERSECT EXCEPT } [ ALL ] select ] [ ORDER BY expression [ ASC DESC USING operator ] [,...] ] [ LIMIT { count ALL } ] [ OFFSET start ] [ FOR { UPDATE SHARE } [ OF table_name [,...] ] [ NOWAIT ] [...] ] where from_item can be one of: [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [,...] ) ] ] ( select ) [ AS ] alias [ ( column_alias [,...] ) ] function_name ( [ argument [,...] ] ) [ AS ] alias [ ( column_alias [,...] column_definition [,...] ) ] function_name ( [ argument [,...] ] ) AS ( column_definition [,...] ) from_item [ NATURAL ] join_type from_item [ ON join_condition USING ( join_column [,...] ) ]

JOIN Łączenie tablic 3 Proste łaczenie tablic WHERE tablica1.atrybut1=tablica2.atrybut2 proste łączenie można wykonać poprzez porównanie pól z dwóch tablic. Najczęściej jest to łączenie klucz-klucz obcy. pracownicy=> SELECT id_prac,nazwisko, imie, nazwa,id_dzial FROM dzial, prac WHERE dzial.kierownik=prac.id_prac; id_prac nazwisko imie nazwa id_dzial ---------+-----------+----------+-------------+---------- 110 Kowalik Artur Produkcyjny PD303 101 Kowalczyk Amadeusz Projektowy PK101 111 Kowalczuk Adam Promocji PR202 (3 rows) id_prac nazwisko imie nazwa id_dzial ---------+------------+----------+-------------+---------- 1100 Kowal Adam Produkcyjny PD303 110 Kowalik Artur Produkcyjny PD303 1110 Kowalewski Adam Promocji PR202 101 Kowalczyk Amadeusz Projektowy PK101 1101 Kowalski Antoni Produkcyjny PD303 1011 Kowalowski Alojzy Projektowy PK101 111 Kowalczuk Adam Promocji PR202 1010 Kawula Alojzy Projektowy PK101 1111 kudryk adam Produkcyjny PD303 (9 rows)

JOIN Łączenie tablic 4 Uwaga: iloczyn kartezjański Uwaga: bez (sensownego) warunku łączenia powstaje iloczyn kartezjański! ----------+-------------+-------------+-----------+---------+------------+-------- pracownicy=> SELECT * FROM dzial, prac; id_dzial nazwa lokalizacja kierownik id_prac nazwisko imie PD303 Produkcyjny Mysiecko 110 1100 Kowal Adam PD303 Produkcyjny Mysiecko 110 110 Kowalik Artur PD303 Produkcyjny Mysiecko 110 1110 Kowalewski Adam PD303 Produkcyjny Mysiecko 110 101 Kowalczyk Amadeus PD303 Produkcyjny Mysiecko 110 1101 Kowalski Antoni PD303 Produkcyjny Mysiecko 110 1011 Kowalowski Alojzy PD303 Produkcyjny Mysiecko 110 111 Kowalczuk Adam PD303 Produkcyjny Mysiecko 110 1010 Kawula Alojzy PD303 Produkcyjny Mysiecko 110 1111 kudryk adam PK101 Projektowy Mysieko 101 1100 Kowal Adam PK101 Projektowy Mysieko 101 110 Kowalik Artur PK101 Projektowy Mysieko 101 1110 Kowalewski Adam PK101 Projektowy Mysieko 101 101 Kowalczyk Amadeus PK101 Projektowy Mysieko 101 1101 Kowalski Antoni PK101 Projektowy Mysieko 101 1011 Kowalowski Alojzy PK101 Projektowy Mysieko 101 111 Kowalczuk Adam PK101 Projektowy Mysieko 101 1010 Kawula Alojzy PK101 Projektowy Mysieko 101 1111 kudryk adam PR202 Promocji Mysieoczko 111 1100 Kowal Adam PR202 Promocji Mysieoczko 111 110 Kowalik Artur PR202 Promocji Mysieoczko 111 1110 Kowalewski Adam PR202 Promocji Mysieoczko 111 101 Kowalczyk Amadeus PR202 Promocji Mysieoczko 111 1101 Kowalski Antoni PR202 Promocji Mysieoczko 111 1011 Kowalowski Alojzy PR202 Promocji Mysieoczko 111 111 Kowalczuk Adam PR202 Promocji Mysieoczko 111 1010 Kawula Alojzy PR202 Promocji Mysieoczko 111 1111 kudryk adam (27 rows)

JOIN Łączenie tablic 5 Możliwości łaczenia tablic w SQL Jeżeli informacja jest pobierana z wielu tablic to specyfikacja tych tablic oraz sposobu łączenia tablic umieszczona jest w klauzuli FROM (oraz ew. WHERE)zapytania SELECT. Bazowa konstrukcja FROM: FROM table_reference [, table_reference [,...]] table_reference to najczęściej nazwa tabeli; może to być także wynik złączenia tablic, podzapytanie, lub kombinacja powyższych. W praktyce może to być widok (perspektywa). Istnieją dwie możliwości łączenia tablic: FROM specyfikacja tablic oddzielonych przecinkami; warunki złączenia w WHERE, FROM pełna specyfikacja łączenia tablic (typu i warunku złączenia) z wykorzystaniem słowa JOIN; w warunku WHERE pozostaja kryteria wyboru. Najczęściej z wykorzystaniem warunku łączenia w WHERE wykonuje się złączenie wg schematu klucz klucz obcy. Uwaga!!! Podanie w FROM dwóch lub więcej tablic oddzielonych przecinkami bez specyfikacji warunku łączenia tworzy iloczyn kartezjański!!!

JOIN Łączenie tablic 6 Tablice pracownicy=> SELECT * FROM dzial; id_dzial nazwa lokalizacja kierownik ----------+-------------+-------------+----------- PD303 Produkcyjny Mysiecko 110 PK101 Projektowy Mysieko 101 PR202 Promocji Mysieoczko 111 (3 rows) pracownicy=> SELECT id_prac,nazwisko,dzial, stanowisko FROM prac; id_prac nazwisko dzial stanowisko ---------+-----------+-------+------------ 1100 Kowal PD303 robotnik 110 Kowalik PD303 kierownik 101 Kowalczyk PK101 kierownik 1101 Kowalski PD303 robotnik 111 Kowalczuk PR202 kierownik 1010 Kawula PK101 robotnik (6 rows)

JOIN Łączenie tablic 7 Iloczyn kartezjański pracownicy=> SELECT id_dzial,nazwa,kierownik, id_prac,dzial FROM dzial,prac; id_dzial nazwa kierownik id_prac dzial ----------+-------------+-----------+---------+------- PD303 Produkcyjny 110 1100 PD303 PD303 Produkcyjny 110 110 PD303 PD303 Produkcyjny 110 101 PK101 PD303 Produkcyjny 110 1101 PD303 PD303 Produkcyjny 110 111 PR202 PD303 Produkcyjny 110 1010 PK101 PK101 Projektowy 101 1100 PD303 PK101 Projektowy 101 110 PD303 PK101 Projektowy 101 101 PK101 PK101 Projektowy 101 1101 PD303 PK101 Projektowy 101 111 PR202 PK101 Projektowy 101 1010 PK101 PR202 Promocji 111 1100 PD303 PR202 Promocji 111 110 PD303 PR202 Promocji 111 101 PK101 PR202 Promocji 111 1101 PD303 PR202 Promocji 111 111 PR202 PR202 Promocji 111 1010 PK101 (18 rows)

JOIN Łączenie tablic 8 WHERE: dział-kierownik Podaj dane działów i kierownika każdego działu. pracownicy=> SELECT id_dzial,nazwa,kierownik AS kier, id_prac,dzial,nazwisko FROM dzial d, prac p ----------+-------------+-------+---------+-------+----------- WHERE d.kierownik=p.id_prac; id_dzial nazwa kier id_prac dzial nazwisko PD303 Produkcyjny 110 110 PD303 Kowalik PK101 Projektowy 101 101 PK101 Kowalczyk PR202 Promocji 111 111 PR202 Kowalczuk (3 rows) pracownicy=> SELECT id_prac,nazwisko,dzial, stanowisko FROM prac; id_prac nazwisko dzial stanowisko ---------+-----------+-------+------------ 1100 Kowal PD303 robotnik 110 Kowalik PD303 kierownik 101 Kowalczyk PK101 kierownik 1101 Kowalski PD303 robotnik 111 Kowalczuk PR202 kierownik 1010 Kawula PK101 robotnik (6 rows)

JOIN Łączenie tablic 9 WHERE: pracownik-dział W jakich działach pracują poszczególni pracownicy? pracownicy=> SELECT id_prac,nazwisko,dzial,id_dzial,nazwa FROM prac p, dzial d WHERE p.dzial=d.id_dzial; id_prac nazwisko dzial id_dzial nazwa ---------+-----------+-------+----------+------------- 1100 Kowal PD303 PD303 Produkcyjny 110 Kowalik PD303 PD303 Produkcyjny 101 Kowalczyk PK101 PK101 Projektowy 1101 Kowalski PD303 PD303 Produkcyjny 111 Kowalczuk PR202 PR202 Promocji 1010 Kawula PK101 PK101 Projektowy (6 rows) pracownicy=> SELECT id_prac,nazwisko,dzial FROM prac; id_prac nazwisko dzial ---------+-----------+------- 1100 Kowal PD303 110 Kowalik PD303 101 Kowalczyk PK101 1101 Kowalski PD303 111 Kowalczuk PR202 1010 Kawula PK101 (6 rows) pracownicy=> SELECT id_dzial, nazwa FROM dzial; id_dzial nazwa ----------+------------- PD303 Produkcyjny PK101 Projektowy PR202 Promocji

JOIN Łączenie tablic 10 Przykład Kto zarabia więcej niż jego kierownik? pracownicy=> \i pobory-prac-kier.sql id_prac nazwisko pobory nazwisko pobory ---------+----------+---------+-----------+--------- 1101 Kowalski 4500.00 Kowalik 1500.00 1010 Kawula 2500.00 Kowalczyk 1000.00 (2 rows) pracownicy=> SELECT id_prac,nazwisko,pobory, dzial,stanowisko FROM prac; id_prac nazwisko pobory dzial stanowisko ---------+-----------+---------+-------+------------ 1100 Kowal 1500.00 PD303 robotnik 110 Kowalik 1500.00 PD303 kierownik 101 Kowalczyk 1000.00 PK101 kierownik 1101 Kowalski 4500.00 PD303 robotnik 111 Kowalczuk 2500.00 PR202 kierownik 1010 Kawula 2500.00 PK101 robotnik (6 rows) pracownicy=> SELECT * FROM dzial; id_dzial nazwa lokalizacja kierownik ----------+-------------+-------------+----------- PD303 Produkcyjny Mysiecko 110 PK101 Projektowy Mysieko 101 PR202 Promocji Mysieoczko 111 (3 rows)

JOIN Łączenie tablic 11 Rozwiazanie SELECT p.id_prac, p.nazwisko, p.pobory, k.nazwisko, k.pobory FROM prac p, dzial d, prac k WHERE p.dzial=d.id_dzial AND d.kierownik=k.id_prac AND p.pobory > k.pobory;

JOIN Łączenie tablic 12 JOIN specyfikacja złaczenia FROM T1 CROSS JOIN T2 złączenie krzyżowe (iloczyn kartezjański; równoważne formy: FROM T1, T2 oraz FROM T1 INNER JOIN T2 ON TRUE. Złączenia kwalifikowane: Złączenie ze względu na warunek (θ-złączenie): T1 { [INNER] { LEFT RIGHT FULL } [OUTER] } JOIN T2 ON boolean_expression Równozłączenie według wybranych kolumn (o identycznych nazwach): T1 { [INNER] { LEFT RIGHT FULL } [OUTER] } JOIN T2 USING ( join column list ) Złączenie naturalne: T1 NATURAL { [INNER] { LEFT RIGHT FULL } [OUTER] } JOIN T2 INNER JOIN złączenie wewnętrzne, OUTER JOIN złączenie zewnętrzne, LEFT OUTER JOIN lewostronne złączenie zewnętrzne, RIGHT OUTER JOIN prawostronne złączenie zewnętrzne, FULL OUTER JOIN złączenie zewnętrzne pełne,

JOIN Łączenie tablic 13 PostgreSQL doc przyłady wyjaśniające num name -----+------ 1 a 2 b 3 c and t2: num value -----+------- 1 xxx 3 yyy 5 zzz then we get the following results for the various joins: => SELECT * FROM t1 CROSS JOIN t2; num name num value -----+------+-----+------- 1 a 1 xxx 1 a 3 yyy 1 a 5 zzz 2 b 1 xxx 2 b 3 yyy 2 b 5 zzz 3 c 1 xxx 3 c 3 yyy 3 c 5 zzz (9 rows) => SELECT * FROM t1 INNER JOIN t2 ON t1.num = t2.num;

JOIN Łączenie tablic 14 num name num value -----+------+-----+------- 1 a 1 xxx 3 c 3 yyy (2 rows) => SELECT * FROM t1 INNER JOIN t2 USING (num); num name value -----+------+------- 1 a xxx 3 c yyy (2 rows) => SELECT * FROM t1 NATURAL INNER JOIN t2; num name value -----+------+------- 1 a xxx 3 c yyy (2 rows) => SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num; num name num value -----+------+-----+------- 1 a 1 xxx 2 b 3 c 3 yyy (3 rows) => SELECT * FROM t1 LEFT JOIN t2 USING (num); num name value -----+------+------- 1 a xxx 2 b 3 c yyy (3 rows)

JOIN Łączenie tablic 15 => SELECT * FROM t1 RIGHT JOIN t2 ON t1.num = t2.num; num name num value -----+------+-----+------- 1 a 1 xxx 3 c 3 yyy 5 zzz (3 rows) => SELECT * FROM t1 FULL JOIN t2 ON t1.num = t2.num; num name num value -----+------+-----+------- 1 a 1 xxx 2 b 3 c 3 yyy 5 zzz (4 rows) The join condition specified with ON can also contain conditio => SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.val num name num value -----+------+-----+------- 1 a 1 xxx 2 b 3 c (3 rows)

JOIN Łączenie tablic 16 JOIN ON: dział-prac Podaj działy i zatrudnionych w nich pracowników. W tablicy dzial dodano 2 nowe działy (ale bez pracowników). pracownicy=> SELECT * FROM dzial; id_dzial nazwa lokalizacja kierownik ----------+--------------+-------------+----------- PD303 Produkcyjny Mysiecko 110 PK101 Projektowy Mysieko 101 PR202 Promocji Mysieoczko 111 PZ404 Zaopatrzenia Myszków PZ505 Zbytu Maszków (5 rows) pracownicy=> SELECT id_dzial,nazwa,id_prac,dzial,nazwisko FROM dzial d JOIN prac p ON d.id_dzial=p.dzial; id_dzial nazwa id_prac dzial nazwisko ----------+-------------+---------+-------+----------- PD303 Produkcyjny 1100 PD303 Kowal PD303 Produkcyjny 110 PD303 Kowalik PK101 Projektowy 101 PK101 Kowalczyk PD303 Produkcyjny 1101 PD303 Kowalski PR202 Promocji 111 PR202 Kowalczuk PK101 Projektowy 1010 PK101 Kawula (6 rows)

JOIN Łączenie tablic 17 INNER JOIN złaczenie wewnętrzne pracownicy=> SELECT id_dzial,nazwa,id_prac,dzial,nazwisko FROM dzial d INNER JOIN prac p ON d.id_dzial=p.dzial; id_dzial nazwa id_prac dzial nazwisko ----------+-------------+---------+-------+----------- PD303 Produkcyjny 1100 PD303 Kowal PD303 Produkcyjny 110 PD303 Kowalik PK101 Projektowy 101 PK101 Kowalczyk PD303 Produkcyjny 1101 PD303 Kowalski PR202 Promocji 111 PR202 Kowalczuk PK101 Projektowy 1010 PK101 Kawula (6 rows)

JOIN Łączenie tablic 18 OUTER JOIN Złaczenie zewnętrzne Podaj wszystkie działy i zatrudnionych w nich pracowników. pracownicy=> SELECT id_dzial,nazwa,id_prac,dzial,nazwisko FROM dzial d LEFT OUTER JOIN prac p ON d.id_dzial=p.dzial; id_dzial nazwa id_prac dzial nazwisko ----------+--------------+---------+-------+----------- PD303 Produkcyjny 1101 PD303 Kowalski PD303 Produkcyjny 110 PD303 Kowalik PD303 Produkcyjny 1100 PD303 Kowal PK101 Projektowy 1010 PK101 Kawula PK101 Projektowy 101 PK101 Kowalczyk PR202 Promocji 111 PR202 Kowalczuk PZ404 Zaopatrzenia PZ505 Zbytu (8 rows) Podaj wszystkie działy w których nie zatrudniono pracowników. pracownicy=> SELECT id_dzial,nazwa,id_prac,dzial,nazwisko FROM dzial d LEFT OUTER JOIN prac p ON d.id_dzial=p.dzial WHERE id_prac IS NULL; id_dzial nazwa id_prac dzial nazwisko ----------+--------------+---------+-------+---------- PZ404 Zaopatrzenia PZ505 Zbytu (2 rows)

JOIN Łączenie tablic 19 Warunek ON możliwości Specyfikacja dowolnie złozonego warunku po ON daje szerokie możliwości łączenia i jego zastosowań/interpretacji. pracownicy=> SELECT p.nazwisko, p.stanowisko, p.pobory, q.nazwisko, q.stanowisko, q.pobory FROM prac p JOIN prac q ON p.stanowisko= kierownik AND q.stanowisko= robotnik AND q.pobory-p.pobory > 500; nazwisko stanowisko pobory nazwisko stanowisko pobory ----------+------------+------+----------+----------+------- Kowalik kierownik 1500 Kowalski robotnik 4500 Kowalik kierownik 1500 Kawula robotnik 2500 Kowalczyk kierownik 1000 Kowalski robotnik 4500 Kowalczyk kierownik 1000 Kawula robotnik 2500 Kowalczuk kierownik 2500 Kowalski robotnik 4500 (5 rows) pracownicy=> SELECT nazwisko, stanowisko, pobory FROM prac; nazwisko stanowisko pobory -----------+------------+--------- Kowal robotnik 1500.00 Kowalik kierownik 1500.00 Kowalczyk kierownik 1000.00 Kowalski robotnik 4500.00 Kowalczuk kierownik 2500.00 Kawula robotnik 2500.00 (6 rows)

JOIN Łączenie tablic 20 Brak łaczności złaczeń zewnętrznych T1: studenci id nazwisko ----+----------- 17 Kowal 18 Malik 19 Noga T2: oceny id ocena ----+-------- 17 2 17 3 19 4 T3: opis ocena opis ------+------ 2 ndst 3 dst 4 db 5 bdb

JOIN Łączenie tablic 21 (T1 LEFT JOIN T2) JOIN T3 id nazwisko ocena opis ----+------------+---------+------- 17 Kowal 2 ndst 17 Kowal 3 dst 19 Noga 4 db T1 LEFT JOIN (T2 JOIN T3) id nazwisko ocena opis ----+------------+---------+------- 17 Kowal 2 ndst 17 Kowal 3 dst 19 Noga 4 db 18 Malik NULL NULL