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

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ę

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

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

Bazy Danych i Usługi Sieciowe

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

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

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

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

Laboratorium Bazy danych SQL 3 1

Ćwiczenie 5 podzapytania

Język SQL. Rozdział 2. Proste zapytania

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

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

Ćwiczenie zapytań języka bazy danych PostgreSQL

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

SQL do zaawansowanych analiz danych część 1.

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

PODZAPYTANIE (SUBSELECT)

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

ACESS- zadania z wykorzystaniem poleceń SQL

3. Podzapytania, łączenie tabel i zapytań

Podstawy języka SQL cz. 2

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

Wprowadzenie do języka SQL

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

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

Ćwiczenie 3 funkcje agregujące

Klasyczna Analiza Danych

SQL (ang. Structured Query Language)

Optymalizacja poleceń SQL Metody dostępu do danych

Laboratorium Bazy danych SQL 2

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

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

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

Podzapytania. Podzapytania nieskorelowane i skorelowane

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

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

Ćwiczenie 4 - połączenia

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

Plan wykładu. Elementy ERD BAZY DANYCH. Proces modelowania i implementacji bazy danych. Diagramy związków encji. SQL podzapytania

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

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

Technologie baz danych

Autor: Joanna Karwowska

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

SQL praca z tabelami 4. Wykład 7

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

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

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.

Wykład 8. SQL praca z tabelami 5

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

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

1. Język T SQL wprowadzenie do tworzenia zapytań i modyfikowania bazy danych

Procedury i funkcje składowane

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

Oracle11g: Wprowadzenie do SQL

Podstawowe zapytania SELECT (na jednej tabeli)

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

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

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

Deklarowanie kursora

Struktura bazy danych

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

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

Paweł Rajba

Przestrzenne bazy danych Podstawy języka SQL

Systemy GIS Tworzenie zapytań w bazach danych

Technologie baz danych

Grupowanie i funkcje agregujące

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

Przygotowanie do egzaminu. część I

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

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

Relacyjne bazy danych. Podstawy SQL

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

Relacyjne systemy baz danych i język SQL

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

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

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

E.14 Bazy Danych cz. 14 SQL Podzapytania

Podobnie jak wywołania funkcji w innych funkcjach, zapytania możemy zagnieżdżać w innych zapytaniach. Podzapytanie musi zostać zapisane w nawiasie.

SQL Structured Query Language

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

Plan. ! Podzapytania (subqueries) ! Podzapytania do tabel. ! Podzapytanie jako wyrażenie. ! Podzapytania skorelowane. ! operatory IN, NOT IN

Optymalizacja poleceń SQL Wprowadzenie

Relacyjny model danych. Relacyjny model danych

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Microsoft SQL Server Podstawy T-SQL

Relacyjne bazy danych. Podstawy SQL

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

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

Bazy danych. Plan wykładu. Zalenoci funkcyjne. Wykład 4: Relacyjny model danych - zalenoci funkcyjne. SQL - podzapytania A B

Dominik Szydłowski. v

Złaczenia tablic: FROM, WHERE, JOIN

Ćwiczenie 1 podstawy

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

Cwiczenie 4. Połączenia, struktury dodatkowe

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Transkrypt:

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

Podzapytania Podzapytanie jest poleceniem SELECT zagnieżdżonym w innym poleceniu SELECT. Podzapytanie może wystąpić wszędzie tam, gdzie system spodziewa się zbioru wartości, czyli w klauzulach SELECT, FROM, WHERE, HAVING. Ogólny format zagnieżdżania zapytań: Operatorem może być: = <> < > <= >= IN ANY, ALL UWAGA! SELECT atrybut 1, atrybut 2,... FROM relacja WHERE atrybut n operator (SELECT atrybut i, atrybut j FROM relacja WHERE warunek); W podzapytaniu nie może wystąpić klauzula ORDER BY (wyjątek podzapytanie w klauzuli FROM) 2

Podzapytania wyznaczające jedną krotkę Wyznacz pracownika zarabiającego najmniej w instytucie SELECT nazwisko, etat, placa_pod WHERE placa_pod = (SELECT MIN(placa_pod) ); 208 Wyznacz najgorzej zarabiającego asystenta SELECT nazwisko, etat, placa_pod WHERE etat = ASYSTENT AND placa_pod = (SELECT MIN(placa_pod) WHERE etat= ASYSTENT ); 371 3

Podzapytania wyznaczające wiele krotek (1) Wyświetl nazwiska i płace pracowników, zatrudnionych w zespołach o nazwach "ADMINISTRACJA" lub "ALGORYTMY". SELECT nazwisko, placa_pod, placa_dod WHERE id_zesp IN (SELECT id_zesp FROM zespoly WHERE nazwa in ('ALGORYTMY','ADMINISTRACJA')); 10 40 4

Podzapytania wyznaczające wiele krotek (2) Wyświetl nazwiska najgorzej zarabiających pracowników w każdym zespole SELECT nazwisko, etat, placa_pod WHERE (placa_pod, id_zesp) IN (SELECT MIN(placa_pod), id_zesp GROUP BY id_zesp); 410 10 371 20 208 30 1350 40 5

Podzapytania wyznaczające wiele krotek (3) Operator ANY stosowany z operatorami logicznymi, warunek jest prawdziwy jeśli jest spełniony dla jakiejkolwiek wartości zwróconej przez podzapytanie. SELECT nazwisko, placa_pod, etat, id_zesp WHERE placa_pod > ANY (SELECT DISTINCT placa_pod Operator ALL WHERE id_zesp = 30); stosowany z operatorami logicznymi, warunek jest prawdziwy jeśli jest spełniony dla wszystkich wartości zwróconych przez podzapytanie. SELECT nazwisko, placa_pod, etat, id_zesp WHERE placa_pod > ALL (SELECT DISTINCT placa_pod WHERE id_zesp = 30); 6

Najczęściej spotykane błędy Lista atrybutów w klauzuli SELECT podzapytania jest niezgodna z listą atrybutów w warunku: SELECT nazwisko, etat, placa_pod WHERE id_zesp = (SELECT nazwisko, id_zesp WHERE nazwisko= SLOWINSKI ); ORA-00913: za duża liczba wartości Podzapytanie zwraca więcej niż jeden wiersz a w warunku użyto operatora przewidzianego do porównywania wartości skalarnych: SELECT nazwisko, etat, placa_pod WHERE placa_pod = (SELECT MAX(placa_pod) GROUP BY id_zesp ); ORA-01427: jednowierszowe podzapytanie zwraca więcej niż jeden wiersz 7

Podzapytania w klauzuli HAVING Wyświetl te zespoły, w których średnia płaca podstawowa jest większa niż średnia płaca w całym instytucie. SELECT z.nazwa, AVG(p.placa_pod) AS srednia p, zespoly z WHERE p.id_zesp = z.id_zesp GROUP BY z.nazwa HAVING AVG(p.placa_pod) > (SELECT AVG(placa_pod) ); 8

Wielopoziomowe zagnieżdżanie zapytań Wyświetlić nazwiska i płace pracowników, zarabiających więcej niż wynosi maksymalna płaca w zespole o nazwie ALGORYTMY SELECT nazwisko, placa_pod WHERE placa_pod > (SELECT MAX (placa_pod) WHERE id_zesp = (SELECT id_zesp FROM zespoly WHERE nazwa = 'ALGORYTMY')); 1350 40 9

Reguły zagnieżdżania podzapytań W podzapytaniu nie używamy klauzuli ORDER BY, klauzula ORDER BY może wystąpić wyłącznie jako ostatnia klauzula najbardziej zewnętrznego zapytania. Liczba oraz typy atrybutów występujących w klauzuli SELECT podzapytania musi być zgodna z liczbą i typem atrybutów użytych w warunku zapytania zewnętrznego. Podzapytania są zawsze wykonywane w kolejności od najgłębiej zagnieżdżonego do najbardziej zewnętrznego. Podzapytania mogą się znaleźć w dowolnym miejscu w klauzuli WHERE. SELECT * WHERE (SELECT MIN(placa_pod) ) = placa_pod; SELECT * WHERE (SELECT MAX(placa_pod) WHERE etat = 'PROFESOR' ) * 0.5 <= placa_pod; 10

Podzapytanie skorelowane (1) Cechy Podzapytanie skorelowane jest wykonywane dla każdej krotki przeglądanej przez zapytanie nadrzędne Podzapytanie skorelowane operuje na wartościach atrybutów przekazanych przez zapytanie nadrzędne Podzapytanie skorelowane zawsze posiada odwołanie do atrybutu zapytania nadrzędnego SELECT atrybut a, atrybut b,... FROM relacja WHERE atrybut n >= (SELECT atrybut j FROM relacja WHERE atrybut j = atrybut b ); zapytanie nadrzędne podzapytanie skorelowane 11

Podzapytanie skorelowane (2) Polecenie SELECT z podzapytaniem skorelowanym wykonywane jest następująco: 1. pobranie krotki K n przez zapytanie nadrzędne 2. wykonanie podzapytania na podstawie wartości z krotki K n 3. zaakceptowanie bądź odrzucenie krotki K n 4. pobranie kolejnej krotki K n+1 przez zapytanie nadrzędne i powtórzenie kroków 2-4 Przykład: Wyświetl nazwiska pracowników zarabiających powyżej średniej dla swojego zespołu. SELECT nazwisko, placa_pod, id_zesp p WHERE placa_pod > (SELECT AVG(placa_pod) WHERE id_zesp = p.id_zesp); 12

Podzapytanie skorelowane (3) P Pracownicy NAZWISKO PLACA_POD ID_ZESP NAZWISKO PLACA_POD ID_ZESP LECH 300 CZECH 400 RUS 400 PIAST 500 1 1 2 2 LECH 300 CZECH 400 RUS 400 PIAST 500 1 1 2 2 SELECT nazwisko, placa_pod, id_zesp p WHERE placa_pod > (SELECT AVG(placa_pod) WHERE id_zesp = p.id_zesp); 13

Operator EXISTS Operator zwraca wartość TRUE jeżeli podzapytanie zwraca jakąkolwiek wartość. Podzapytanie nie musi zwracać wartości z bazy danych, równie dobrze może zwracać dowolny literał. SELECT id_prac, nazwisko, etat, id_zesp p WHERE EXISTS (SELECT id_prac WHERE id_szefa = p.id_prac); SELECT nazwisko, etat, id_zesp p WHERE NOT EXISTS (SELECT 1 FROM zespoly WHERE id_zesp = p.id_zesp); 14

Podzapytania w klauzuli SELECT Zapytanie, które zwraca dokładnie jednąwartość, jest poprawnym wyrażeniem i może być wykorzystane wszędzie tam, gdzie SQL oczekuje wyrażenia, np. w klauzuli SELECT SELECT nazwa, (SELECT MAX(placa_pod) WHERE id_zesp = z.id_zesp ) AS max_placa FROM zespoly z; SELECT p.nazwisko, (SELECT nazwisko WHERE id_prac = p.id_szefa ) AS szef p ORDER BY nazwisko; 15

Podzapytania w klauzuli FROM Wynik podzapytania może być wykorzystany jako wejściowy zbiór danych dla innego zapytania. Stąd w klauzuli FROM zamiast nazwy relacji można umieścić podzapytanie. W takim podzapytaniu dopuszczalne jest użycie klauzuli ORDER BY. Przykład: wyświetl nazwiska pracowników, którzy zarabiają więcej niż średnia płaca w zespole, w którym pracują SELECT nazwisko, placa_pod, srednia_placa_w_zespole FROM (SELECT id_zesp, AVG(placa_pod) as srednia_placa_w_zespole GROUP by id_zesp) z JOIN pracownicy p ON z.id_zesp = p.id_zesp WHERE placa_pod > srednia_placa_w_zespole; 16