Podzapytania. Podzapytania nieskorelowane i skorelowane

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

Złaczenia tablic: FROM, WHERE, JOIN

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

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ę

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.

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

PODZAPYTANIE (SUBSELECT)

Relacyjne bazy danych. Podstawy SQL

Przestrzenne bazy danych Podstawy języka SQL

Grupowanie i funkcje agregujące

Relacyjne bazy danych. Podstawy SQL

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

Ćwiczenie zapytań języka bazy danych PostgreSQL

SQL (ang. Structured Query Language)

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

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

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

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

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

3. Podzapytania, łączenie tabel i zapytań

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

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

a) ile wynosiła populacja najbardziej i najmniej ludnego z województw (oraz jakie były ich nazwy)

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

ACESS- zadania z wykorzystaniem poleceń SQL

Laboratorium Bazy danych SQL 3 1

Podstawy języka SQL cz. 2

Paweł Rajba

Wprowadzenie do języka SQL

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

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

Zadania z SQLa (MS SQL Server)

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

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 8. Podzapytania i grupowanie. P. F. Góra

Grupowanie i funkcje agregacji

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

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

Wykład 8. SQL praca z tabelami 5

Autor: Joanna Karwowska

Bazy danych wykład trzeci. Konrad Zdanowski

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

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

Autor: Joanna Karwowska

LAB 3 (część 1 Projektu)

Wykład 5. SQL praca z tabelami 2

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

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

Systemy GIS Tworzenie zapytań w bazach danych

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

Wykład 6. SQL praca z tabelami 3

Zadania SELECT do schematu EDS (EMP, DEPT, SALGRADE)

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Technologie baz danych

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

SQL Structured Query Language

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

SQL praca z tabelami 4. Wykład 7

Język SQL. Rozdział 2. Proste zapytania

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

W y k ł a d SELECT. Polecenie wyświetlające zawartość tabeli. Składnia uproszczona: Temat: Polecenie SELECT. Plan wykładu:

Bazy danych i usługi sieciowe

Struktura bazy danych

BAZY DANYCH. Anomalie. Rozkład relacji i normalizacja. Wady redundancji

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

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

CREATE TABLE logika (p BOOLEAN); INSERT INTO logika VALUES(true); INSERT INTO logika VALUES(false); INSERT INTO logika VALUES(NULL);

Podyplomowe Studia Systemy informatyczne w logistyce

Podstawowe zapytania SELECT (na jednej tabeli)

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Jerzy Nawrocki, Wprowadzenie do informatyki

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

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

Bazy Danych i Usługi Sieciowe

SQL w praktyce. Miłej i owocnej nauki!!!

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

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

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

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

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

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

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

Technologie baz danych

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

Bazy danych SQL Server 2005

Wykład 05 Bazy danych

Wprowadzenie do baz danych

Microsoft SQL Server Podstawy T-SQL

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

WARTOŚCI ROZMYTE W ZAGNIEŻDŻONYCH PYTANIACH SQL

Cechy języka XQUERY. o na wejściu dokument lub fragment względnie kolekcja dokumentów lub fragmentów o na wyjściu dokument lub fragment.

Laboratorium Bazy danych SQL 2

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

Współczesne systemy baz danych

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

Transkrypt:

Podzapytania w SQL 1 Bazy Danych Wykład p.t. Podzapytania. Zagnieżdżanie zapytań. Podzapytania nieskorelowane i skorelowane 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

Podzapytania w SQL 2 Komendy SQL: SELECT Command: SELECT Description: retrieve rows from a table or view 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 [,...] ) ]

Podzapytania w SQL 3 Podzapytania Zapytanie SQL może zawierać wewnątrz inne zapytanie SQL. Pamiętamy, że każde zapytanie (SELECT...) może być interpretowane jako żądanie wyliczenia pewnych wartości. Taka konstrukcja nosi nazwę zapytania z podzapytaniem. Mówi się także o zagnieżdżaniu zapytań. Zapytanie główne to zapytanie nadrzędne lub zewnętrzne. Zapytanie pomocnicze to zapytanie podrzędne lub wewnętrzne. Zapytanie podrzędne zazwyczaj zwraca pojedynczą wartość lub listę wartości wykorzystywanych w zapytaniu zewnętrznym. Przykład: Podaj listę pracowników zatrudnionych w lokalizacji Mysieoczko. Kolejność operacji: w tablicy dzial odnaleźć dział (lub wszystkie działy) zlokalizowane w podanej miejscowości; należy zwrócić id_dzial (lub listę), w tablicy tpra wyszukać wszystkich pracowników pracujących w podanym dziale (podanych działach). Zazwyczaj zapytanie podrzędne można wykonać niezależnie, jeden raz dla zadanych parametrów. Wyniki zapytania wewnętrznego są przekazywane do zapytania nadrzędnego. Konstrukcja zapytania z podzapytaniem pozwala na sprawne jego wykonanie w przypadku zmiany danych w tablicach. Zapytanie z podzapytaniem realizowane jest jako jedna całość. System zarządzania bazą danych analizuje i optymalizuje wykonanie zapytania z podzapytaniem.

Podzapytania w SQL 4 Przykład zapytania z podzapytaniem realizacja Podaj listę pracowników zatrudnionych w lokalizacji Mysieoczko. -------+------------+----------+-------+------------+--------- pracownicy=> SELECT * FROM tpra; 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 1100 Kowal PD303 robotnik 1500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) 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)

Podzapytania w SQL 5 Realizacja dwustopniowa oraz w postaci zapytania z podzapytaniem pracownicy=> SELECT id_dzial FROM dzial WHERE lokalizacja = Mysieoczko ; id_dzial ---------- PR202 (1 row) Przekazujemy PR202 do następnego zapytania: pracownicy=> SELECT * FROM tpra WHERE dzial = PR202 ; -------+------------+------+-------+------------+--------- 111 Kowalczuk PR202 kierownik 2500.00 (2 rows) Zapytanie z podzapytaniem tworzą jedną całość: pracownicy=> SELECT * FROM tpra WHERE dzial = (SELECT id_dzial FROM dzial WHERE lokalizacja = Mysieoczko ); -------+------------+------+-------+------------+--------- 111 Kowalczuk PR202 kierownik 2500.00 (2 rows)

Podzapytania w SQL 6 Przykłady zapytań z podzapytaniem Znajdź pracowników zatrudnionych w dziale produkcyjnym: 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=> \i podzapytanie1t.sql -------+----------+--------+-------+------------+--------- 110 Kowalik Artur PD303 kierownik 1500.00 1100 Kowal PD303 robotnik 1500.00 (3 rows) podzapytanie1t.sql: SELECT * FROM tpra WHERE dzial = (SELECT id_dzial FROM dzial WHERE nazwa = Produkcyjny );

Podzapytania w SQL 7 Przykłady zapytań z podzapytaniem Znajdź pracowników zatrudnionych w dziale zlokalizowanym w miejscowości z litera c w nazwie: 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=> \i podzapytanie2t.sql -------+------------+--------+-------+------------+--------- 110 Kowalik Artur PD303 kierownik 1500.00 1100 Kowal PD303 robotnik 1500.00 111 Kowalczuk PR202 kierownik 2500.00 (5 rows) podzapytanie2t.sql: SELECT * FROM tpra WHERE dzial IN (SELECT id_dzial FROM dzial WHERE lokalizacja LIKE %c% );

Podzapytania w SQL 8 Alternatywne lokalizacje Podzapytanie nie musi zwracać pojedynczej wartości!!! -------+------------+----------+-------+------------+--------- 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=> \i podzapytanie3t.sql 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 1100 Kowal PD303 robotnik 1500.00 (7 rows) podzapytanie3t.sql: SELECT * FROM tpra WHERE dzial IN (SELECT id_dzial FROM dzial WHERE lokalizacja IN ( Mysiecko, Mysieko ) );

Podzapytania w SQL 9 Podzapytania: zagnieżdżanie wgłab W zapytaniu może wystąpić podzapytanie, w którym z kolei zagnieżdżone jest następne podzapytanie. Taka struktura to zagnieżdżanie wielostopniowe (szeregowe). Przykład: Znajdź dane kierownika pewnego pracownika o id = 1011. -------+------------+----------+-------+------------+--------- pracownicy=> SELECT * FROM tpra; 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 1100 Kowal PD303 robotnik 1500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) 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)

Podzapytania w SQL 10 Rozwiazanie pracownicy=> \i podzapytanie4t.sql -------+-----------+----------+-------+------------+--------- 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 (1 row) podzapytanie4t.sql: SELECT * FROM tpra WHERE id= (SELECT kierownik FROM dzial WHERE id_dzial = (SELECT dzial FROM tpra WHERE id= 1011 ) );

Podzapytania w SQL 11 Zagnieżdżanie równoległe W zapytaniu mogą wystąpić podzapytania, które są niezależne od siebie żadne z nich nie jest zagnieżdżone w drugim. Taka struktura to zagnieżdżanie równoległe. Przykład: Znajdź dane pracowników będacych kierownikami działów z lokalizacji Mysieoczko lub (oraz) zarabiajacych więcej niż średnia. -------+------------+----------+-------+------------+--------- pracownicy=> SELECT * FROM tpra; 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 1100 Kowal PD303 robotnik 1500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) 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)

Podzapytania w SQL 12 Rozwiazanie pracownicy=> \i podzapytanie5t.sql -------+------------+--------+-------+------------+--------- 111 Kowalczuk PR202 kierownik 2500.00 (4 rows) podzapytanie5t.sql: SELECT * FROM tpra WHERE id= (SELECT kierownik FROM dzial WHERE lokalizacja= Mysieoczko ) OR pobory > (SELECT AVG(pobory) FROM tpra );

Podzapytania w SQL 13 Warianty działania podzapytania Podzapytanie może zwracać: zawsze pojedynczą wartość (możliwe użycie np. =),(kiedy jest pewność zwrotu pojedynczej wartości?) zero, jedną lub listę wartości (IN, ANY, ALL), być zastosowane jako test istnienia rozwiązania (EXISTS). Możliwe operatory: <exp> IN (<list>) wyrażenie <exp> należy do listy zwracanej podzapytaniem, <exp> NOT IN (<list>) wyrażenie <exp> nie należy do listy zwracanej podzapytaniem, <exp> <rel> ANY (<list>) wyrażenie <exp> spełnia relację <rel> w odniesieniu do pewnych (przynajmniej jednego) elementów listy zwracanej podzapytaniem, <exp> <rel> ALL (<list>) wyrażenie <exp> spełnia relację <rel> w odniesieniu do wszystkich elementów listy zwracanej podzapytaniem, EXISTS podzapytanie zwraca jakąś wartość, NOT EXISTS podzapytanie nie zwraca żadnej wartości. <rel> to zwykle operator porównania: =, >, <. >=, <=, <>.

Podzapytania w SQL 14 Examples from PostgreSQL docs SELECT... FROM fdt WHERE c1 > 5; SELECT... FROM fdt WHERE c1 IN (1, 2, 3); SELECT... FROM fdt WHERE c1 IN (SELECT c1 FROM t2;) SELECT... FROM fdt WHERE c1 IN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10); SELECT... FROM fdt WHERE c1 BETWEEN (SELECT c3 FROM t2 WHERE c2 = fdt.c1 + 10 ) AND 100; SELECT... FROM fdt WHERE EXISTS (SELECT c1 FROM t2 WHERE c2 > fdt.c1);

Podzapytania w SQL 15 Przykładowe zamienniki ANY SOME, IN =ANY, >= ALL >= SELECT MAX, <= ALL <= SELECT MIN, >= ANY >= SELECT MIN, <= ANY <= SELECT MAX, Uwaga: <exp> <> ANY (<list>) to nie to samo co <exp> NOT IN (<list>). Pierwsze tłumaczy się jako dysjunkcja: a drugie jako koniunkcję: < exp > l 1 < exp > l 2... < exp > l k, < exp > l 1 < exp > l 2... < exp > l k,

Podzapytania w SQL 16 Przykład z IN Znajdź pracowników zatrudnionych w działach (lista) spełniajacych określone warunki: 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 * FROM tpra; 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 1100 Kowal PD303 robotnik 1500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows)

Podzapytania w SQL 17 Rozwiazanie z IN -------+------------+----------+-------+------------+--------- pracownicy=> \i podzapytanie3.sql 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 1100 Kowal PD303 robotnik 1500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) podzapytanie3.sql: SELECT * FROM tpra WHERE dzial IN (SELECT id_dzial FROM dzial WHERE lokalizacja IN ( Mysiecko, Mysieko ) OR nazwa IN ( Promocji, Zbytu ) );

Podzapytania w SQL 18 Podzapytania skorelowane średnia Ile wynosi średnia płaca: -------+------------+----------+-------+------------+--------- pracownicy=> SELECT * FROM tpra; 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 1100 Kowal PD303 robotnik 1500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) pracownicy=> SELECT round(avg(pobory),2) FROM tpra; round --------- 2833.33 (1 rows) Ile wynosi średnia w działach: pracownicy=> SELECT round(avg(pobory),2) FROM tpra GROUP BY dzial; round --------- 3000.00 3000.00 2500.00 (3 rows)

Podzapytania w SQL 19 Podzapytania skorelowane średnia Kto zarabia więcej niż średnia: pracownicy=> SELECT * FROM tpra WHERE pobory > (SELECT round(avg(pobory),2) FROM tpra); -------+------------+--------+-------+------------+--------- (3 rows) Kto zarabia więcej niż średnia w jego dziale: pracownicy=> \i wiecej-niz-srednia-w-jego-dziale.sql -------+------------+--------+-------+------------+--------- (3 rows) wiecej-niz-srednia-w-jego-dziale.sql: SELECT * FROM tpra z WHERE z.pobory > (SELECT round(avg(pobory),2) FROM tpra w WHERE z.dzial = w.dzial); Uwaga: konieczne użycie aliasów!

Podzapytania w SQL 20 Przykład - podzapytanie skorelowane Kto zarabia więcej niż jego kierownik: -------+------------+----------+-------+------------+--------- pracownicy=> SELECT * FROM tpra; 110 Kowalik Artur PD303 kierownik 1500.00 101 Kowalczyk Amadeusz PK101 kierownik 1000.00 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 1100 Kowal PD303 robotnik 1500.00 111 Kowalczuk PR202 kierownik 2500.00 (9 rows) pracownicy=> \i wiecej-niz-jego-kierownik.sql -------+------------+--------+-------+------------+--------- 1011 Kowalowski Alojzy PK101 robotnik 2500.00 1010 Kawula Alojzy PK101 robotnik 2500.00 (5 rows) wiecej-niz-jego-kierownik.sql: SELECT * FROM tpra z WHERE z.pobory > (SELECT pobory FROM tpra w WHERE w.stanowisko= kierownik AND w.dzial=z.dzial);

Podzapytania w SQL 21 Przykład podzapytania a złaczenia wiecej-niz-jego-kierownik-2.sql: SELECT * FROM tpra z WHERE z.pobory > (SELECT pobory FROM tpra w WHERE w.id = (SELECT kierownik FROM dzial d WHERE z.dzial=d.id_dzial) ); wiecej-niz-jego-kierownik-z.sql: SELECT p.id, p.nazwisko, p.imie, p.dzial, p.stanowisko, p.pobory FROM tpra p, dzial d, tpra k WHERE p.dzial=d.id_dzial AND d.kierownik=k.id AND p.pobory > k.pobory;

Podzapytania w SQL 22 Przykład EXISTS Podaj działy które zatrudniają jakichś 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=> \i exists.sql id_dzial nazwa lokalizacja kierownik ----------+-------------+-------------+----------- PD303 Produkcyjny Mysiecko 110 PK101 Projektowy Mysieko 101 PR202 Promocji Mysieoczko 111 (3 rows) exists.sql: SELECT * FROM dzial d WHERE EXISTS (SELECT id FROM tpra p WHERE p.dzial = d.id_dzial);

Podzapytania w SQL 23 Przykład NOT EXISTS Podaj działy które nie zatrudniają żadnych 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=> \i not-exists.sql id_dzial nazwa lokalizacja kierownik ----------+--------------+-------------+----------- PZ404 Zaopatrzenia Myszków PZ505 Zbytu Maszków (2 rows) not-exists.sql: SELECT * FROM dzial d WHERE NOT EXISTS (SELECT id FROM tpra p WHERE p.dzial = d.id_dzial);