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

Podobne dokumenty
- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

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

Autor: Joanna Karwowska

3. Podzapytania, łączenie tabel i zapytań

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

Złaczenia tablic: FROM, WHERE, JOIN

Wykład 6. SQL praca z tabelami 3

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

RBD Relacyjne Bazy Danych

Zadania z SQLa (MS SQL Server)

Technologie baz danych

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

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)

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

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

Paweł Rajba

Bazy danych 10. SQL Widoki

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

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

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

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

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

Podstawy języka SQL cz. 2

Wprowadzenie do SQL TEMAT 4 - Zadania dodatkowe

Model relacyjny. Wykład II

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

Bazy danych wykład trzeci. Konrad Zdanowski

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

Bazy danych 8. Podzapytania i grupowanie. P. F. Góra

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

Bazy danych. Informacje podstawowe

Laboratorium Bazy danych SQL 2

Grupowanie i funkcje agregacji

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

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

Bazy danych 6. Podzapytania i grupowanie. P. F. Góra

1 Wstęp do modelu relacyjnego

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

Model relacyjny. Wykład II

Bazy danych i usługi sieciowe

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Podstawowe zapytania SELECT (na jednej tabeli)

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

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

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

Systemy GIS Tworzenie zapytań w bazach danych

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

SQL Structured Query Language

Relacyjne bazy danych. Podstawy SQL

Operacja Teta-złączenia. v1 v1 Θ v2

Przykładowa baza danych BIBLIOTEKA

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

Wykład XII. optymalizacja w relacyjnych bazach danych

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

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

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

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

Rozpatrzymy bardzo uproszczoną bazę danych o schemacie

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Optymalizacja w relacyjnych bazach danych - wybór wydajnej strategii obliczania wyrażenia relacyjnego.

Struktura drzewa w MySQL. Michał Tyszczenko

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

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

Optymalizacja zapytań. Proces przetwarzania i obliczania wyniku zapytania (wyrażenia algebry relacji) w SZBD

Grupowanie i funkcje agregujące

SQL praca z tabelami 4. Wykład 7

STROJENIE PRZETWARZAŃ SAS

Przestrzenne bazy danych Podstawy języka SQL

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

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

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

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Język SQL, zajęcia nr 2

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

Druga wersja z kwantyfikatorem ANY: Relacje D I DC są złączone ze względu na wspólny element. Kwantyfikator EXIST. Przykład: zapytanie skorelowane

Temat : SBQL 1 obiektowy język zapytań.

Lista zadań nr Wyświetlić imię i nazwisko dla każdego pracownika z departamentu DEP T NO o numerze 000.

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

a) Polecenie: Wyświetl wszystkie rekordy z tabeli Pracownicy (wszystkie atrybuty)

Bazy danych SQL Server 2005

SQL (ang. Structured Query Language)

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

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

Podzapytania do tabel W miejscu w którym możemy użyć nazwy tabeli, możemy użyć podzapytania

Wykład 5. SQL praca z tabelami 2

SQL: zadania + odpowiedzi, wszystkie podstawowe schematy.

Obliczenia arytmetyczne. Konkatenacja pól. Aliasy kolumn. Aliasy tabel. Co dalej? Rozdział 4. Korzystanie z funkcji. Zastosowanie funkcji

Bazy danych. Algebra relacji

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

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Oracle11g: Wprowadzenie do SQL

Język SQL podstawy zapytań

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

SQL Structured Query Language

Wprowadzenie do języka SQL

PODZAPYTANIE (SUBSELECT)

SQL. Ćwiczenia praktyczne. Wydanie II

Transkrypt:

Podzapytania

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

Wypisujemy numery pracowników, którzy przepracowali więcej niż 40 godzin SELECT NrPrac FROM Przydzial WHERE GodzinPrzepr > 40; NrPrac 100 600 200 400

Jak wypisać nazwiska osób, które przy jakimś projekcie przepracowały więcej niż 40 godzin? SELECT DISTINCT Nazwisko FROM Pracownik WHERE NrPrac IN (100,500); SELECT NrPrac FROM Przydzial WHERE GodzinPrzepr > 40; SELECT DISTINCT Nazwisko FROM Pracownik WHERE NrPrac IN ( SELECT NrPrac FROM Przydzial WHERE GodzinPrzepr > 40);

SELECT DISTINCT Nazwisko FROM Pracownik WHERE NrPrac IN ( SELECT NrPrac FROM Przydzial WHERE GodzinPrzepr > 40); Nazwisko Maria Jackowska Krzysztof Niski Regina Jamna Ryszard Wujec

Podzapytania mogą mieć większą głębokość: Podać ID projektów realizowanych przez dział księgowy SELECT ProjektID FROM Projekt WHERE Dzial = 'Ksiegowosc'; ProjektID 1200

Podać numery pracowników pracujących więcej niż 40 godzin przy tych projektach: SELECT NrPrac FROM Przydzial WHERE GodzinPrzepr > 40 AND ProjektID in (SELECT ProjektID FROM Projekt WHERE Dzial = 'Ksiegowosc'); NrPrac 100 600

Podać nazwiska pracowników pracujących więcej niż 40 godzin przy projektach realizowanych przez dział księgowy: SELECT DISTINCT Nazwisko FROM Pracownik WHERE NrPrac IN (SELECT NrPrac FROM Przydzial WHERE GodzinPrzepr > 40 AND ProjektID in (SELECT ProjektID FROM Projekt WHERE Dzial = 'Ksiegowosc')); Nazwisko Maria Jackowska Ryszard Wujec

Iloczyn kartezjański SELECT * FROM Projekt, Przydzial;

ProjektID Nazwa Dzial Max Godzin ProjektID NrPrac Godzin Przepr 1000 Q3 Analiza portfela Finanse 75.0 1000 100 17.50 1200 Q3 Podatki Ksiegowosc 145.0 1000 100 17.50 1400 Q4 Plan produkcji Marketing 138.0 1000 100 17.50 1500 Q4 Analiza portfela Finanse 110.0 1000 100 17.50 1000 Q3 Analiza portfela Finanse 75.0 1000 300 12.50 1200 Q3 Podatki Ksiegowosc 145.0 1000 300 12.50 1400 Q4 Plan produkcji Marketing 138.0 1000 300 12.50 1500 Q4 Analiza portfela Finanse 110.0 1000 300 12.50 1000 Q3 Analiza portfela Finanse 75.0 1000 400 8.00 1200 Q3 Podatki Ksiegowosc 145.0 1000 400 8.00 1400 Q4 Plan produkcji Marketing 138.0 1000 400 8.00 1500 Q4 Analiza portfela Finanse 110.0 1000 400 8.00 1000 Q3 Analiza portfela Finanse 75.0 1000 500 20.25 1200 Q3 Podatki Ksiegowosc 145.0 1000 500 20.25 1400 Q4 Plan produkcji Marketing 138.0 1000 500 20.25 1500 Q4 Analiza portfela Finanse 110.0 1000 500 20.25

1000 Q3 Analiza portfela Finanse 75.0 1200 100 45.75 1200 Q3 Podatki Ksiegowosc 145.0 1200 100 45.75 1400 Q4 Plan produkcji Marketing 138.0 1200 100 45.75 1500 Q4 Analiza portfela Finanse 110.0 1200 100 45.75 1000 Q3 Analiza portfela Finanse 75.0 1200 600 40.50 1200 Q3 Podatki Ksiegowosc 145.0 1200 600 40.50 1400 Q4 Plan produkcji Marketing 138.0 1200 600 40.50 1500 Q4 Analiza portfela Finanse 110.0 1200 600 40.50 1000 Q3 Analiza portfela Finanse 75.0 1400 200 75.00 1200 Q3 Podatki Ksiegowosc 145.0 1400 200 75.00 1400 Q4 Plan produkcji Marketing 138.0 1400 200 75.00 1500 Q4 Analiza portfela Finanse 110.0 1400 200 75.00 1000 Q3 Analiza portfela Finanse 75.0 1400 500 25.25 1200 Q3 Podatki Ksiegowosc 145.0 1400 500 25.25 1400 Q4 Plan produkcji Marketing 138.0 1400 500 25.25 1500 Q4 Analiza portfela Finanse 110.0 1400 500 25.25 1000 Q3 Analiza portfela Finanse 75.0 1400 700 20.25 1200 Q3 Podatki Ksiegowosc 145.0 1400 700 20.25

1400 Q4 Plan produkcji Marketing 138.0 1400 700 20.25 1500 Q4 Analiza portfela Finanse 110.0 1400 700 20.25 1000 Q3 Analiza portfela Finanse 75.0 1500 400 70.50 1200 Q3 Podatki Ksiegowosc 145.0 1500 400 70.50 1400 Q4 Plan produkcji Marketing 138.0 1500 400 70.50 1500 Q4 Analiza portfela Finanse 110.0 1500 400 70.50

Iloczyn kartezjański z selekcją SELECT * FROM Projekt, Przydzial WHERE Dzial = 'Finanse';

ProjektID Nazwa Dzial Max Godzin ProjektID NrPrac Godzin Przepr 1000 Q3 Analiza portfela Finanse 75.0 1000 100 17.50 1500 Q4 Analiza portfela Finanse 110.0 1000 100 17.50 1000 Q3 Analiza portfela Finanse 75.0 1000 300 12.50 1500 Q4 Analiza portfela Finanse 110.0 1000 300 12.50 1000 Q3 Analiza portfela Finanse 75.0 1000 400 8.00 1500 Q4 Analiza portfela Finanse 110.0 1000 400 8.00 1000 Q3 Analiza portfela Finanse 75.0 1000 500 20.25 1500 Q4 Analiza portfela Finanse 110.0 1000 500 20.25 1000 Q3 Analiza portfela Finanse 75.0 1200 100 45.75 1500 Q4 Analiza portfela Finanse 110.0 1200 100 45.75 1000 Q3 Analiza portfela Finanse 75.0 1200 600 40.50 1500 Q4 Analiza portfela Finanse 110.0 1200 600 40.50 1000 Q3 Analiza portfela Finanse 75.0 1400 200 75.00 1500 Q4 Analiza portfela Finanse 110.0 1400 200 75.00 1000 Q3 Analiza portfela Finanse 75.0 1400 500 25.25 1500 Q4 Analiza portfela Finanse 110.0 1400 500 25.25

1000 Q3 Analiza portfela Finanse 75.0 1400 700 20.25 1500 Q4 Analiza portfela Finanse 110.0 1400 700 20.25 1000 Q3 Analiza portfela Finanse 75.0 1500 400 70.50 1500 Q4 Analiza portfela Finanse 110.0 1500 400 70.50

Równozłączenie (złączenie naturalne) SELECT * FROM Projekt, Przydzial WHERE Projekt.ProjektID = Przydzial.ProjektID;

Projekt ID Nazwa Dzial Max Godzin Projekt ID NrPrac Godzin Przepr 1000 Q3 Analiza portfela Finanse 75.0 1000 100 17.50 1200 Q3 Podatki Ksiegowosc 145.0 1000 300 12.50 1400 Q4 Plan produkcji Marketing 138.0 1000 400 8.00 1500 Q4 Analiza portfela Finanse 110.0 1000 500 20.25 1200 100 45.75 1500 400 70.50 1200 600 40.50 1400 200 75.00 1400 700 20.25 1400 500 25.25 Projekt Nazwa Dzial MaxGodzin ProjektID NrPrac Godzin ID Przepr 1000 Q3 Analiza portfela Finanse 75.0 1000 100 17.50 1000 Q3 Analiza portfela Finanse 75.0 1000 300 12.50 1000 Q3 Analiza portfela Finanse 75.0 1000 400 8.00 1000 Q3 Analiza portfela Finanse 75.0 1000 500 20.25 1200 Q3 Podatki Ksiegowosc 145.0 1200 100 45.75 1200 Q3 Podatki Ksiegowosc 145.0 1200 600 40.50 1400 Q4 Plan produkcji Marketing 138.0 1400 200 75.00 1400 Q4 Plan produkcji Marketing 138.0 1400 500 25.25 1400 Q4 Plan produkcji Marketing 138.0 1400 700 20.25 1500 Q4 Analiza portfela Finanse 110.0 1500 400 70.50

Informacja o projektach realizowanych w dziale finansowym: SELECT * FROM Projekt, Przydzial WHERE Projekt.ProjektID = Przydzial.ProjektID AND Dzial = 'Finanse';

Projekt ID Nazwa Dzial Max 1000 Q3 Analiza portfela 1000 Q3 Analiza portfela 1000 Q3 Analiza portfela 1000 Q3 Analiza portfela 1500 Q4 Analiza portfela Godzin Projekt ID NrPrac Godzin Przepr Finanse 75.0 1000 100 17.50 Finanse 75.0 1000 300 12.50 Finanse 75.0 1000 400 8.00 Finanse 75.0 1000 500 20.25 Finanse 110.0 1500 400 70.50

Opuszczamy zbędne atrybuty: SELECT Projekt.ProjektID, Nazwa, MaxGodzin, NrPrac, GodzinPrzepr FROM Projekt, Przydzial WHERE Projekt.ProjektID = Przydzial.ProjektID AND Dzial = 'Finanse'; Projekt Nazwa Max NrPrac Godzin ID Godzin Przepr 1000 Q3 Analiza portfela 75.0 100 17.50 1000 Q3 Analiza portfela 75.0 300 12.50 1000 Q3 Analiza portfela 75.0 400 8.00 1000 Q3 Analiza portfela 75.0 500 20.25 1500 Q4 Analiza portfela 110.0 400 70.50

Łączymy trzy tabele: SELECT * FROM Projekt, Przydzial, Pracownik WHERE Projekt.ProjektID = Przydzial.ProjektID AND Przydzial.NrPrac = Pracownik.NrPrac;

ProjeNazwa Dzial Max Proje NrPrGodzi NrPrNazwisko Telefon Dzial kt ID Godzi n ktid ac n Przep r ac 1000 Q3 Analiza Finanse 75.0 1000 100 17.50 100 Maria 2858879 Ksiegowosc portfela Jackowska 1200 Q3 Podatki Ksiegowosc 145.0 1200 100 45.75 100 Maria 2858879 Ksiegowosc Jackowska 1400 Q4 Plan produkcji Marketing 138.0 1400 200 75.00 200 Krzysztof Niski 2870098 Marketing 1000 Q3 Analiza Finanse 75.0 1000 300 12.50 300 Halina 2879981 Finanse portfela Jakubiec 1000 Q3 Analiza Finanse 75.0 1000 400 8.00 400 Regina 2851273 Ksiegowosc portfela Jamna 1500 Q4 Analiza Finanse 110.0 1500 400 70.50 400 Regina 2851273 Ksiegowosc portfela Jamna 1000 Q3 Analiza Finanse 75.0 1000 500 20.25 500 Jakub NULL Informatyka portfela Nestor 1400 Q4 Plan produkcji Marketing 138.0 1400 500 25.25 500 Jakub Nestor NULL Informatyka 1200 Q3 Podatki Ksiegowosc 145.0 1200 600 40.50 600 Ryszard 2870123 Informatyka Wujec 1400 Q4 Plan produkcji Marketing 138.0 1400 700 20.25 700 Karol Skrutynia 2873222 Marketing

Ponownie usuwamy nadmiar atrybutów: SELECT Projekt.ProjektID, Nazwa, MaxGodzin, Przydzial.NrPrac, GodzinPrzepr, Nazwisko, Telefon, Pracownik.Dzial FROM Projekt, Przydzial, Pracownik WHERE Projekt.ProjektID = Przydzial.ProjektID AND Przydzial.NrPrac = Pracownik.NrPrac;

ProjeNazwa Dzial Max NrP Godzi Nazwisko Telefon Dzial kt ID Godzi rac n n Przep r 1000 Q3 Analiza portfela Finanse 75.0 100 17.50 Maria Jackowska 2858879 Ksiegowosc 1200 Q3 Podatki Ksiegowosc145.0100 45.75 Maria Jackowska 2858879 Ksiegowosc 1400 Q4 Plan produkcji Marketing 138.0200 75.00 Krzysztof Niski 2870098 Marketing 1000 Q3 Analiza portfela Finanse 75.0 300 12.50 Halina Jakubiec 2879981 Finanse 1000 Q3 Analiza portfela Finanse 75.0 400 8.00 Regina Jamna 2851273 Ksiegowosc 1500 Q4 Analiza portfela Finanse 110.0400 70.50 Regina Jamna 2851273 Ksiegowosc 1000 Q3 Analiza portfela Finanse 75.0 500 20.25 Jakub Nestor NULL Informatyka 1400 Q4 Plan produkcji Marketing 138.0500 25.25 Jakub Nestor NULL Informatyka 1200 Q3 Podatki Ksiegowosc145.0600 40.50 Ryszard Wujec 2870123 Informatyka 1400 Q4 Plan produkcji Marketing 138.0700 20.25 Karol Skrutynia 2873222 Marketing

Alternatywny zapis złączeń SELECT Nazwisko, GodzinPrzepr FROM Pracownik, Przydzial WHERE Pracownik.NrPrac = Przydzial.NrPrac; SELECT Nazwisko, GodzinPrzepr FROM Pracownik JOIN Przydzial ON Pracownik.NrPrac = Przydzial.NrPrac; Nazwisko GodzinPrzepr Maria Jackowska 17.50 Maria Jackowska 45.75 Krzysztof Niski 75.00 Halina Jakubiec 12.50 Regina Jamna 8.00 Regina Jamna 70.50 Jakub Nestor 20.25 Jakub Nestor 25.25 Ryszard Wujec 40.50 Karol Skrutynia 20.25

Poprawa (?) czytelności SELECT Nazwisko, GodzinPrzepr FROM Pracownik JOIN Przydzial ON Pracownik.NrPrac = Przydzial.NrPrac; SELECT Nazwisko, GodzinPrzepr FROM Pracownik AS Pra JOIN Przydzial AS Przy ON Pra.NrPrac = Przy.NrPrac;

Złączenie trzech tabel SELECT Nazwa, GodzinPrzepr, Nazwisko FROM Projekt JOIN Przydzial ON Projekt.ProjektID = Przydzial.ProjektID JOIN Pracownik ON Przydzial.NrPrac = Pracownik.NrPrac;

Krok 1: SELECT * FROM Projekt JOIN Przydzial ON Projekt.ProjektID = Przydzial.ProjektID; ProjID Nazwa Dzial Max Godz ProjID NrPr Godz Prze 1000 Q3 Analiza portfela Finanse 75.0 1000 100 17.50 1000 Q3 Analiza portfela Finanse 75.0 1000 300 12.50 1000 Q3 Analiza portfela Finanse 75.0 1000 400 8.00 1000 Q3 Analiza portfela Finanse 75.0 1000 500 20.25 1200 Q3 Podatki Ksiegowosc 145.0 1200 100 45.75 1200 Q3 Podatki Ksiegowosc 145.0 1200 600 40.50 1400 Q4 Plan produkcji Marketing 138.0 1400 200 75.00 1400 Q4 Plan produkcji Marketing 138.0 1400 500 25.25 1400 Q4 Plan produkcji Marketing 138.0 1400 700 20.25 1500 Q4 Analiza portfela Finanse 110.0 1500 400 70.50

Krok 2: SELECT * FROM Projekt JOIN Przydzial ON Projekt.ProjektID = Przydzial.ProjektID JOIN Pracownik ON Przydzial.NrPrac = Pracownik.NrPrac; Projekt Przydzial Pracownik ProID Nazwa Dzial MGod ProID NrPr GPrze NrPrNazwisko Telefon Dzial 1000 Q3 Analiza portfela Finanse 75.0 1000 100 17.50 100 Maria Jackowska 2858879Ksiegowosc 1200 Q3 Podatki Ksiegowosc 145.0 1200 100 45.75 100 Maria Jackowska 2858879Ksiegowosc 1400 Q4 Plan produkcji Marketing 138.0 1400 200 75.00 200 Krzysztof Niski 2870098Marketing 1000 Q3 Analiza portfela Finanse 75.0 1000 300 12.50 300 Halina Jakubiec 2879981Finanse 1000 Q3 Analiza portfela Finanse 75.0 1000 400 8.00 400 Regina Jamna 2851273Ksiegowosc 1500 Q4 Analiza portfela Finanse 110.0 1500 400 70.50 400 Regina Jamna 2851273Ksiegowosc 1000 Q3 Analiza portfela Finanse 75.0 1000 500 20.25 500 Jakub Nestor NULL Informatyka 1400 Q4 Plan produkcji Marketing 138.0 1400 500 25.25 500 Jakub Nestor NULL Informatyka 1200 Q3 Podatki Ksiegowosc 145.0 1200 600 40.50 600 Ryszard Wujec 2870123Informatyka 1400 Q4 Plan produkcji Marketing 138.0 1400 700 20.25 700 Karol Skrutynia 2873222Marketing

Krok 3: SELECT Nazwa, GodzinPrzepr, Nazwisko FROM Projekt JOIN Przydzial ON Projekt.ProjektID = Przydzial.ProjektID JOIN Pracownik ON Przydzial.NrPrac = Pracownik.NrPrac; Nazwa GodzinPrzepr Nazwisko Q3 Analiza portfela 17.50 Maria Jackowska Q3 Podatki 45.75 Maria Jackowska Q4 Plan produkcji 75.00 Krzysztof Niski Q3 Analiza portfela 12.50 Halina Jakubiec Q3 Analiza portfela 8.00 Regina Jamna Q4 Analiza portfela 70.50 Regina Jamna Q3 Analiza portfela 20.25 Jakub Nestor Q4 Plan produkcji 25.25 Jakub Nestor Q3 Podatki 40.50 Ryszard Wujec Q4 Plan produkcji 20.25 Karol Skrutynia

Złączenie trzech tabel w wersji skróconej SELECT Nazwa, GodzinPrzepr, Nazwisko FROM Projekt JOIN Przydzial ON Projekt.ProjektID = Przydzial.ProjektID JOIN Pracownik ON Przydzial.NrPrac = Pracownik.NrPrac; SELECT Nazwa, GodzinPrzepr, Nazwisko FROM Projekt AS Pro JOIN Przydzial AS Przy ON Pro.ProjektID = Przy.ProjektID JOIN Pracownik AS Pra ON Przy.NrPrac = Pra.NrPrac; SELECT Nazwa, GodzinPrzepr, Nazwisko FROM Projekt Pro JOIN Przydzial Przy ON Pro.ProjektID = Przy.ProjektID JOIN Pracownik Pra ON Przy.NrPrac = Pra.NrPrac;

Porównanie podzapytań i złączeń Podać numery pracowników, którzy pracują przy projektach realizowanych przez dział księgowy. SELECT NrPrac FROM Przydzial WHERE ProjektID IN (SELECT ProjektID FROM Projekt WHERE Dzial = 'Ksiegowosc'); NrPrac 100 600

Podać numery pracowników, którzy pracują przy projektach realizowanych przez dział księgowy i nazwy tych projektów. SELECT NrPrac, Nazwa FROM Przydzial WHERE ProjektID IN (SELECT ProjektID FROM Projekt WHERE Dzial = 'Ksiegowosc'); atrybut Nazwa nie występuje w tabeli Przydzial SELECT NrPrac, Nazwa FROM Przydzial, Projekt WHERE Przydzial.ProjektID IN (SELECT ProjektID FROM Projekt WHERE Dzial = 'Ksiegowosc');

Krok 1: SELECT * FROM Przydzial, Projekt WHERE Przydzial.ProjektID IN (SELECT ProjektID FROM Projekt WHERE Dzial = 'Ksiegowosc');

Przydzial Projekt PrID NrPr GoPrz PrID Nazwa Dzial MGod 1200 100 45.75 1000 Q3 Analiza portfela Finanse 75.0 1200 100 45.75 1200 Q3 Podatki Ksiegowosc 145.0 1200 100 45.75 1400 Q4 Plan produkcji Marketing 138.0 1200 100 45.75 1500 Q4 Analiza portfela Finanse 110.0 1200 600 40.50 1000 Q3 Analiza portfela Finanse 75.0 1200 600 40.50 1200 Q3 Podatki Ksiegowosc 145.0 1200 600 40.50 1400 Q4 Plan produkcji Marketing 138.0 1200 600 40.50 1500 Q4 Analiza portfela Finanse 110.0 Niedobra tabela!!!

Krok 2: SELECT NrPrac, Nazwa FROM Przydzial, Projekt WHERE Przydzial.ProjektID IN (SELECT ProjektID FROM Projekt WHERE Dzial = 'Ksiegowosc');

NrPrac Nazwa 100 Q3 Analiza portfela 100 Q3 Podatki 100 Q4 Analiza portfela 100 Q4 Plan produkcji 600 Q3 Analiza portfela 600 Q3 Podatki 600 Q4 Analiza portfela 600 Q4 Plan produkcji

Rozwiązanie: ZŁĄCZENIE SELECT NrPrac, Nazwa FROM Przydzial, Projekt WHERE Przydzial.ProjektID = Projekt.ProjektID AND Dzial = 'Ksiegowosc'; NrPrac Nazwa 100 Q3 Podatki 600 Q3 Podatki

Złączenia zewnętrzne Auto Pracownik Nazwa Uzytkownik Nazwisko Dzial Ford Krzysztof Niski Maria Jackowska Ksiegowosc Fiat Halina Jakubiec Krzysztof Niski Marketing Renault Jakub Nestor Halina Jakubiec Finanse Citroen NULL Regina Jamna Ksiegowosc Jakub Nestor Informatyka Ryszard Wujec Informatyka Karol Skrutynia Marketing Istnieją PRACOWNICY (Regina Jamna) którzy nie są przypisani do żadnego AUTA. Istnieją AUTA (Citroen), które nie są przypisane do żadnego PRACOWNIKA.

Złączenie zewnętrzne lewostronne Oracle SELECT Nazwa, Nazwisko, Dzial FROM Auto, Pracownik WHERE Uzytkownik = Nazwisko (+) ; MySQL SELECT Nazwa, Nazwisko, Dzial FROM Auto LEFT JOIN Pracownik ON Uzytkownik = Nazwisko; Nazwa Nazwisko Dzial Ford Krzysztof Niski Marketing Fiat Halina Jakubiec Finanse Renault Jakub Nestor Informatyka Citroen NULL NULL

Złączenie zewnętrzne prawostronne Oracle SELECT Nazwa, Nazwisko, Dzial FROM Auto, Pracownik WHERE Uzytkownik (+) = Nazwisko ; MySQL SELECT Nazwa, Nazwisko, Dzial FROM Auto RIGHT JOIN Pracownik ON Uzytkownik = Nazwisko; Nazwa Nazwisko Dzial NULL Maria Jackowska Ksiegowosc Ford Krzysztof Niski Marketing Fiat Halina Jakubiec Finanse NULL Regina Jamna Ksiegowosc Renault Jakub Nestor Informatyka NULL Ryszard Wujec Informatyka NULL Karol Skrutynia Marketing

Złączenie zewnętrzne obustronne Oracle (SELECT Nazwa, Nazwisko, Dzial FROM Auto, Pracownik WHERE Uzytkownik (+) = Nazwisko) UNION (SELECT Nazwa, Nazwisko, Dzial FROM Auto, Pracownik WHERE Uzytkownik = Nazwisko (+)); MySQL (SELECT Nazwa, Nazwisko, Dzial FROM Auto RIGHT JOIN Pracownik ON Uzytkownik = Nazwisko) UNION (SELECT Nazwa, Nazwisko, Dzial FROM Auto LEFT JOIN Pracownik ON Uzytkownik = Nazwisko);

Nazwa Nazwisko Dzial NULL Maria Jackowska Ksiegowosc Ford Krzysztof Niski Marketing Fiat Halina Jakubiec Finanse NULL Regina Jamna Ksiegowosc Renault Jakub Nestor Informatyka NULL Ryszard Wujec Informatyka NULL Karol Skrutynia Marketing Citroen NULL NULL

Złączenie zewnętrzne prawostronne SELECT Nazwa, Nazwisko, Dzial FROM Auto LEFT JOIN Pracownik ON Uzytkownik = Nazwisko; Nazwa Nazwisko Dzial Ford Krzysztof Niski Marketing Fiat Halina Jakubiec Finanse Renault Jakub Nestor Informatyka Citroen NULL NULL