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

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ę

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

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

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

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

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

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

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

SQL do zaawansowanych analiz danych część 1.

Język SQL. Rozdział 2. Proste zapytania

Klasyczna Analiza Danych

Bazy Danych i Usługi Sieciowe

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

Optymalizacja poleceń SQL Metody dostępu do danych

Ćwiczenie zapytań języka bazy danych PostgreSQL

Optymalizacja poleceń SQL

Optymalizacja poleceń SQL

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

Wprowadzenie do języka SQL

Relacyjne bazy danych. Podstawy SQL

Rozdział 14 Funkcje analityczne

Ćwiczenie 5 podzapytania

"Kilka słów" o strojeniu poleceń SQL w kontekście Hurtowni Danych wprowadzenie. Krzysztof Jankiewicz

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

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

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

Laboratorium Bazy danych SQL 3 1

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Grupowanie i funkcje agregacji

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

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

Optymalizacja poleceń SQL Wprowadzenie

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

Relacyjne bazy danych. Podstawy SQL

ACESS- zadania z wykorzystaniem poleceń SQL

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

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

Ćwiczenie 4 - połączenia

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

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

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

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

Optymalizacja poleceń SQL Indeksy

Technologie baz danych

PODZAPYTANIE (SUBSELECT)

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Ćwiczenie 3 funkcje agregujące

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

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

Widok Connections po utworzeniu połączenia. Obszar roboczy

Podstawy języka SQL cz. 2

Relacyjny model danych. Relacyjny model danych

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

MongoDB. mini przewodnik. Instytut Informatyki, Politechnika Poznańska. v

Cwiczenie 4. Połączenia, struktury dodatkowe

Bazy Danych i Usługi Sieciowe

Konstruowanie Baz Danych DQL agregacja danych

MongoDB. mini przewodnik. Instytut Informatyki, Politechnika Poznańska. v

Podzapytania. Podzapytania nieskorelowane i skorelowane

Grupowanie i funkcje agregujące

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

Bazy danych wykład trzeci. Konrad Zdanowski

Bazy danych i usługi sieciowe

SQL (ang. Structured Query Language)

INDEKSY. Biologiczne Aplikacje Baz Danych. dr inż. Anna Leśniewska

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

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

Deklarowanie kursora

Laboratorium Bazy danych SQL 2

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

Microsoft SQL Server Podstawy T-SQL

Język SQL, zajęcia nr 1

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

Przestrzenne bazy danych Podstawy języka SQL

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

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

Oracle11g: Wprowadzenie do SQL

Struktura bazy danych

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

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

Autor: Joanna Karwowska

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Bazy danych. dr inż. Arkadiusz Mirakowski

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

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

3. Podzapytania, łączenie tabel i zapytań

Paweł Rajba

Procedury i funkcje składowane

Optymalizacja. Plan wykonania polecenia SQL (1) Plan wykonania polecenia SQL (2) Rozdział 19 Wprowadzenie do optymalizacji poleceń SQL

DMX DMX DMX DMX: CREATE MINING STRUCTURE. Tadeusz Pankowski

Rozproszone bazy danych 3

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

Rozdział 1 Wprowadzenie do baz danych. (c) Instytut Informatyki Politechniki Poznańskiej 1

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

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Plan ćwiczenia. Rozdział 17. zarządzania współbieżnością. Dostęp współbieżny a dostęp spójny. Spójność bazy danych

Transkrypt:

Język SQL. Rozdział 7. Zaawansowane mechanizmy w zapytaniach Ograniczanie rozmiaru zbioru wynikowego, klauzula WITH, zapytania hierarchiczne. 1

Ograniczanie liczności zbioru wynikowego (1) Element standardu języka SQL. Odczytuje n rekordów od początku zbioru wynikowego (tzw. zapytanie top-n ): SELECT nazwisko, placa_pod FROM pracownicy ORDER BY placa_pod DESC FETCH FIRST 3 ROWS ONLY; SELECT nazwisko, placa_pod FROM pracownicy ORDER BY placa_pod DESC FETCH FIRST 25 PERCENT ROWS ONLY; FIRST może zostać zastąpione przez NEXT, ROWS przez ROW, zwracanych jest dokładnie n rekordów: jeśli na pozycjach n, n+1,... są rekordy o tej samej wartości kryterium porządkującego zbiór, rekordy na pozycji n+1,... nie jest zwracany, chyba że: SELECT nazwisko, placa_pod FROM pracownicy ORDER BY placa_pod DESC FETCH FIRST 3 ROWS WITH TIES; 2

Ograniczanie liczności zbioru wynikowego (2) Odczytuje n rekordów od zadanej pozycji (przesunięcia) zbioru wynikowego: SELECT nazwisko, placa_pod FROM pracownicy ORDER BY placa_pod DESC OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY; SELECT nazwisko, placa_pod FROM pracownicy ORDER BY placa_pod DESC OFFSET 5 ROWS FETCH NEXT 10 PERCENT ROWS WITH TIES; przesunięcie (klauzula OFFSET) musi być wyrażone liczbą rekordów. zaimplementowane w: Oracle12c, Microsoft SQL Server (klauzula SELECT TOP n), DB2, PostgreSQL, MySQL (klauzula LIMIT). 3

Ograniczanie liczności zbioru wynikowego (3) Rozwiązanie charakterystyczne dla Oracle wykorzystanie pseudokolumny ROWNUM. ROWNUM numer rekordu w zbiorze wynikowym, przyznawany w momencie odczytu rekordu z dysku (ale przed sortowaniem!): SELECT ROWNUM, nazwisko, etat, placa_pod FROM pracownicy; SELECT ROWNUM, nazwisko, etat, placa_pod FROM pracownicy ORDER BY placa_pod DESC; Wykorzystanie w zapytaniu top-n : SELECT ROWNUM AS pozycja, T.nazwisko, T.etat, T.pensja FROM (SELECT nazwisko, etat, placa_pod AS pensja FROM pracownicy ORDER BY pensja DESC) T WHERE ROWNUM <= 3; 4

Adres rekordu Określa dokładnie lokalizację rekordu. Składa się z: numeru obiektu (tabeli lub perspektywy), do której należy rekord, numeru pliku, numeru bloku dyskowego wewnątrz pliku, numeru krotki wewnątrz bloku. Dostępny za pomocą pseudokolumny ROWID: SELECT ROWID, id_zesp FROM pracownicy WHERE nazwisko = 'HAPKE'; Zastosowania: jednoznaczna identyfikacja rekordu w całej bazie danych, jako referencja do rekordu w poleceniu SQL. 5

Klauzula WITH (1) Upraszcza konstruowanie skomplikowanych zapytań przez możliwość definicji tymczasowego zbioru (-ów) rekordów: WITH prac_zesp AS (SELECT nazwa, nazwisko, etat, placa_pod + NVL(placa_dod,0) AS placa FROM pracownicy JOIN zespoly USING (id_zesp)) SELECT * FROM prac_zesp WHERE placa > 1200; WITH prac_zesp(nazwa, nazwisko, etat, placa) AS (SELECT nazwa, nazwisko, etat, placa_pod + NVL(placa_dod,0) FROM pracownicy JOIN zespoly USING (id_zesp)) SELECT * FROM prac_zesp WHERE placa > 1200; 6

Klauzula WITH (2) Możliwa definicja wielu zbiorów: WITH profesorowie AS (SELECT * FROM pracownicy WHERE etat = 'PROFESOR'), asystenci AS (SELECT * FROM pracownicy WHERE etat = 'ASYSTENT') SELECT * FROM profesorowie pr WHERE EXISTS (SELECT * FROM asystenci WHERE id_szefa = pr.id_prac); 7

Klauzula WITH zastosowania (1) SELECT nazwa, SUM(placa_pod) AS suma_plac FROM pracownicy p JOIN zespoly USING (id_zesp) GROUP BY nazwa HAVING 2 >= (SELECT COUNT(SUM(placa_pod)) FROM pracownicy JOIN zespoly USING (id_zesp) GROUP BY nazwa HAVING SUM(placa_pod) > SUM(p.placa_pod)) ORDER BY suma_plac DESC; WITH zespoly_stat AS (SELECT nazwa, SUM(placa_pod) AS suma_plac FROM pracownicy JOIN zespoly USING (id_zesp) GROUP by nazwa) SELECT * FROM zespoly_stat s WHERE 2 >= (SELECT COUNT(*) FROM zespoly_stat WHERE suma_plac > s.suma_plac) ORDER BY suma_plac DESC; 8

Klauzula WITH zastosowania (2) SELECT nazwisko, nazwa FROM pracownicy JOIN zespoly USING (id_zesp) WHERE 3 <= (SELECT COUNT(*) FROM pracownicy WHERE id_zesp =???); WITH zespoly_prac AS (SELECT nazwisko, nazwa, id_zesp FROM pracownicy JOIN zespoly USING (id_zesp)) SELECT nazwisko, nazwa FROM zespoly_prac zp WHERE 3 <= (SELECT COUNT(*) FROM pracownicy WHERE id_zesp = zp.id_zesp); SELECT nazwisko, nazwa FROM (SELECT nazwa, nazwisko, id_zesp FROM pracownicy JOIN zespoly USING(id_zesp)) zp WHERE 3 <= (SELECT COUNT(*) FROM pracownicy WHERE id_zesp = zp.id_zesp); 9

Rekurencja Relacja ZNA: Problem: znajdź możliwości kontaktu przy wykorzystaniu relacji "osoba zna osobę". KTO Jaś Małgosia Jaś Adaś KOGO Małgosia Piotrek Adaś Ola Reguły: kontakt(x,y) <= zna(x,y) kontakt(x,y) <= zna(x,z) i kontakt(z,y) WITH kontakt(kto, kogo) AS (SELECT kto, kogo FROM zna UNION ALL SELECT z.kto, k.kogo FROM zna z JOIN kontakt k ON z.kogo = k.kto) SELECT kto, kogo FROM kontakt; KTO Jaś Małgosia Jaś Adaś Jaś Jaś KOGO Małgosia Piotrek Adaś Ola Piotrek Ola 10

Zapytania hierarchiczne Zapytania hierarchiczne pozwalają na rekurencję w relacjach zawierających dane hierarchiczne (np. szef podwładny podwładny podwładnego ). Konieczna identyfikacja korzenia hierarchii (może być wiele korzeni wiele hierarchii) oraz warunku wyszukującego rekordy-dzieci danego rekordu-rodzica. Realizacja w standardzie SQL rekurencyjna klauzula WITH. Realizacja w Oracle: od Oracle11gR2 rekurencyjna klauzula WITH, przed Oracle11gR2 klauzule CONNECT BY i START WITH. 11

Zapytania hierarchiczne w standardzie SQL Rekurencyjna klauzula WITH: WITH podwladni (id_prac, id_szefa, nazwisko, poziom) AS -- definicja korzenia hierarchii (SELECT id_prac, id_szefa, nazwisko, 1 FROM pracownicy WHERE id_prac = 100 UNION ALL -- rekurencyjna definicja niższych poziomów SELECT p.id_prac, p.id_szefa, p.nazwisko, poziom+1 FROM podwladni s JOIN pracownicy p ON s.id_prac = p.id_szefa) -- wskazanie sposobu przeszukiwania hierarchii i sortowania rekordów-dzieci SEARCH DEPTH FIRST BY nazwisko SET porzadek_potomkow SELECT id_prac, id_szefa, nazwisko, poziom FROM podwladni ORDER BY porzadek_potomkow; musi wykonywać operację zbiorową UNION ALL, musi mieć listę aliasów kolumn. 12

Zapytania hierarchiczne w Oracle 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. Klauzula ORDER SIBLINGS BY określa sposób uporządkowania rekordów-dzieci. SELECT id_prac, id_szefa, nazwisko, LEVEL AS poziom FROM pracownicy CONNECT BY id_szefa = PRIOR id_prac START WITH nazwisko = 'WEGLARZ' ORDER SIBLINGS BY nazwisko; SELECT id_prac, id_szefa, nazwisko, LEVEL AS poziom FROM pracownicy CONNECT BY id_szefa = PRIOR id_prac START WITH etat = 'PROFESOR'; 13

Hierarchia pracowników 110, Błażewicz 220, Konopka 100, Węglarz 130, Brzeziński 210, Biały 170, Jezierski 160, Koszlajda 180, Marek 120, Słowiński 150, Królikowski 140, Morzy 230, Hapke 190, Matysiak 200, Zakrzewicz 14