3. Podzapytania, łączenie tabel i zapytań

Podobne dokumenty
PODZAPYTANIE (SUBSELECT)

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

Grupowanie i funkcje agregacji

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

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

Autor: Joanna Karwowska

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

Podstawy języka SQL cz. 2

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

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

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

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

Technologie baz danych

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

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

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

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

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

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

Wykład 6. SQL praca z tabelami 3

Paweł Rajba

Relacyjne bazy danych. Podstawy SQL

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

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

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

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

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

Relacyjne bazy danych. Podstawy SQL

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

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

Wprowadzenie do języka SQL

Systemy GIS Tworzenie zapytań w bazach danych

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

SQL (ang. Structured Query Language)

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

Microsoft SQL Server Podstawy T-SQL

Grupowanie i funkcje agregujące

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

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

SQL Structured Query Language

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

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

Podstawowe zapytania SELECT (na jednej tabeli)

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

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

RBD Relacyjne Bazy Danych

Złaczenia tablic: FROM, WHERE, JOIN

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

SQL - Structured Query Language. strukturalny język zapytań

Zadania z SQLa (MS SQL Server)

Technologie baz danych

Oracle11g: Wprowadzenie do SQL

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

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

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

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

Język SQL. Rozdział 2. Proste zapytania

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

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

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

Ćwiczenie zapytań języka bazy danych PostgreSQL

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

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

ACESS- zadania z wykorzystaniem poleceń SQL

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

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

Autor: Joanna Karwowska

Laboratorium Bazy danych SQL 3 1

Podstawy języka SQL -

Przestrzenne bazy danych Podstawy języka SQL

Model relacyjny. Wykład II

E.14 Bazy Danych cz. 14 SQL Podzapytania

SQL praca z tabelami 4. Wykład 7

Bazy danych wykład trzeci. Konrad Zdanowski

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

Laboratorium Bazy danych SQL 2

Podyplomowe Studia Systemy informatyczne w logistyce

Materiały szkoleniowe. Podstawy języka SQL

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

Wykład 8. SQL praca z tabelami 5

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

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

Struktura drzewa w MySQL. Michał Tyszczenko

Współczesne systemy baz danych

Wprowadzenie do baz danych

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

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

Współczesne systemy baz danych

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

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

Bazy danych. Plan wykładu. Przetwarzanie zapytań. Etapy przetwarzania zapytania. Translacja zapytań języka SQL do postaci wyrażeń algebry relacji

Wykład 5. SQL praca z tabelami 2

Wykład XII. optymalizacja w relacyjnych bazach danych

Podstawy języka SQL Co to jest SQL? Możliwości SQL SQL*Plus

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Podzapytania. Podzapytania nieskorelowane i skorelowane

Marek Rakowski Podstawy zdania SELECT Strona 1 z 12

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

Transkrypt:

3. Podzapytania, łączenie tabel i zapytań I. PODZAPYTANIE (SUBSELECT) oddzielna, ujęta w nawiasy instrukcja SELECT, zagnieżdżona w innej instrukcji SQL, zazwyczaj w instrukcji SELECT w instrukcji SELECT, podzapytanie może być umieszczone w klauzuli: o WHERE, HAVING (jako część warunku logicznego) o SELECT (podzapytanie musi wówczas zwracać dokładnie jedną wartość) o FROM (pełni rolę źródła danych) o ORDER BY (musi zwracać dokładnie jedną wartość) o Firebird umożliwia także umieszczanie podzapytań w klauzuli GROUP BY (takie podzapytanie musi zwracać dokładnie jedną wartość) a. PODZAPYTANIA PROSTE podzapytanie proste jest wykonywane jako pierwsze, jego wynik jest zapamiętany i przekazany do zewnętrznego zapytania (podzapytania można zagnieżdżać wielokrotnie) jako wynik zazwyczaj zwraca tabelę jednokolumnową (wyjątkiem jest wykorzystanie operatora EXISTS lub SINGULAR lub umieszczenie podzapytania w klauzuli FROM) 8

podzapytanie proste w klauzuli WHERE lub HAVING SELECT lista wyrażeń FROM lista tabel WHERE wyrażenie operator (SELECT wyrażenie FROM...) SELECT lista wyrażeń FROM lista tabel GROUP BY lista wyrażeń HAVING wyrażenie operator (SELECT wyrażenie FROM...) możliwe operatory: operator relacji (<, >, =,!=, <>,<=,>=), jeżeli podzapytanie zwraca dokładnie jedną wartość operator relacji (<, >, =,!=, <>,<=,>=), w połączeniu z jednym z poniższych słów kluczowych, jeżeli podzapytanie zwraca wiele wartości (lub może zwrócić wiele wartości): ANY warunek jest spełniony, gdy wartość zwrócona przez podzapytanie jest w relacji z przynajmniej jedną z wartości podzapytania ALL gdy wartość jest w relacji ze wszystkimi wartościami zwróconymi przez podzapytanie IN / NOT IN BETWEEN / NOT BETWEEN 9

b. PODZAPYTANIA SKORELOWANE wartość z zapytania zewnętrznego jest przekazywana jako parametr do podzapytania, które posiada (najczęściej) w klauzuli WHERE warunek skorelowania określający, jak mają być połączone podzapytanie z zapytaniem zewnętrznym; często wymaga użycia aliasów nazw tabel, aby odróżnić kolumny z podzapytania i zapytania głównego; podzapytanie jest wykonywane dla każdego wiersza zapytania głównego wartość podzapytania jest wyznaczana na podstawie wartości parametru pobranego z zapytania zewnętrznego; podzapytanie skorelowane w klauzuli WHERE lub HAVING: wynik zwrócony przez podzapytanie pozwala określić, jaki ostatecznie zbiór rekordów zwróci zapytanie zewnętrzne; w podzapytaniu skorelowanym często wykorzystuje się: predykat EXISTS - przyjmuje wartość prawdy, gdy podzapytanie zwróci przynajmniej jeden wiersz predykat SINGULAR przyjmuje wartość prawdy, gdy podzapytanie zwróci dokładnie jeden wiersz jeżeli używamy EXISTS lub SINGULAR, to podzapytanie może zwracać cały wiersz danych SELECT full_name, salary, dept_no SELECT COUNT(*) FROM employee e FROM employee e1 WHERE EXISTS(SELECT * FROM department d WHERE salary= WHERE mngr_no IS NULL (SELECT MAX(salary) FROM employee e2 AND d.dept_no=e.dept_no) WHERE e1.dept_no=e2.dept_no) 10

c) PODZAPYTANIA w klauzuli SELECT Podzapytanie umieszczeno w klauzuli SELECT musi zwracać dokładnie jedną wartość. Często jest to podzapytanie skorelowane. SELECT full_name, salary, (SELECT AVG(salary) SELECT full_name as pracownik, FROM employee) (SELECT full_name FROM employee FROM employee WHERE emp_no=(select mngr_no WHERE dept_no= 600 FROM department d WHERE d.dept_no=e.dept_no) ) as szef FROM employee e WHERE e.full_name= Nelson, Robert d) PODZAPYTANIA w klauzuli FROM Podzapytanie zwraca zestaw rekordów, który jest źródłem danych dla zapytania zewnętrznego. Aby odwołać się do kolumn z podzapytania, należy nadać aliasy kolumnom lub nadać alias całej tabeli zwróconej przez podzapytanie. SELECT ile, dept_no FROM (SELECT count(*) as ile, dept_no FROM employee GROUP BY dept_no) 11

WHERE ile <=3 SELECT MAX(ile) FROM (SELECT count(*) as ile FROM employee GROUP BY dept_no) d) PODZAPYTANIA w klauzuli ORDER BY umożliwiają sortowanie zgodnie z wartościami zwróconymi przez podzapytanie (dla jednego wiersza zapytania głównego powinna być tylko jedna wartość zwrócona przez podzapytanie) SELECT dept_no, full_name, (SELECT count(*) FROM employee e2 WHERE e1.dept_no=e2.dept_no) FROM employee e1 ORDER BY (SELECT count(*) FROM employee e2 WHERE e1.dept_no=e2.dept_no) lub SELECT dept_no, full_name, (SELECT count(*) FROM employee e2 WHERE e1.dept_no=e2.dept_no) FROM employee e1 ORDER BY 3 12

ZŁĄCZENIA TABEL łączenie tabel używane jest z reguły w celu wyboru danych z więcej niż jednej tabeli 1. złączenie krzyżowe - jeżeli wymienimy więcej niż jedną tabelę we frazie FROM, utworzony zostanie iloczyn kartezjański SELECT... FROM tabela1, tabela2,... 2. złączenie wewnętrzne należy określić warunek złączenia, w klauzuli WHERE lub za pomocą frazy JOIN SELECT... FROM tabela1, tabela2 WHERE tabela1.kol_a = tabela2.kol_b SELECT... FROM tabela1 JOIN tabela2 ON (tabela1.kol_a = tabela2.kol_b) w warunku złączenia najczęściej wykorzystuje się istniejące w schemacie danej bazy związki klucza głównego z kluczem obcych w tabelach, które chcemy złączyć SELECT full_name, department FROM employee e, department d WHERE e.dept_no=d.dept_no //warunek złączenia złączenia wewnętrzne pozwalają wybierać dane tylko z tych wierszy, które mają odpowiadające im wiersze w obu tabelach nie uwzględniają możliwości wystąpienia NULL 13

można łączyć więcej niż dwie tabele (należy wówczas podać odpowiednie warunki złączenia, np. aby połączyć trzy tabele, należy podać dwa warunki złączenia, itp.) SELECT full_name, department, job_title FROM (employee e JOIN department d ON (e.dept_no=d.dept_no)) JOIN job j ON (e.job_code=j.job_code) jest możliwe samozłączenie, czyli łączenie ze sobą tej samej tabeli trzeba wówczas stosować aliasy, aby rozróżnić dwie kopie danej tabeli SELECT e1.full_name, e1.job_country FROM employee e1 JOIN employee e2 ON(e1.job_country=e2.job_country) WHERE e2.emp_no=2 najczęściej złączeń dokonuje się według atrybutów kluczowych, ewentualnie kolumn o unikalnych wartościach; warunek złączenia może być oparty o więcej, niż jedną kolumnę; możliwe jest też łączenie tabel wg innych kryteriów, niż równość, np. SELECT e1.full_name, e1.salary FROM employee e1 JOIN employee e2 ON(e1.salary>e2.salary) WHERE e2.emp_no=2 14

3. złączenie zewnętrzne tworzymy za pomocą klauzuli FULL/LEFT/RIGHT JOIN złączenia zewnętrzne są używane, gdy w jednej z tabel w polu łączenia pojawia się NULL, istniejące wiersze z jednej tabeli są wówczas łączone z pustymi wierszami LEFT JOIN (RIGHT JOIN) lewe (prawe) złączenie zewnętrzne, używamy, gdy chcemy uwzględnić wszystkie wiersze z tabeli stojącej po lewej (prawej) stronie JOIN, w sytuacji, gdy w tabeli stojącej po prawej (lewej) stronie JOIN może nie być odpowiedników dla wszystkich wierszy z tabeli z lewej (prawej) strony, np. zapytanie ze złączeniem wewnętrznym SELECT d.department, d.budget, e.full_name, e.salary FROM department d JOIN employee e ON(d.dept_no=e.dept_no) uwzględnia tylko te działy, które mają co najmniej jednego pracownika. Jeżeli chcemy uwzględnić wszystkie działy w zestawieniu, to musimy użyć złączenia zewnętrznego, np. lewe złączenie zewnętrzne: SELECT d.department, d.budget, e.full_name, e.salary FROM department d LEFT JOIN employee e ON (d.dept_no=e.dept_no) (lewa tabela) (prawa tabela) pełne złączenie zewnętrzne FULL JOIN: SELECT d.department, d.budget, e.full_name, e.salary FROM department d FULL JOIN employee e ON (d.mngr_no=e.emp_no) 15