DB1 cvičení 4 – spojení tabulek a složitější dotazy

Transkript

DB1 cvičení 4 – spojení tabulek a složitější dotazy
DB1 cvičení 4 – spojení tabulek a složitější dotazy
Spojení tabulek
Navázání spojení mezi tabulkami
Cizí klíč tabulky Auto referencuje primární klíč tabulky TypAuta:
CREATE TABLE TypAuta
(pk_ta NUMBER(2) PRIMARY KEY,
...);
CREATE TABLE Auto;
(...
fk_ta NUMBER(2) REFERENCES TypAuta,
...)
•
Datové typy cizího klíče a primárního klíče si musí odpovídat!
•
Pro smazání tabulek, které mají navázány cizí klíče je třeba za DROP uvést
CASCADE CONSTRAINTS, např.
DROP TABLE Tabulka CASCADE CONSTRAINTS;
Dotaz nad více tabulkami
SELECT sloupce FROM Tabulka1, Tabulka2
WHERE podminky AND Tabulka1.pk_t1 = Tabulka2.fk_tab1;
•
Jelikož atributy v různých tabulkách mohou mít stejné názvy, je třeba používat plně
kvalifikovaná jména atributů ve formátu tabulka.atribut, tedy např.
SELECT Zakaznik.prijmeni FROM Zakaznik, Zakazky
WHERE Zakaznik.id = Zakazky.fk_zak;
•
Tabulek může být i více než 2. Musí být uvedeny v pořadí, které umožňuje jejich
vzájemné spojení (tedy např. člen-členství-klub, nikoliv člen-klub-členství) a všechny
je potřeba navzájem svázat v podmínce přes dvojice cizí klíč-primární klíč.
•
Tabulky si lze v dotazu přejmenovat pro pohodlnější (kratší) psaní:
SELECT X.sl1, Y.sl2 FROM Tabulka1 X, Tabulka2 Y
WHERE podminky AND X.pk_t1 = Y.fk_tab1;
•
Díky přejmenování je pak možné v dotazu použít dvakrát stejnou tabulku:
SELECT X.rod_c AS prvni, Y.rod_c AS druhy
FROM Zakaznici X, Zakaznici Y
WHERE X.adresa = Y.adresa AND X.rod_c < Y.rod_c
(Dotaz najde dvojice zákazníků, kteří mají stejné adresy. Podmínka X.rod_c <
Y.rod_c zajistí, že každá dvojice bude vypsána jen jednou).
Vazební tabulky
Spojení dvou tabulek umožňuje navázat několik záznamů z referencující tabulky na jeden
záznam v referencované tabulce (několik cizích klíčů může ukazovat na jeden primární klíč,
tzv. vztah 1:N).
Pro navázání vazeb typu M:N je třeba použít tzv. vazební tabulku, jejíž řádky budou k sobě
vázat vždy dva záznamy z referencovaných tabulek. Každý řádek může navíc obsahovat
doplňkové atributy týkající se vztahu.
Primární klíč v tomto případě je tvořen dvojicí cizích klíčů (dva záznamy má smysl k sobě
vázat pouze jednou vazbou). Specifikaci prim.klíče a cizích klíčů nyní ale musíme provést
odděleně:
CREATE TABLE Sberatel
(pk_s NUMBER(2) PRIMARY KEY,
...);
CREATE TABLE Klub
(pk_k NUMBER(2) PRIMARY KEY,
...);
CREATE TABLE Clenstvi
(fk_Sberatel NUMBER(2),
fk_Klub NUMBER(2),
...
PRIMARY KEY (fk_Sberatel, fk_Klub),
FOREIGN KEY (fk_Sberatel) REFERENCES Sberatel,
FOREIGN KEY (fk_Klub) REFERENCES Klub);
Vnořené dotazy
V SQL lze konstruovat vnořené dotazy. Vnořený dotaz můžeme použít např. pro
1. Spočítání agregovaného údaje, který použijeme v nadřazeném dotazu jako
podmínku:
SELECT nazev_kina FROM Kina K
WHERE 8 <
(SELECT COUNT(jmeno_f) FROM Predstaveni P
WHERE P.nazev_kina = K.nazev_kina;
(Kina, kde mají více jak 8 filmů na programu)
2. Jako alternativu spojení, např.
adresy kin, kde dávají film Kolja lze napsat jako
SELECT DISTINCT adresa FROM Kina k, Predstaveni p
WHERE k.id_kina = p.kino AND jmeno_f = ‘Kolja’);
nebo
SELECT adresa FROM Kina
WHERE nazev_k IN
(SELECT nazev_k FROM Predstaveni WHERE jmeno_f=’Kolja’);
3. Zjištění jiného údaje pro podmínku, např. jméno nejnovejšího kina
SELECT nazev_kina FROM Kina
WHERE datum_zalozeni = (SELECT MAX(datum_zalozeni) FROM Kina).
Pozn.: dotaz předpokládá, že nejnovější kino je jen jedno, pokud by jich mohlo být
více, je třeba použít IN místo =.
Úplná syntaxe příkazu SELECT
SELECT [DISTINCT] { * | seznamSloupcu}
FROM jmenoTabulky [, jmenoTabulky] ...
[WHERE vyberovaPodminka]
[GROUP BY seznamSloupcu [HAVING vyberovaPodminka]]
[ORDER BY jmenoSloupce [ASC | DESC] [, jmenoSloupce [ASC | DESC] ...]]
{ ... | ...} ... jedna z možností
[ ... ] ... volitelná část
seznamSloupců je seznam sloupců oddělených čárkami. Za sloupec považujeme i agregační
funkci, tedy např. COUNT(*) se píše na místo sloupce.
Úkoly:
Pozn: dotazy provádějte k datu 26.10.2005
Dotazy na jednou tabulkou:
1. Zobrazte jména, příjmení a datum narození doktorů starších 40 let. Seřaďte podle stáří
od nejmladšího.
FIRSTNAME SURNAME BIRTHDATE
------------ ---------- --------------Petr
Bily
14.2.1962 0:00
Ivan
Zeleny 15.11.1955 0:00
Jan
Novak
4.1.1950 0:00
Joe
Davidson 27.3.1949 0:00
2. Které specializace lze nalézt v Praze?
SPECIALIZATION
----------------practicioner
surgeon
3. Kolik bodů celkem nashromáždili psychologové? Přejmenujte správně název sloupce
výsledku!
Celkem bodu
-------------1500
4. Kolik bodů celkem nashromáždili praktičtí lékaři starší 40 let?
SUM(POINTS)
--------------
250
5. Kolik bodů průměrně nashromáždily jednotlivé specializace? Nezapomeňte na
přejmenování sloupce!
SPECIALIZATION Prumerne
----------------- ---------------------------------------practicioner
162,5
psychologist
750
surgeon
133,333333333333333333333333333333333333
6. S použitím znalostí z předchozího úkolu vytvořte variantu úkolu 3, jejímž výsledkem
bude
SPECIALIZATION Celkem bodu
----------------- ---------------------------------------psychologist
1500
7. Vypište specializace, které nashromáždily víc jak 500 bodů (použijte GROUP BY a
HAVING).
SPECIALIZATION BODU
----------------- ------practicioner
650
psychologist
1500
Dotazy nad více tabulkami:
8. Které diagnózy diagnostikoval Dr. Asklepios?
DIAGNOSIS
-----------alergy
diarrhoea
flu
tonsillitis
9. Data vyšetření pacienta Milana Zeleného.
VISITDATE
--------------27.7.2000 0:00
11.11.2000 0:00
3.11.2000 0:00
10. Jména a příjmení doktorů, kteří již někoho diagnostikovali (tj. mají záznam v tabulce
návštěv).
FIRSTNAME SURNAME
------------ ---------Ivan
Drago
Ivan
Zeleny
Jan
Novak
Joe
Davidson
Kostas
Kokkinos
Michailos Asklepios
Milan
Novak
Petr
Bily
11. Jména a příjmení pacientů Dr. Jana Nováka (nezapomeňte, že sloupce jméno a
příjmení mají jak doktor, tak pacient!).
FIRSTNAME SURNAME
------------ ---------Jan
Novak
Michal
Capek
Milan
Zeleny
Petr
Novak
12. Jména, příjmení a data narození pacientů Dr. Jana Nováka, kteří jsou mladší než 30
let.
FIRSTNAME SURNAME BIRTHDATE
------------ ---------- -------------Michal
Capek
4.12.1999 0:00
Milan
Zeleny 5.5.1988 0:00 ¨
13. Kolikrát byl u doktora p. Joe Smith?
COUNT(*)
----------2
Vnořené dotazy
14. Kteří doktoři (příjmení) diagnostikovali více jak třikrát?
SURNAME
---------Asklepios
Novak
15. Příjmení lékařů, kteří diagnostikovali nespavost: pomocí spojení a vnořeného dotazu
s IN.
SURNAME
---------Novak
Zeleny
16. Nejstarší doktor
ID FIRSTNAME SURNAME SPECIALIZATION ADDRESS
BIRTHDATE
POINTS
----- ------------ ---------- ----------------- --------------------- -------------- --------1004 Joe
Davidson practicioner
London, Regent str. 5 27.3.1949 0:00 50
Speciální dotazy
1. Najděte dvojice lékařů se stejnou specializací (použijte dvakrát stejnou tabulku
v jednom dotazu spolu s přejmenováním, viz výše).
PRVNI
DRUHY
--------- -------Asklepios Davidson
Zeleny Novak
Asklepios Novak
Davidson Novak
Drago
Kokkinos
Drago
Bily
Kokkinos Bily
Asklepios Down
Davidson Down
Novak
Down

Podobné dokumenty

Přihláška do školky

Přihláška do školky Provozovatel: MODERNÍ ŠKOLKA, s.r.o., IČO: 24308528

Více

zpráva z projektu

zpráva z projektu prezentační vrstva, která je složena ze dvou nástrojů ovladatelných pomocí hlavních formulářů. Jedná se o nástroj pro vyhledávání náhrobků podle zadaných údajů o zesnulých osobách a nástroj pro viz...

Více

ADS4-TT

ADS4-TT vlastní větu. Pak mluvíme o tzv. externích klíčích. Je tedy dána alespoň jedna množina klíčů identifikujích dané věty, tj. dvě různé věty nemohou mít stejnou hodnotu klíče. Pokud již takových množi...

Více

Elektronické publikování

Elektronické publikování Pokud uvnitř jednoho elementu použijeme druhý, pokud nepředepíšeme jinak, předdefinovaná vlastnost se dědí.

Tohle jeopravdu důležité.

(Tag em se používá pro zvýraznění implicitně...

Více

Architektura GIS z pohledu toků dat

Architektura GIS z pohledu toků dat „lepících“ dohromady původně pro jiné účely navržený software (učebnicovým příkladem může posloužit produkt FRAMME od společnosti Intergraph). Téměř vždy poslouží jako nejnižší (datová) vrstva návr...

Více

Neurolingvistické programování (NLP)

Neurolingvistické programování (NLP) úroveň Intermediate - rozvíjejte své dovednosti Termín

Více

Plná moc Power of Attorney

Plná moc Power of Attorney jméno a příjmení fyzické osoby full name of individual sídlo právnické osoby registered seat of legal entity trvalé bydliště nebo místo podnikání fyzické osoby permanent address or business premise...

Více

Pentathlon Meeting 2005

Pentathlon Meeting 2005 SK Přerov - track and field club

Více