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

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ł 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

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

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

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

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

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

Bazy Danych i Usługi Sieciowe

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

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

Laboratorium Bazy danych SQL 3 1

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

Język SQL. Rozdział 2. Proste zapytania

Ćwiczenie 5 podzapytania

Ćwiczenie zapytań języka bazy danych PostgreSQL

SQL do zaawansowanych analiz danych część 1.

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

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

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ń

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

Podstawy języka SQL cz. 2

SQL (ang. Structured Query Language)

Klasyczna Analiza Danych

Wprowadzenie do języka SQL

Ćwiczenie 4 - połączenia

Ćwiczenie 3 funkcje agregujące

Laboratorium Bazy danych SQL 2

Optymalizacja poleceń SQL Metody dostępu do danych

Podzapytania. Podzapytania nieskorelowane i skorelowane

Technologie baz danych

Widok Connections po utworzeniu połączenia. Obszar roboczy

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

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

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

Oracle11g: Wprowadzenie do SQL

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

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.

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

Paweł Rajba

Autor: Joanna Karwowska

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

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

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

Przestrzenne bazy danych Podstawy języka SQL

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

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Grupowanie i funkcje agregacji

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

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

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

Relacyjne bazy danych. Podstawy SQL

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

Microsoft SQL Server Podstawy T-SQL

SQL praca z tabelami 4. Wykład 7

Wykład 8. SQL praca z tabelami 5

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

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

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

Systemy GIS Tworzenie zapytań w bazach danych

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

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

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

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

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

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

Bazy danych wykład trzeci. Konrad Zdanowski

Relacyjne bazy danych. Podstawy SQL

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

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Deklarowanie kursora

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

SQL Structured Query Language

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

Grupowanie i funkcje agregujące

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

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

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

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

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

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

Podstawowe zapytania SELECT (na jednej tabeli)

Procedury i funkcje składowane

Technologie baz danych

Struktura bazy danych

Relacyjny model danych. Relacyjny model danych

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

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

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

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

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

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

Cwiczenie 4. Połączenia, struktury dodatkowe

Wykład XII. optymalizacja w relacyjnych bazach danych

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

Ćwiczenie 8 DDL. Sekwencje, indeksy, perspektywy. Ćwiczenie 8 DDL. Wymagania: Bazy Danych

Transkrypt:

Podzapytania Rozdział 5 Podzapytania podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, klauzula WITH, operatory ANY, ALL i EXISTS, zapytania hierarchiczne 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, atrybut,... WHERE atrybut n operator (SELECT atrybut i, atrybut j WHERE warunek); W podzapytaniu nie może wystąpić klauzula ORDER BY (wyjątek podzapytanie w klauzuli FROM) Podzapytania wyznaczające jedną krotkę Podzapytania wyznaczające wiele krotek () Wyznacz pracownika zarabiającego najmniej w instytucie WHERE placa_pod = ( SELECT MIN(placa_pod) ); 08 Wyznacz najgorzej zarabiającego asystenta WHERE etat = ASYSTENT AND placa_pod = ( SELECT MIN(placa_pod) WHERE etat= ASYSTENT ); 37 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 0 (SELECT id_zesp FROM zespoly WHERE nazwa in ('ALGORYTMY','ADMINISTRACJA')); 3 4

Podzapytania wyznaczające wiele krotek () 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. Wyświetl nazwiska najgorzej zarabiających pracowników w każdym zespole WHERE (placa_pod, id_zesp) IN (SELECT MIN(placa_pod), id_zesp GROUP BY id_zesp); 0 37 0 08 30 350 SELECT nazwisko, placa_pod, etat, id_zesp WHERE placa_pod > ANY (SELECT DISTINCT placa_pod WHERE id_zesp = 30); Operator ALL 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); 5 Najczęściej spotykane błędy 6 Podzapytania w klauzuli HAVING Lista atrybutów w klauzuli SELECT podzapytania jest niezgodna z listą atrybutów w warunku: Wyświetl te zespoły, w których średnia płaca podstawowa jest większa niż średnia płaca w całym instytucie. WHERE id_zesp = ( SELECT nazwisko, id_zesp WHERE nazwisko= SLOWINSKI ); 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) ); ORA-0093: 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: WHERE placa_pod = ( SELECT MAX(placa_pod) GROUP BY id_zesp ); ORA-047: jednowierszowe podzapytanie zwraca więcej niż jeden wiersz 7 8

Wielopoziomowe zagnieżdżanie zapytań Reguły zagnieżdżania podzapytań 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')); 350 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; 9 0 Podzapytanie skorelowane () Podzapytanie skorelowane () 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,... WHERE atrybut n >= ( SELECT atrybut j WHERE atrybut j = atrybut b ); zapytanie nadrzędne podzapytanie skorelowane Polecenie SELECT z podzapytaniem skorelowanym wykonywane jest następująco:. pobranie krotki K n przez zapytanie nadrzędne. wykonanie podzapytania na podstawie wartości z krotki K n 3. zaakceptowanie bądź odrzucenie krotki K n 4. pobranie kolejnej krotki K n+ przez zapytanie nadrzędne i powtórzenie kroków -4 Przykład: Wyświetl nazwiska pracowników zarabiających powyżej średniej dla swojego zespołu. SELECT p.nazwisko, p.placa_pod p WHERE p.placa_pod > ( SELECT AVG(placa_pod)

Operator EXISTS Podzapytanie skorelowane (3) P Pracownicy NAZWISKO PLACA_POD LECH CZECH RUS PIAST 300 500 ID_ZESP NAZWISKO PLACA_POD LECH CZECH RUS PIAST 300 500 Operatory EXISTS, NOT 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ł. ID_ZESP SELECT id_prac, nazwisko, etat, id_zesp p WHERE EXISTS (SELECT id_prac WHERE id_szefa = p.id_prac); SELECT nazwisko, placa_pod, id_zesp p WHERE placa_pod > (SELECT AVG(placa_pod) SELECT nazwisko, etat, id_zesp p WHERE NOT EXISTS (SELECT FROM zespoly 3 Podzapytania w klauzuli SELECT 4 Podzapytania w klauzuli FROM 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 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. SELECT nazwa, (SELECT MAX(placa_pod) WHERE id_zesp = z.id_zesp ) AS max_placa FROM zespoly z; 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; SELECT p.nazwisko, (SELECT nazwisko WHERE id_prac = p.id_szefa ) AS szef p ORDER BY nazwisko; 5 6

Klauzula WITH Zapytania hierarchiczne składnia Oracle Poszczególnym podzapytaniom można nadawać nazwy w celu uproszczenia składni zapytania. Służy do tego klauzula WITH Zapytania hierarchiczne pozwalają na rekurencję w relacjach zawierających dane hierarchiczne Pseudokolumna LEVEL reprezentuje poziom rekurencji w drzewie hierarchii Operator PRIOR służy do odwoływania się do rodzica danego węzła Klauzula START WITH definiuje korzeń drzewa WITH prac_zesp AS ( SELECT nazwa, nazwisko, etat, placa_pod JOIN zespoly USING (id_zesp) ) SELECT * FROM prac_zesp WHERE placa_pod > 00; SELECT id_prac, id_szefa, nazwisko, LEVEL CONNECT BY PRIOR id_prac = id_szefa START WITH nazwisko = 'WEGLARZ'; WITH profesorowie AS (SELECT * WHERE etat = 'PROFESOR' ), asystenci AS (SELECT * WHERE etat = 'ASYSTENT' ) SELECT * FROM profesorowie pr WHERE EXISTS (SELECT * FROM asystenci WHERE id_szefa = pr.id_prac); SELECT id_prac, id_szefa, nazwisko, LEVEL CONNECT BY PRIOR id_prac = id_szefa START WITH etat = 'PROFESOR'; 7 Zapytania hierarchiczne składnia standardowa W Oracle wspierana od Oracle g Release WITH podwladni00 (id_prac, id_szefa, nazwisko, poziom) AS ( SELECT id_prac, id_szefa, nazwisko, poziom WHERE id_prac = 00 UNION ALL SELECT p.id_prac, p.id_szefa, p.nazwisko, poziom+ FROM podwladni00 s JOIN pracownicy p ON s.id_prac = p.id_szefa ) SELECT id_prac, id_szefa, nazwisko, poziom FROM podwladni00; Rekurencyjna klauzula WITH musi używać operacji UNION ALL Rekurencyjna klauzula WITH musi mieć listę aliasów kolumn 9 8