sql - multiedu.tul.czmultiedu.tul.cz/.../databazove_systemy/sql_do_pdf.pdf · vladimíra zádová,...

129
SQL strukturovaný dotazovací jazyk Structured Query Language (SQL)

Upload: phamtuyen

Post on 12-Feb-2018

240 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

SQL

strukturovaný dotazovací jazyk

Structured Query Language (SQL)

Page 2: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL - historie

� 1974-75 - IBM - 1.prototyp - SEQUEL

� od 1979 - do praxe - ORACLE (1979) IBM - SQL/DS (1981), DB/2

(1983)

� postupně přijímán jako standard pro přístup k datům v relačních databázích

� Pozn. - QBE = QUERY BY EXAMPLE

Page 3: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL - normy

� SQL 86 - DDL, DML, DCL1986 - schválena ANSI norma SQL, základem dialekt DB2, 1987 - přijato mezinárodní standardizačníorganizací ISO

� SQL 89 - revize - 1989 rozšíření o specifikaci IO

� SQL2 - r. 1992 revize, SQL3 - nyní

� snaha po standardizaci - možnost kompatibility,p řenositelnost - SAG konsorcium

Page 4: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

Standardizace SQL

� Od r. 86 …..

� 3 hlavní edice standardů - SQL 86, SQL92, SQL99

� Menší edice SQL89

Pozn. :» po přijetí standardu SQL 92 se mluvilo o SQL jako o SQL3

– od roku 1999 mají být standardy označovány : SQL: rrrr -(SQL:1999)

– SQL3 - přestává se používat, nyní SQL4» SQL4 chápána jako kontejner, kde všechny budoucí

standardy– standard 92 je implementován pouze částečně

Page 5: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL

je neprocedurální jazyk

specifikuje CO požadujeme nikolijak toho dosáhneme.

– DATA DEFINITION LANGUAGE - DDL

– DATA MANIPULATION LANGUAGE - DML

– DATA CONTROL LANGUAGE - DCL

Page 6: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DATA DEFINITION LANGUAGE - DDL

vytváření databáze a relační struktury

– vytváření, rušení a aktualizace relací(tabulek)

– vytváření a rušení indexů

– vytváření a rušení pohledů - (ne alter)

– Integritní omezení a DDL (create domain, check, Primary key )

– Datové typy podporované SQL-92

Page 7: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DATA MANIPULATION LANGUAGE -DML

� příkazy k provádění základní manipulace s daty :vkládání, modifikace, rušení dat z relací

– INSERT

– UPDATE

– DELETE

� k výběru dat z databáze - jednoduché i složitédotazy:

– SELECT

Page 8: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DATA CONTROL LANGUAGE - DCL

� příkazy GRANT, REVOKE

Přikazy pro tvorbu aplikací

pro spolupráci SQL s hostitelským jazykem

-- příkazy DECLARE CURSOROPEN CURSOR - před 1. z množiny

FETCH CURSOR - přesun o 1CLOSE CURSOR

� příkazy pro uživatelskou transakci -ROLLBACK, COMMIT

Page 9: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS 14

SQL příkazy

– z rezervovaných (klíčových) slov a uživatelem definovaných slov.

– Rezervovaná slova jsou nedílnou součástípříkazů SQL

– uživatelem definovaná slova jsou slova používaná pro pojmenování databázových relací, sloupců, pohledů

Page 10: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS 15

Psaní SQL příkazů

� Klí čová slova příkazu - velkými písmeny

� Uživatelem definovaná slova - malými písmeny

� Každá klauzule příkazu začíná na novém řádku

� [text] - volitelná část příkazu

� [, ....] - možné opak. předchozíčásti uzavřené v { }

� [text | text] možný výběr některé z variant

� {text | text} nutný výběr některé z variant

� ( ) součást příkazu

Page 11: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DATA MANIPULATION LANGUAGE

Page 12: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS 128

INSERT - vstup dat

INSERT INTO název relace [(výčet atributů)] { VALUES ( výčet hodnot atributů)| SELECT-příkaz}

kde:

VALUES -pro vstupprávě jednohořádku relace- pokud všech atributů , pak nemusí být uveden výčet atributů specifikovaných ve výčtu

SELECT - pro vstup více řádků najednou ( z 1 či více relací)

struktura řádků vrácených vnořeným příkazem SELECT musí být kompatibilní se strukturou naplňované relace.

Page 13: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

� výčet atributů- nepovinné - pokud jsou vkládány hodnoty atributů v tom pořadí, v jakém byly definovány a zároveňbudu vkládat hodnoty všech atributů

� výčet hodnot atributů - je oddělen čárkou, pořadíhodnot atributů a datový typ souhlasí s definicí relace, resp. s pořadím uvedeným ve výčtu atributů;u atributu typu CHAR je hodnota v “ ”pro neznámou hodnotu - použití NULL

Page 14: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

Není-li do atributu relace vložena hodnota při INSERTu - pak bude obsahovat :

�DEFAULT -hodnotu- pokud je určena při definici atributu

�NULL - není-li určena DEFAULT hodnota

� signalizace chyby :�pokud u atributu určeno NOT NULL, zároveň není určena

DEFAULT hodnota a nebyla-li vložena hodnota

� byla-li vložena hodnota, která porušuje definovanou jedinečnost hodnoty atributu.

Page 15: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

INSERTPř.

� INSERT INTO sql-sport.ZAKAZNIK

(adresa, discount, mesto, czak)

VALUES(" Horní ulice 777", 9, "Brno", 1).

� INSERT INTO sql-sport.ZAKAZNIK

(adresa,discount, mesto, czak)

SELECT Address, Discount, City,Cust-Num

FROM sport19.Customer.

Page 16: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

UPDATE - aktualizace dat

UPDATE název relace SET jméno atributu= {NULL | výraz} [, jméno atributu = {NULL | výraz}]...

[WHERE podmínky]

� Jedním příkazem lze měnit hodnotu jednoho či více atributů v rámci jedné relace

Page 17: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SET - přiřazuje atributu / ům novou hodnotu ( konstanta, NULL, název atributu či

proměnné, aritmetický výraz)WHERE -nepovinné, aktualizuje všechny řádky,

které vyhovují podmíncepokud není uvedeno WHERE -aktualizuje dané atributy ve

všech řádcích

SystSystéém odmm odmíítne aktualizaci, pokud novtne aktualizaci, pokud novááhodnota nebude respektovat nhodnota nebude respektovat něěkterkter áá z z defdef. . omezenomezeníí atributuatributu

Page 18: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

UPDATEPř.

� UPDATE zakaznik

SET zeme = zeme + "/EU”

� UPDATE radek-obj

SET qty = gty + qty/12,

cena = cena * 2

WHERE c-pol = 125.

Page 19: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DELETE - rušení dat

DELETE FROM název relace [WHERE podmínky]

Jedním příkazem lze zrušit jeden či více řádků jednérelace

WHERE - vymaže z relace všechny řádky, které vyhovujípodmínce

Pokud nebude uvedena podmínka , zruší se všechny řádky relace- ale nezruší se definice relace

Page 20: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS 3

příkaz SELECT - použití

� pro výběr dat z jedné relace� pro výběr dat z více relací

• vnější spojení, vnitřní spojení, samospojení� provádění operací

(UNION, INTERSECT, EXCEPT).� Hnízdění ( nesting) dotazů - do příkazu SELECT,

INSERT, UPDATE, DELETE • strukturované dotazy jednoduché a souvztažné

Page 21: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS 17

SELECT příkaz

SELECT klauzule

FROM klauzule

[WHERE klauzule ]

[GROUP BY klauzule]

[HAVING klauzule ]

[ORDER BY klauzule]

Page 22: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkaz

� SELECT- povinné, specifikuje sloupce výstupu -atributy, konstanty, aritmetické výrazy, agregačnífunkce

� FROM - povinné, uvádí relace, z nichž data vybírána

� WHERE - nepovinné, uvádí podmínky výběru

� GROUP BY - nepovinné, vytváří skupiny řádků, z jejichžhodnot jsou odvozeny souhrnné hodnoty - s agr.funkcemi

� HAVING - nepovinné, uvádí výběrové podmínky,vztahuje se ke GROUP BY

� ORDER BY - nepovinné, k uspořádánířádků výstupnítabulky ( je ve většině implementací, není ve výchozí normě)

Page 23: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS 19

SELECT příkaz

� Pořadí klauzulí nemůže být měněno.

� Postup při vyhodnocování : FROM WHEREGROUP BY HAVINGORDER BY

Page 24: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazSELECT - FROM

SELECT [ALL |DISTINCT] {*|jméno atributu| výraz}[,...]

FROM { jméno relace1 [alias]…..

alias (correlation-name)-pokud se budu chtít na danou relaci v příkazu SELECT odvolávat jiným jménem než je jméno tabulky (důvod- např.dlouhéjméno tabulky), nebo při self-join (samospojení)

Page 25: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT klauzule SELECT

ALL|DISTINCTALL|DISTINCT– ALL znamená všechny - i opakující se řádky ,

je to defaultní zadání

– DISTINCT » pokud nechci opakovánířádků se stejnými

hodnotami ( = duplicitních řádků)

» potlačuje duplicitnířádky -až při zobrazení výsledné relace

* * pokud chci zobrazit všechny atributy z relace/relací

Page 26: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazSELECT

� jméno atributu - jednoznačný název - v rámci databáze :

jméno relace.jméno atributu

� Výraz - konstanty , numerické, znakové, datumové, logické, funkce aritmetickévýrazy +, -, *, /, ( )

Pozn.: mezi operátory minimálně 1 mezera, ve výrazech kombinace atributů , konstant

Page 27: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazSELECT

.. {jméno atributu | výraz } FORMAT " " AS " “ , atribut1......

� od SQL2 lze přejmenovat názvy sloupců ( u atributů) ,

či u výrazů pojmenovat -

jméno atributu| výraz AS název sloupce

FORMAT - pokud chci jiný než definovaný v DDL

Page 28: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazWHERE

� ke spojení více relací ( implicitní) ( porovnání atributů, podle kterých se mají spojit

� pro podmíněný výběr prvk ů

pozn:

z hlediska relační algebry SELEKCE

je-li více podmínek výběru spojeníAND, OR

Page 29: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

podmínky výběru:klasicky - pomocí NOT, AND, OR , > , <, <=,

>= ,<>výraz1 relační_operátor výraz2

výrazem může být : konstanta, atribut, funkce,aritmetický výraz

SELECT příkazWHERE

Page 30: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT -WHEREBETWEEN /NOT BETWEEN

pro spojitý interval , výraz1 -dolní, výraz2 - horní hraniceintervalu,

- za výrazx lze uvést konstantu, atribut, aritmetickývýraz...-

WHERE výraz [ NOT] BETWEEN výraz1 AND výraz2

Př.: czak BETWEEN 1 AND 5 ................ C-zak >= 1 AND c-zak <= 5

name BETWEEN "a" AND "dz" odmena NOT BETWEEN plat AND plat +1400

Page 31: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT -WHEREIN /NOT IN

• pro nespojitnespojit éé hodnoty• zjednodušuje zápis výběrových podmínek (OR)• výběr ze seznamuhodnot ,

• výčet hodnot -nelze uvádět jména atributů, výrazy

WHERE výraz [ NOT ] IN (výčet hodnot)

Př.: c-zak IN (1,2,3,4,5)...c-zak = 1 OR c-zak = 2 OR ......

Page 32: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

� pouze pro atributatribut relacerelace

WHERE jméno atributu IS [ NOT] NULLPř.: všechny, které nemají uveden údaj

- dat-odesl IS NULL

Pozn.: není pravda, že NULL hodnota je rovna jiné NULL

hodnotě (t.j. neurčené hodnotě), NULL hodnoty si

nemohou být rovny navzájem

ale při potlačení výstupníchřádků s duplicitními

hodnotami jsou NULL hodnoty v rámci atributu považovány

výjimečně za duplicitní

SELECT - WHERE

NULL / NOT NULL

Page 33: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT -WHERELIKE /NOT LIKE

� porovnává se vzorovou hodnotou� lze jím testovat jen atributyjen atributy� pro řešení dotazů, které nelze řešit přímým srovnáváním

WHERE jméno atributu [ NOT] LIKE "vzor" [ ESCAPE "oddělovač" ]

kde: % - více znaků_ - jeden znak

Př.: atribut LIKE " % OV" atribut LIKE " 13 / %" ESCAPE "/" vyhledá hodnoty

atributu 13%

Page 34: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT *FROM zakaznikWHERE mesto LIKE '% dec%';

Page 35: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

� implicitně : výstup podle PK tabulky uvedené první za FROM, hodnoty jsou uvedeny vzestupně.

� ORDER BY slouží ke změně implicitních podmínek:

ORDER BY {{ jméno atributu |n } ASC|DESC} [,..]

n - číslo pořadí sloupce za SELECT klauzulí - výhoda pro odvozené hodnoty

ASC - vzestupně - standardně

DESC - sestupně

SELECT

ORDER BY klauzule

Page 36: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

ORDER BY

�Kriteria oddělena čárkou, prvně uvedený je nadřazený následujícím

�Některé implementace jazyka vyžadují, aby atribut použitý jako kriterium třídění byl obsažen v klauzuli SELECT.

Page 37: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

BOOLEOVSKÉ OPERÁTORY

� AND , OR - užití při více výběrových podmínkách

AND - musí být pravdivé všechny uvedenépodmínky

OR - alespoň jedna z podmínek pravdivá

� Relační operátory : <, >, <=, >=, <>� Pořadí vyhodnocování

závorky � násobení , dělení � odčítání , sčítání � NOT � AND �OR

Page 38: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL SELECT

�DML - agregační funkce � klauzule GROUP BY, HAVING

�spojení� vnitřní spojení

� vnější spojení

� Samospojení

�strukturované příkazy� jednoduché� souvztažné

�operace UNION, INTERSECT, EXCEPT

�dynamické a statické relace

Page 39: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS 17

SELECT příkaz a agregace

SELECT klauzule

FROM klauzule

[WHERE klauzule ]

[GROUP BY klauzule]

[HAVING klauzule ]

[ORDER BY klauzule]

Page 40: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE

� = aggregate functions, column functions

� SUM

� AVG

� MIN

� MAX

� COUNT

� použití v klauzuli SELECT� umožní z hodnot atributů v databázi odvodit souhrnné ,

agregované údaje

Page 41: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE

� Rozdíl agregačních funkcí a aritmetických výrazů

aritmetické výrazy za klauzulí SELECT vypočítávají novéúdaje z hodnot v rámci jednotlivých řádků

agregační funkce - souhrnná hodnota je odvozena z hodnot určitého atributu relace:

- ze všech řádků relace

- z konkrétních řádků určených podmínkami za WHERE- ze skupin řádků definovaných klauzulí GROUP BY

Page 42: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE

� agregace bez klí če (agregačního)

– ze všech řádků původní relace či z řádků vyhovujících podmínkám za WHERE se vytvoří jeden agregát. Výsledkem je jeden řádek.

� agregace s klí čem– častěji , vyplývá z požadavku zjištění hodnot

agregovaných funkcí za menší shluky(seskupení).

– Výsledkem je více řádků - a to tolik řádků, kolik různých hodnot bude obsaženo ve sloupci (sloupcích) podle kterých chceme agregovat.

Page 43: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE

� Specifikace agregačního klíče

– v klauzuli GROUP BY

– jednoduchý klí č ( 1 atribut), složený klí č(více atributový)

Page 44: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE

� DISTINCT– u agregační funkce potlačuje duplicitní hodnoty

argumentu funkcepři výběru dat z databázepřed vlastním provedením výpočtu

( při použití v klauzuli SELECT potlačuje duplicitnířádky až při zobrazení výsledné relace).

� NULL - neznámé, nedefinované hodnoty

– se nezapočítávají do počtu, součtu, průměru, max, min

– Výjimka COUNT( * ) - zjistí počet řádků bez ohledu na nedefinovanost obsahu.

Page 45: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE - SUM

SUM ( [ DISTINCT ] argument)

- vrací součet hodnot argumentu

- argument:

- numerický atribut

- aritmetický výraz vracející numerickouhodnotu

Page 46: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE - AVG

AVG ( [ DISTINCT ] argument)

Vrací průměrnou hodnotu z určených ( NOT NULL) hodnot argumentu

argument:

- numerický atribut

- aritmetický výraz vracející numerickouhodnotu

Page 47: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE - MAX, MIN

MIN ( [ DISTINCT ] argument)

MAX ( [ DISTINCT ] argument)

vrací minimální, resp. maximální hodnotu argumentu

argument:

atribut

aritmetický výraz neobsahující znakovou konstantu

Page 48: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE - COUNT

COUNT ( * )

Vrací počet hodnot v rámci atributů relace, tedy počet řádkůrelační tabulky .

COUNT ( [ DISTINCT ] atribut)

Funkce COUNT s argumentem je v různých systémech implementována odlišně.Standardně vrací počet určených hodnot daného atributu- t.j. počet hodnot atributu různých od NULL ( = NOT NULL).

Některé implementace připouští pouze syntaxi s povinným užitím DISTINCT : COUNT ( DISTINCT atribut).

Page 49: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE - COUNT

Rozdíl COUNT ( * ) a COUNT ( DISTINCT atribut)

– je-li atribut povinný a neobsahuje duplicitní údaje

» výsledky obou jsou totožné.

– Je-li atribut povinný a obsahuje duplicitní údaje

» pak odlišný výsledek

– není-li atribut povinný - budou -li nedefinované (NULL) hodnoty atributu v některých prvcích relace

» pak nejsou shodné.

Page 50: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkazAGREGAČNÍ FUNKCE - COUNT

PŘ.SELECT COUNT(*),COUNT(DISTINCTc-obj),

COUNT( DISTINCT c-zak), COUNT(DISTINCT d-exp)

FROM objednavky

– výsledek: 214, 214, 71, 53

– Jak byste interpretovali tento výsledek, co z toho vyplývá

Page 51: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SELECT příkaz- AGREGAČNÍ FUNKCE -určení atribut ů a funkcí za SELECT

� Není možné za SELECT uvádět atributy / výrazy , jejichžhodnoty jsou vztaženy k prvkům relace a uvádět agregačnífunkce, které jsou vztaženy buď k celé relaci, či pouze k některým řádkům dané relace.

� Při agregaci není nutné se omezit jen na jednotlivé atributy , lze je použít na jakýkoli výraz , v němž se budeme odkazovat na více atributů původní relace

� příkaz GROUP BY slouží k vytváření dílčích shluků, neuvedu-li GROUP BY pak se jedná o agregaci bez klíče výběru, potom je nutné se zamyslet nad poli uvedenými za select - např. budu chtít objem zboží celkem , ale uvedu ještě atr. objednávka, či zákazník. Toto je nepToto je nepřříípustnpustnéé.

Page 52: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS 61

SELECT příkazGROUP BY, HAVING

� HAVING - pouze užití s klauzulí GROUP BY

– omezuje výstup agregovaných skupinagregovaných skupin

� obdoba WHERE, ale WHERE filtruje řádky

� jména atributů za HAVING musí být obsaženy v GROUP BY nebo musí být obsaženy v agregované funkci.

� Použití [NOT]BETWEEN, [NOT]IN, ...viz WHERE

Page 53: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Druhy spojení

Page 54: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SPOJENÍ (join )

� je-li třeba pracovat s daty z více relací - zřetězenířádků relacídle určité podmínky. Mluvíme o vvššeobecneobecnéém m joinujoinu

� Nejčastější spojenídle shody hodnot atributů – tzv. ekvivalentnekvivalentníí joinjoin

� explicitně spojenív SQL neexistuje, vyjadřuje se pomocíSELECT příkazu:

– ve FROMFROM - uvedením spojovaných relací

– za WHEREWHERE uvedením podmínky spojení– ale jen vnitřníspojení

– (atributy relací musí být kompatibilní)

Page 55: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SPOJENÍ (join )

– od standardu SQL2 kromě operátorů <, >, >=, <= lze použít pro spojení join operátory:

pro vn ější spojení - outer join

� LEFT JOIN, RIGHT JOIN, FULL JOIN(ve většině současných relací zatím není)

– spojení přes rovnost (ekvivalentní join ), přirozený join (pojení max množiny shodných atributů)

Page 56: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SPOJENÍ (join )druhy join :

� vnitřní –inner join– zobrazí jen ty řádky dvou či více relací, které splňují

podmínky spojení

– vnitřní spojení lze specifikovat 2 způsoby:» implicitn ě :

� pomocí klauzule FROM (uvedení tabulek) a WHERE (uvedení podmínek spojení)

» explicitn ě:� specifikací v klauzuli FROM ( uvedením tabulek

včetně typu a podmínek spojení):

Page 57: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SPOJENÍ (join )inner join - explicitn ě

jméno relace1[INNER] JOIN jméno relace2 ON podmínky spojení

[[INNER] JOIN jméno relace3 ON podmínky spojení ........]

– ON klauzule může specifikovat více podmínek -pak spojenílogickými operátory AND, OR, NOT

– lze kombinovat LEFT JOIN a INNER JOIN– je-li spojeno více tabulek- vyhodnocovvyhodnocov áánníí spojenspojen íí se se

provprov ááddíí zleva dopravazleva doprava– pokud za FROM bude uvedeno více tabulek bez podmínek spojení

- pak výstup odpovídá kartézskému součinu

Page 58: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SPOJENÍ (join )

SELECT zakaznik.c-zak, zakaznik.jmeno, objednavka.c-obj, objednavka.d-obj

FROM zakaznik, objednavka

WHERE zakaznik.c-zak = objednavka.C-zak.

SELECT zakaznik.c-zak, zakaznik.jmeno, objednavka.c-obj, objednavka.d-obj

FROM zakaznik INNER JOIN objednavka ON zakaznik.c-zak = objednavka.C-zak

Page 59: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SPOJENÍ (join ) vnější – outer join

� u vnějšího spojeníje důležité, zda se jedná o levlevéé či pravpravéévnější spojení - není symetrické

� levé vnější spojení lze uvést pomocí LEFT, event. LEFT OUTER JOIN

SELECT zakaznik.c-zak,zakaznik.jmeno, objednavka.c-obj, objednavka.d-obj

FROM zakaznik LEFT JOIN objednavka ON zakaznik.c-zak = objednavka.C-zak.

Page 60: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SPOJENÍ (join )

levé vnější spojení:jméno relace1[alias ]

[INNER|LEFT[OUTER] ] JOIN jméno relace2 [alias] ON podmínky spojení[INNER|LEFT[OUTER] ] JOIN jméno relace3 [alias] ON podmínky spojení.....

pravé vnější spojení:jméno relace1[alias ] RIGHT[OUTER] JOIN

jméno relace2 [alias] ON podmínky spojení

Page 61: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SPOJENÍ (join )

SELECT klauzuleFROM { jméno relace [correlation-name] |

implicit-join |explicit-join }

[WHERE klauzule][GROUP BY atribut [,atribut2]...] [HAVING klauzule] [ORDER BY klauzule]

Page 62: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

Vyjádření různých spojení

� SQL92 - rozšíření o – spojení křížem

» …… FROM r CROSS JOIN s ( totéž jako FROM a,b)

– přirozené spojení» …… FROM r NATURAL JOIN s

– spojení přes rovnost hodnot zadaných stejnojmenných sloupců

» …. ..FROM r JOIN s USING (a,b)

– spojení přes obecnou spojovací podmínku» ……FROM r JOIN s ON a<=b » Tendence = oddělit SELEKCI a SPOJENÍ

– LZE POUŽÍT PRO VNIT ŘNÍ I VN ĚJŠÍ SPOJENÍ( INNER, OUTER - LEFT , RIGHT, FULL)

Page 63: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SPOJENÍ (join ) - vlastní –self join

� užití, pokud budu potřebovat vícekrát do téže relace

� je možné uvést tuto relaci (za FROM ) vícekrát - avšak s použitím alias

Page 64: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Strukturované dotazy

Page 65: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZY

� Jazyk SQL je označován jako strukturovaný právě proto, že je možné vnořovat SELECT příkazy

� Vnořování se užívá pro složitější dotazy, vyhodnocováníprobíhá postupně po jednotlivých subdotazech

Page 66: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZY

� Subdotaz ( = vnitřní dotaz, vnitřní příkaz )– je příkazSELECT vnořený do výběrové podmínky

WHERE SQL příkazu,může být i za HAVING

– Vnitřní příkaz dodává hodnoty pro vyhodnocenípodmínky

� Vnější příkaz – je příkaz, do kterého je příkaz SELECT vnořen.

– vnější příkaz - je zejména SELECT, užívá se pro INSERT, UPDATE, DELETE

Page 67: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZYvzájemné vztahy vnějších a vnitřních dotazů

� jednoduché» vyhodnocování dotazů zevnitř ven:

�vnitřní příkazje vyhodnocen jako první, nezávisle na vnějším příkazu

�vnější příkaznásledně využívá výsledků vnořeného dotazu

� souvztažné» vyhodnocování dotazů složitější:

�vnitřní příkaz pracuje na základě hodnot dodaných vnějším příkazem

�vnitřní dotaz využíváa tedy závisí na hodnotáchdodávaných do subdotazu vnějším dotazem

Page 68: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZY- vnit řní dotaz

� Podle typů výsledků, které vrací lze rozlišit subdotazy:

– vracející množinu hodnot - vždy jim předcházíIN nebo relační operátor sALL , ANY nebo SOME

– vracející maximálně jednu hodnotu -uvozené relačním operátorem bezmodifikace

– subdotazy fungující jako test existence -uvozené klíčovým slovem EXISTS

Page 69: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZY - syntaxe p říkazu:

SELECT {název atributu | výraz | * } [,....]FROM název relace [,...]WHERE výraz { [ NOT ] IN |

relační operátor [ ALL | ANY | SOME ]|[ NOT] EXISTS }( SELECT {název atributu | výraz | * }

[,....]FROM název relace [,...]

WHERE výběrové podmínky] )

Page 70: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZY omezení pro subdotazy

� vnořený SELECT je uzavřený v ( )

� v klauzuli WHERE vnějšího příkazu musí platitkompatibilitakompatibilitamezi hodnotou výrazua hodnotou vrácenou subdotazem

� klauzuleSELECT vnořeného subdotazu, které předcházíIN , nebo pouze relační operátor může obsahovat maximálně jeden atribut nebo výraz– subdotaz, kterému předcházíALL, ANY, SOME může

obsahovat klauzule GROUP BY a HAVING– v subdotazu obsahujícím klauzuli GROUP BY nelze

použít klíčového slova DISTINCT– subdotaz nemůže obsahovat klauzuli ORDER BY

Page 71: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZY subdotazy uvozené [ NOT ] IN

WHERE výraz [ NOT ] IN ( SELECT příkaz)

� výsledkem subdotazu může být množina hodnot

� ve vnějším dotazu tato množina hodnot nahrazuje výčet hodnot v seznamu, se kterým pracuje IN.

� Vyhodnocení podmínky vnějšího dotazu:

��poupoužžitit íí IN IN -- pravdivá, je-li zjištěna shoda hodnoty výrazu z WHERE klauzule alespoň s jednou hodnotou z množiny hodnot vrácených subdotazem

� poupoužžitit íí NOT INNOT IN - pravdivá, pokud nebude rovna žádné z vrácené množiny hodnot

Page 72: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZY uvozené operátory : <, >, =, < >, < =, > =

WHERE výraz relační operátor [ ALL | ANY | SOME ] ( SELECT příkaz)

� bez ALL, ANY , SOME– smí vrátit maximálně jednu hodnotu

–– poupoužžitit íí v dotazech, kdys jistotou víme, že dotaz nemůže vrátit více hodnot.( v případě vrácení více hodnot - chyba)

� s ALL, ANY, SOME– smí vrátit více jak jednu hodnotu

– ALL, ANY , SOME přesněji specifikují způsob porovnánívrácené množiny hodnot s hodnotou výrazu v klauzuli WHERE

Page 73: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZYuvozené operátory : <, >, =, < >, < =, > =

� ALL

výběrová podmínkavnějšího příkazu bude pravdivá, pokud je výsledek srovnání pravdivý pro všechnyhodnotyvrácené vnořeným subdotazem.

4 > ALL (1, 2,3 ) .....pravda

2 > ALL (1,2,3 ) .....nepravda

Page 74: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZYuvozené operátory : <, >, =, < >, < =, > =

� ANY, SOME– SOME je pouze ekvivalentem ANY

(zavedení SOME vychází ze standardu ANSI / ISO SQL)

– výběrová podmínkavnějšího příkazu bude pravdivá, pokud je výsledek srovnánípravdivý pro alespoň pro jednuz hodnotvrácených vnořeným subdotazem

4 > ANY (1, 2, 3 ) .....pravda2 > ANY (1,2,3 ) .....pravda

Page 75: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STRUKTUROVANÉ DOTAZY subdotazy uvozené [ NOT ] EXISTS

WHERE [ NOT ] EXISTS ( SELECT příkaz)

� výsledkem subdotazu existence či neexistence hodnot

�u EXISTS podmínka pravdivá - je-li výsledkem subdotazualespoň 1 řádek

př.: SELECT jmeno-zak, kontakt

FROM zakaznik

WHERE EXISTS(SELECT *

FROM objednavky

WHERE objednavky.c-zak = zakaznik.c-zak )

Page 76: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL - strukturovaný dotazovací jazyk

�DML - operace

� INTERSECTION

� UNION �EXCEPT

� DML - dynamické a statické relace

� DCL

�ochrana před neautorizovaným přístupem(GRANT, REVOKE)

�SQL a tvorba aplikací

Page 77: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS 114

Union, Intersect, and Difference (Except)

Page 78: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL - DML

� ke zpracování dotazů z více relací

– operace spojení JOIN

– strukturované příkazy

– množinové operace- od verze SQL2 » sjednocení ( UNION)» průnik ( INTERSECT)

» rozdíl ( EXCEPT )» tyto operace nejsou součástí všech implementací

» použití spolu s příkazem SELECT

» Za oběma klauzulemi SELECT musí být navzájem kompatibilní atributy

Page 79: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL -DMLoperace UNION

SELECT…….UNION

SELECT…..� př.SELECT c-pol, nazev, cena-j

FROM katalog

UNION

SELECT c-pol, nazev, cena-j

FROM novy-katalog

Page 80: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL -DMLoperace INTERSECT

SELECT…….INTERSECT

SELECT…..� př.SELECT c-pol, nazev, cena-j

FROM katalog

INTERSECT

SELECT c-pol, nazev, cena-j

FROM novy-katalog

Page 81: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL -DMLoperace INTERSECT

� pokud není operátor INTERSECT– řešení pomocí struktur. dotazu:

�př.SELECT c-pol, nazev, cena-jFROM katalogWHERE EXISTS

( SELECT *FROM novy-katalogWHERE katalog.c-pol = novy-katalog.c-pol)

SELECT k.c-pol, k.nazev, k.cena-jFROM katalog k, novy-katalog nWHERE k.c-pol = n.c-pol

Page 82: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL -DMLoperace EXCEPT

SELECT…….EXCEPT

SELECT…..� př.SELECT c-pol, nazev, cena-j

FROM katalog

EXCEPT

SELECT c-pol, nazev, cena-j

FROM novy-katalog

Page 83: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL -DMLoperace EXCEPT

� pokud není operátor EXCEPT– řešení pomocí struktur. dotazu:

� př.

SELECT c-pol, nazev, cena-j

FROM katalog

WHERE NOT EXISTS( SELECT *

FROM novy-katalogWHERE katalog.c-pol = novy-katalog.c-pol )

Page 84: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL A RELACE

� relace definované CREATE TABLE

– jsou považovány za základní, fyzické relace( basetables).

� odvozené relace

– dynamické odvozené relace = view– statické odvozené relace = snap-shots

Page 85: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DATA DEFINITION LANGUAGE

Page 86: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DATA DEFINITION LANGUAGE - DDL

� vytváření databáze a relační struktury

– vytváření, rušení a aktualizace relací(tabulek)

– vytváření a rušení indexů

– vytváření a rušení pohledů - (ne alter)

– Integritní omezení a DDL (create domain, check, Primary key )

– Datové typy podporované SQL-92.

Page 87: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL

� vytvoření struktury databaze

– CREATE DATABASE či CREATE SCHEMA, DROP DATABASE

� vytvoření struktury databáze

– CREATE TABLE, CREATE VIEW

� předefinování a rušení databáze

– ALTER TABLE, DROP TABLE, DROP VIEW

� indexace - od SQL89

– CREATE INDEX, DROP INDEX

Page 88: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL - CREATE

CREATE TABLE jmeno-relace

({ nazev-atributu datovy-typ

[NOT NULL [UNIQUE]] [ DEFAULT hodnota ][ [NOT] CASE-SENSITIVE][ FORMAT řetězec ][ LABEL řetězec ][ COLUMN-LABEL řetězec ]} [,...]

[, { UNIQUE ( {nazev-atributu } [,...] }] )

Page 89: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

CREATE TABLE

CREATE TABLE název

( jméno atr. datový typ[CONSTRAINT název]{[NULL|NOT NULL]| [PRIMARY KEY|UNIQUE}|

[FOREIGN KEY] REFERENCES jm tab. (jméno sloupce) ON DELETE CASCADE….

[,…]

[,[CONSTRAINT název] PRIMARY KEY (výčet jmen atributů – odděl. čárkou)…..,]

[,[CONSTRAINT název] FOREIGN KEY….]

[, [CONSTRAINT název] CHECK …)

OMEZENÍ SLOUPCE

OMEZENÍ TABULKY

Page 90: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

� datový typ

– CHARACTERCHARACTER,

– NUMERIC

– DECIMALDECIMAL - pro numerické s des. mistem

–– INTEGERINTEGER, SMALLINT - celá čísla

– FLOAT, REAL, DOUBLE PRECISIONod SQL 92 -DATEDATE, TIME, YEAR,

MONTH, DAY, HOUR, SECONDLOGICALLOGICAL

Page 91: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

Ochrana integrity databáze

Integritní omezení (integrity constraints, integrity rules)

� Specifikace IO musí být podle teorie relačního modelu součástí definice databáze, uloženy v DD (Data Dictionary = slovníku dat =katalogu dat)

� Integritu rozlišujeme :

- doménovou (domain integrity)

- Entitní integrita (entity integrity)

- Referenční ( referential integrity )

Page 92: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

Ochrana integrity databáze

doménová integrita (domain integrity)- každá hodnota musí být z hodnot pro atribut

přípustných

- DBS by měl poskytovat prostředky pro definici omezení v Data Dictionary,

- v okamžiku definice relace - třeba zabudovat

Entitní integrita (entity integrity)- požadavek na zajištění identifikace každého prvku

relace(řádek = konkrétní výskyt entity či vztahu) = PK

Page 93: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL doménová integrita

� Pomocí klauzule CHECK

CREATE TABLE jm

(....

Mesto CHAR(15) CHECK CHECK mesto IN („Praha“ ,„Liberec“),

c-pol INTEGER CHECK c-pol > 5 AND c-pol <11)

Page 94: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL doménová integrita

� PomocíCREATE DOMAIN (od SQL2)

CREATE DOMAIN pocetpocetINTEGER CHECK VALUE >0 AND VALUE < = 5

CREATE TABLE katalog

( ......,

qty pocetpocet,......

Page 95: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL entitní integrita

� PRIMARY KEY(od SQL89)

CREATE TABLE katalog

( ......,

c-pol INTEGER PRIMARY KEY,......

Pozn. pokud není tato klauzule - pak:

– klíčové atributy musí být definovány pomocíNOT NULLUNIQUE

Page 96: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

Ochrana integrity databáze

Referenční ( referential integrity )

- řeší logické vztahy mezi více relacemi -logickákonzistence obsahu databáze -pomocí FK

- řešení logické integrity databáze

- 1. Restriktivnířešení

- 2. kaskádovitéřešení

- 3. Nullify řešení

Page 97: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

1. Restriktivnířešení

- není dovoleno zrušit řádek, pokud existují v jiných relacích řádky logicky související

- hodnotu PK nadřízené tabulky -není možnéaktualizovat

- do podřízené relace nelze uložit řádek, u něhožhodnota FK neodpovídářádku v nadřízenetabulce

Page 98: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

2. kaskádovitéřešení

- v případě rušenířádku v nadřazené tabulce -rušíse řádky v podřízené relaci se stejnou hodnotou FK

- hodnotu PK možné aktualizovat - ale aktualizujíse i FK v souvisejících řádcích

- v případě ukládánířádku, u něhož hodnota FK neodpovídářádku v nadřízené tabulce -se doplnířádek v nadřízené tabulce

Page 99: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

3. Nullify řešení

- při rušenířádků dochází ke změně hodnot všech souvisejících klíčů na neurčené - tedy NULL hodnoty

- v případě ukládánířádku, u něhož hodnota FK neodpovídářádku v nadřízené tabulce -se naplníFK hodnotou neurčenou

Page 100: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL referenční integrita

� klauzule REFERENCES (od SQL89) ..restriktivnířešení

� ON DELETE CASCADE, ON UPDATE CASCADE

ON DELETE SET NULL, ON UPDATE SET NULL

( od SQL2 )

� implementace výjimečně

Page 101: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL referenční integrita

CREATE TABLE zakaznici

( c-zak INTEGER PRIMARY KEY,....

......)

CREATE TABLE objednavky

(... c-zak INTEGER REFERENCES zakaznici(c-zak)

CREATE TABLE objednavky

(... c-zak INTEGER REFERENCES zakaznici(c-zak) ON DELETE CASCADE

Page 102: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL

pokud SQL jediný jazyk pro práci s daty (ORACLE, SYBASE)

- pak i jinářešení - např. triggery

CREATE TRIGGER jmeno-trig

ON nazev relace

FOR {INSERT | DELETE| UPDATE[výčetatributů]} [,...]

AS výčet SQL příkazů

Page 103: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL - ALTER TABLE

ALTER TABLE jmeno-relace{ADD COLUMNADD COLUMN nazev-atributu datovy-typ

[NOT NULL [UNIQUE]] [ DEFAULT hodnota ][ [NOT] CASE-SENSITIVE][ FORMAT řetězec ]

| DROP COLUMNDROP COLUMN nazev-atributu| ALTER COLUMNALTER COLUMN nazev-atributu

[ DEFAULT hodnota ][ {NOT] CASE-SENSITIVE][ FORMAT řetězec ][ LABEL řetězec ] [ COLUMN-LABEL řetězec ] }

Page 104: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL - ALTER TABLE

� ADD část

– má-li již relace záznamy» neurčená hodnota, či hodnota DEFAULT » není -li DEFAULT, pak nelze NOT NULL» nelze UNIQUE

� DROP část� zruší atribut v četně hodnot� pokud se na něj odkazuje některá z odvozených relací - pak chybové

hlášení

� ALTER část� DEFAULT- vliv až na dodatečně vkládané řádky⇒⇒⇒⇒nelze NOT

NULL a UNIQUE

Page 105: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL - DROP TABLE

DROP TABLE nazev relace

� ruší definici relace včetně obsahu

� Po zrušení relace budou nepřístupné všechny odvozené relace definované nad zrušenou relací

� změna definice relace i její zrušení vede k aktualizaci v systémových relacích

Page 106: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL - indexy

� ovlivňuje rychlost práce s daty� při aktualizaci dat - doba odezvy (souvisí s

počtem řádků relace)

Page 107: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL - indexy

� z hlediska potřebnosti:– pro klí čové atributy– atributy, které jsou při výstupu dat

používány jako třídící kriterium– atributy vystupující p ři join operacích jako

spojovací– atributy s vysokou frekvencí přístupu– atributy, které jsou častým předmětem

dotazů na četnost

Page 108: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DDL - indexy

� indexy - jednoduché, skupinové, unikátní

CREATE [ UNIQUE] INDEX nazev-indexu

ON nazev-relace ( {nazev-atr} [,...])

DROP INDEX nazev-indexu

Page 109: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

ZÁKLADNÍ (BÁZICKÉ)STATICKÉDYNAMICKÉ

SQL a relace

Page 110: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

DYNAMICKÉ A STATICKÉ ODVOZENÉRELACE

� DYNAMICKÉ ODVOZENÉ RELACE = VIEW– fyzicky neexistují– s každou aktualizací obsahu výchozích relací se

mění i hodnoty relací odvozených– smyslem – zjednodušení práce s daty, zajištění

nezávislosti na logické struktuře databáze

� STATICKÉ ODVOZENÉ RELACE = SNAP-SHOTS – fyzicky existují

Page 111: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL DYNAMICKÉ ODVOZENÉ RELACE

(virtuální relace, pohledy, viewed tables )

� Představuji jiný pohled na uložená data,

� vytvořeny z jednéči více základních relací

– z hlediska relační algebry: projekce, restrikce (selekce), join

� mohou být vytvořeny i z jiných VIEW

� nejsou naplněny daty (fyzicky neexistují),

� jsou uloženy pouze ve formě definice v DATA DICTIONARY

� Nad odvozenou relací nelze vytvářet indexy� definici nelze modifikovat ( ALTER )

Page 112: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL ODVOZENÉ RELACE - DDL

� VYTVO ŘENÍ ODVOZENÉ RELACECREATE VIEW název odvozené relace

[ (názvy atributů odvozené relace)] AS vnořený příkaz SELECT

[ WITH CHECK OPTION ] kde: WITH CHECK OPTION

– verifikuje případné aktualizace obsahu prostřednictvímodvozené relace(v některých implementacích chybí )

� RUŠENÍ ODVOZENÉ RELACE DROP VIEW název odvozené relace

Page 113: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL ODVOZENÉ RELACE

� použití SELECTu

– celý vyjma ORDER BY

– v klauzuli SELECT - atributy relace, aritmetické výrazy , agregační funkce

– názvy atributů odvozené relace se uvedou, pokud nebudoutotožné s názvy uvedenými za klauzulí SELECT

� Pokud bude daný pohled výchozí pro jiná VIEW nesmíme daný pohled rušit (abychom se nepřipravili o přístup k odvozeným relacím vyšší úrovně) - nemusí být vždy ochrana proti zrušení

Page 114: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL - ODVOZENÉ RELACEpráce s odvozenými relacemi

� výběr dat z odvozených relací

– obdoba práce s relacemi základními

� aktualizace dat - INSERT, UPDATE, DELETE

– přípustná pouze v některých implementacíchjazyka

– za splnění určitých podmínek (mohou se lišit)

– aktualizací pohledu - dochází k aktualizacipůvodních relací

Page 115: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL ODVOZENÉ RELACE – aktualizace dat

� Standard SQL pro aktualizaci:

– SELECT ve VIEW nesmí obsahovat GROUP BY , HAVING

– v klauzuli SELECT nesmí být DISTINCT, agregačnífunkce, aritmetický výraz

– klauzule FROM nesmí obsahovat více jak jednuvýchozí relaci (pokud touto relací je VIEW, musí býtopět aktualizovatelné)

– za WHERE klauzulí nesmí být vnořený SELECT

Page 116: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL ODVOZENÉ RELACE Př.

CREATE VIEW obj-kat

AS SELECT katalog.c-pol, katalog.jmeno, c-obj, qty

FROM katalog, r-obj

WHERE katalog.c-pol = r-obj.c-pol

SELECT *

FROM obj-kat

WHERE katalog.jmeno = “bunda ADIDAS”.

Page 117: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

STATICKÉ ODVOZENÉ RELACE = SNAP-SHOTS

– pouze v některých implementacích SQL

– v databázi fyzicky existují

– jsou naplněny vybranými daty

– jsou vždy aktualizovatelné,

– jsou na výchozích relacích nezávislé( jejich obsah se při aktualizaci výchozích

relací nemění)

– vytvoří se příkazem SELECT klauzuli INTO

Page 118: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

statické odvozené relace= snap-shots

SELECT výčet atributů

INTO název odvozené relaceFROM název relací

[WHERE výběrové podmínky ] – struktura relace dána klauzulí SELECT, jednotlivé

prvky výsledné relace vyhovují podmínkám za WHERE.

– Podle standardu SQL není možné uvést GROUP BY a HAVINGněkteré implementace tato omezení nemají (SYBASE )

Page 119: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

statické odvozené relace= snap-shots

– v momentě svého vytvoření je jejich obsah totožný s obsahem relací, z nichž je tato relace odvozena

– vypovídají o stavu databáze v daném okamžiku ⇒

mohou sloužit jako časový snímek obsahu databáze– použitípro testování , zálohování– k definici relace s obdobnou strukturou

pokud za WHERE dám podmínky, které nevyberou ani jeden řádek (např. 1 = 3 )

– pokud příkaz neobsahuje klauzuli INTO - lze obejít » pomocí CREATE TABLE a INSERT s vnořeným SELECT příkazem

Page 120: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

statické odvozené relace= snap-shots

Př.

SELECT katalog.c-pol, katalog.jmeno, c-obj, qty

INTO obj-kat

FROM katalog, r-obj

WHERE katalog.c-pol = r-obj.c-pol

Page 121: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Data Control Language

Page 122: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

Přístupová privilegiapříkazy GRANT a REVOKE

� vlastník relace - považován její tvůrce- t.j. uživatelské jméno, pod kterým byla relace definována

� GRANT

– k přidělení p řístupových privilegií

� REVOKE

– k odebrání p řístupových privilegií

Page 123: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

GRANT

GRANT

{ALL [PRIVILEGES] |{SELECT | INSERT | DELETE |

UPDATE [(výčet atributů)]} [, ...]}

ON název relace TO { seznam uživatelů|PUBLIC}

[ WITH GRANT OPTION ]

Page 124: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

REVOKE

REVOKE {ALL [PRIVILEGES ]|

{SELECT | INSERT | DELETE | UPDATE [(výčet atributů)]}

[ ,...]}ON název relace FROM { seznam uživatelů|PUBLIC}

Page 125: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

GRANT, REVOKE

� Příkazy se vztahují pouze k jedné relaci (klauzule ON)� lze přiřadit, či odvolat najednou

– všechna privilegia - ALL– nebo explicitně vyjmenovaná– pro UPDATE lze udělit privilegia až na hodnotu atributu

� PUBLIC - v GRANT přiděluje privilegia všem současným ibudoucbudoucíím m uživatelům

� PUBLIC v REVOKE - odjímá privilegia udělená pomocíPUBLIC

Page 126: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

GRANT, REVOKE

� WITH GRANT OPTION u příkazu GRANT– povoluje uživatelům převádět příslušná privilegia

(i část) na další uživatele– může odejímat privilegia těm uživatelům, kterým

je sám přidělil– pokud jsou odejmuta privilegia uživateli s

oprávněním GRANT OPTION - jsou odejmuta automaticky i těm, kterým je přidělil

� Vlastníkovi relace nelze přístupová privilegia odejmout

Page 127: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

GRANT, REVOKE

� Privilegia lze udělovat i odebírat i odvozeným relacím

� při užití příkazů GRANT, REVOKE se účinky kumulují

Př. GRANT INSERT, UPDATE

ON zakaznik

TO referent

GRANT SELECT

ON zakaznik

TO referent

REVOKE UPDATE

ON zakaznik

TO referent

uživatel referent mámožnosti INSERT, UPDATE a SELECT v relaci zakaznik

uživatel referent mámožnosti INSERT a SELECT v relaci zakaznik

Page 128: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL a tvorba aplikací

� SQL - pracuje s celou množinou řádků relací

Χ� 4GL (příkazy hostitelských jazyků pracují s jedním řádkem relace

⇒⇒

pomocí principu cursorucursoru

kurzor určuje běžný řádek

záznamy jsou zpřístupňovány hostitelským jazykům postupně

Page 129: SQL - multiedu.tul.czmultiedu.tul.cz/.../DATABAZOVE_SYSTEMY/SQL_do_PDF.pdf · Vladimíra Zádová, KIN, EF TUL - DBS SQL - normy SQL 86 - DDL, DML, DCL 1986 - schválena ANSI norma

Vladimíra Zádová, KIN, EF TUL - DBS

SQL a tvorba aplikacíDECLARE CURSOR, FETCH, OPEN, CLOSE

DECLARE název-kurzoru CURSOR FOR příkaz SELECTdefinuje kurzor

OPEN název-kurzorunastavuje ukazovátko před první z množiny vybraných řádků

FETCH název-kurzoru

INTO {nazev parametru| nazev-promenne}[,.....]}zpřístupnění řádků dané množiny, příkaz vždy přesune ukazovátko na

dalšířádek

hodnotami řádku naplní předem definované proměnné .. (klauzule INTO)

CLOSE název-kurzoru

ukončení práce kurzoru