Structured Query Language SQL



Podobné dokumenty
Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

6. SQL složitější dotazy, QBE

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Konceptuální modelování a SQL

Databázové systémy Cvičení 5.2

SQL. Pohledy, ochrana dat,... Pavel Tyl

Databáze I. Přednáška 4

Databázové systémy. Cvičení 6: SQL

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Databáze SQL SELECT. David Hoksza

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

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Úvod do databázových systémů

SQL. přednáška č.? + 1 1/90

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Jazyk SQL 3 - DML, DDL, TCL, DCL

Jazyk SQL databáze SQLite. připravil ing. petr polách

Databáze I. Přednáška 6

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Kapitola 4: SQL. Základní struktura

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

- sloupcové integritní omezení

Materializované pohledy

Materiál ke cvičením - SQL

Úvod do databázových systémů

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Databáze I. 5. přednáška. Helena Palovská

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Databázové systémy Cvičení 5.3

Jazyk SQL slajdy k přednášce NDBI001

1. Relační databázový model

5. POČÍTAČOVÉ CVIČENÍ

Databázové systémy a SQL

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Zadání. Slovníček pojmů. Otázka 18 A7B36DBS

KIV/ZIS cvičení 5. Tomáš Potužák

Databázové systémy Cvičení 5

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

Dotazování v relačním modelu a SQL

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

SQL - trigger, Databázové modelování

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

PG 9.5 novinky ve vývoji aplikací

Databázové systémy I

8.2 Používání a tvorba databází

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Úvod do databázových systémů

Použití databází na Webu

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Databázové systémy I

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

3. Jazyky relačních databázových systémů

Databázové systémy trocha teorie

Úvod do databázových systémů

Operátory ROLLUP a CUBE

Informační systémy ve zdravotnictví. 10. cvičení

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

Michal Krátký, Miroslav Beneš

Sada 1 - PHP. 14. Úvod do jazyka SQL

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Optimalizace dotazů a databázové transakce v Oracle

DUM 12 téma: Příkazy pro tvorbu databáze

Administrace Oracle. Práva a role, audit

Databázové systémy úvod

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

Kapitola 6: Omezení integrity. Omezení domény

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Jazyk S Q L základy, příkazy pro práci s daty

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Databázové systémy. Integritní omezení. Vilém Vychodil. V. Vychodil (KMI/DATA1, Přednáška 9) Integritní omezení Databázové systémy 1 / 33

Databáze II. 1. přednáška. Helena Palovská

Databáze I. Přednáška 7

Informační systémy ve zdravotnictví. 6. cvičení

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Databázové systémy a SQL

Databáze I. 1. přednáška. Helena Palovská

Databázové systémy Tomáš Skopal

Databázové a informační systémy

Úvod do databázových systémů 3. cvičení

Transformace konceptuálního modelu na relační

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

KIV/ZIS cvičení 6. Tomáš Potužák

4IT218 Databáze. 4IT218 Databáze

6. blok část B Vnořené dotazy

SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 3.ročník ATRIBUTY ZÁKLADN POJMY VÝBĚR PRVKŮ DLE ATRIBUTŮ

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Text úlohy. Systémový katalog (DICTIONARY):

3. Jazyky relačních databázových systémů

Transkript:

Structured Query Language SQL

Spouště DML Řízení transakcí Vložené a dynamické SQL SQL DDL Spouště Integritní omezení Bezpečnost Přístupová práva

SQL SEQUEL-XRM, IBM v roce 1974 Neprocedurální jazyk říkáme co chceme, ne jak to udělat Nepoužívá se jen u relačních databází Interakční a hostitelská verze V interakční verzi se příkazy dají používat samostatně v režimu online. V hostitelské se příkazy SQL stávají součástí hostitelského jazyka (např. COBOL, FORTRAN, C/C++, apod. Implementace SQL se liší ve způsobu práci s dotazem.

Vytvoření databáze CREATE DATABASE jméno_databáze USE master CREATE DATABASE Sales ON ( NAME = Sales_dat, FILENAME = 'c:\mssql7\data\saledat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'c:\mssql7\data\salelog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )

Definice dat v SQL Datové typy Integer celé číslo se znaménkem; Decimal(p,q) číslo s p ciframi a desetinou čárkou na q pozici zprava; Float reálné číslo; Char(n) řetězec znaků délky n; Varchar(n) řetězec znaků max. délky n; Standartní: Numeric, Real, Double precision, Smallint; Nestandarní: Date,Money.

Vytvoření relace CREATE TABLE jméno_relace (atribut datový_typ [NOT NULL[UNIQUE]] [, atribut datový_typ [NOT NULL [UNIQUE]]...] [,UNIQUE seznam_atributů]) CREATE TABLE osoby ( jmeno varchar(25), prijmeni varchar(25), vek integer)

Změna a smazaní relace ALTER TABLE jméno_relace {ADD DROP} atribut datový_typ [NULL,..] ALTER TABLE osoby ADD pocet_deti integer DROP TABLE jmeno_relace DROP TABLE osoby

Definice Indexů CREATE [UNIQUE] [CLUSTERED NONCLUSTERED] INDEX jméno_indexu ON jméno_relace (jméno_atributu [ ASC DESC ] [, jméno_atributu [ ASC DESC ]] ) [CLUSTERED] záznamy jsou uspořádány podle tohoto atributu/ů [UNIQUE] jde o primární index v běžné terminologii souborů dat (UNIQUE v kombinaci s CLUSTER == index sekvenční soubor). CREATE UNIQUE INDEX rc ON osoby (rodne_cislo) CREATE INDEX jp ON osoby (jmeno,prijmeni)

Plná syntaxe SELECT - MySQL SELECT [ALL DISTINCT DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr,... [INTO OUTFILE 'file_name' export_options INTO DUMPFILE 'file_name'] [FROM table_references [WHERE where_definition] [GROUP BY {col_name expr position} [ASC DESC],... [WITH ROLLUP]] [HAVING where_definition] [ORDER BY {col_name expr position} [ASC DESC],...] [LIMIT {[offset,] row_count row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [FOR UPDATE LOCK IN SHARE MODE]]

SQL - SELECT SELECT a1,a2,...,a3 FROM r1,r2,...,rk WHERE Ø V relační alegře : (r1 x r2 x...xrk)(ø)[a1,a2...,aj]

Konstruktor SELECT SELECT [DISTINCT ALL] {* jméno_atributu1[,jméno_atributu2] } FROM název_relace[,název_relace2] [WHERE podmínka] [GROUP BY atributy [HAVING podmínka_agregace]] [ORDER BY jméno_atributu1[,jméno_atributu2] ]

Manipulace dat v SQL Sémantika příkazu SELECT vytvoří se kartézský součin z relací FROM Provede se SELECT (redukuje počet vrácených dat) vyhodnotí se podmínka WHERE rozdělení do podskupin GROUP BY relace se omezí dle HAVING Uspořádá se pomocí ORDER BY

Manipulace dat v SQL Jednoduché příklady SELECT * FROM osoba WHERE vek>50 ORDER BY jmeno ASC SELECT * FROM osoba WHERE prijmeni LIKE VL%

Manipulace dat v SQL PROJEKCE SELECT jmeno FROM osoby KARTÉZKÝ SOUČIN SELECT * FROM osoby,byty SELEKCE SELECT RC,jmeno FROM osoby WHERE jmeno= jan SPOJENÍ SELECT jmeno FROM osoby,byty WHERE osoby.rc=byty.rc

Spojení pomocí konstruktu JOIN SELECT produkt_c AS jmeno FROM tprodukty JOIN tceny ON (tprodukty.produkt_id=tceny.cena_pr) WHERE produkt_e LIKE %product% ORDER BY tprodukty.produkt_e UNION (spojení) INTERSECT(průnik)* EXCEPT(rozdíl)* Přirozený, levý, pravý JOIN Pozn. )* často není DB podporováno

Manipulace dat v SQL Aritmetické funkce +, -, *, / SELECT rc, plat / 30 FROM osoba Agregační funkce COUNT, SUM, MAX, MIN, AVG SELECT COUNT (*) FROM osoba

Manipulace dat v SQL Konstrukt GROUP BY a HAVING SELECT S.rating, MIN (S.age) AS minage FROM Sailors S WHERE S.age>=18 GROUP BY S.rating HAVING COUNT (*) > 1

Vyhodnocení příkladu 63 3 Karolina 95 25 3 Michala 85 40 9 Pepa 74 16 10 Jana 71 35 7 Horacio 64 35 10 Kuba 58 25 8 Andy 32 55 8 Karel 31 33 1 Brutus 29 45 7 Petr 22 age rating sname Sid 25 3 25 3 40 9 35 7 35 10 25 8 55 8 33 1 45 7 minage rating 35 10 40 9 25 8 55 8 35 7 45 7 63 3 25 3 33 1 minage rating

Výsledek příkladu 25 8 35 7 25 3 minage rating 63 3 Karolina 95 25 3 Michala 85 40 9 Pepa 74 16 10 Jana 71 35 7 Horacio 64 35 10 Kuba 58 25 8 Andy 32 55 8 Karel 31 33 1 Brutus 29 45 7 Petr 22 age rating sname Sid

Manipulace s množinami a vložené dotazy Manipulace s množinami p IN A p je prvkem množiny A množinu tvoří výčet nebo SELECT-FROM-WHERE SELECT * FROM osoba,byt WHERE (osoba.rc=byt.rc) AND (byt.ulice IN ( Hálkova, Pražská )) SELECT * FROM osoba,byt WHERE (osoba.rc=byt.rc) AND ( byt.ulice IN ( SELECT * FROM byt WHERE (ulice LIKE H% )))

Manipulace dat v SQL Kvantifikátory Univerzální není v SQL Existenční

Manipulace dat v SQL Kvantifikátory exists y R ( ) EXISTS (SELECT DISTINCT Y.* FROM R Y WHERE ) SELECT nazev FROM Firmy F WHERE NOT EXISTS (SELECT * FROM Faktury A WHERE A.nazev=F.nazev)

Manipulace dat v SQL Prázdné hodnoty Rozšíření RMD Booleovské výrazy -> 3-stavová logika Aritmetický výraz ->NULL Agregační funkce aplikované na prázdnou množinu vracejí NULL Zakázáno : spojení přes NULL, dotaz bydliste=null, spec.příkaz IS NULL

Syntaxe INSERT INSERT [LOW_PRIORITY DELAYED HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ({expr DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr,... ] INSERT INTO osoba (jmeno,prijmeni) VALUE ( Jan, Novak ) INSERT INTO osoba SELECT * FROM novydata

Syntaxe UPDATE UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2...] [WHERE where_definition] [ORDER BY...] [LIMIT row_count] UPDATE osoba SET jmeno= Jan WHERE jmeno= Honza

Syntaxe DELETE DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [WHERE where_definition] [ORDER BY...] [LIMIT row_count] DELETE FROM osoba WHERE jmeno= Jan

Definice pohledů Virtuální relace, pohled na aplikaci uživatelskými očima CREATE VIEW jméno_pohledu [(njméno_atr1[,njméno_atr2]...)] AS SELECT [DISTINCT] {* jméno_atr1[,jméno_atr2]...} FROM jméno_relace1[,jméno_relace2]... [WHERE podmínka1] [WITH CHECK OPTION] [GROUP BY gjméno_atr1[,gjméno_atr2]... [HAVING podmínka2]] [ENABLE UPDATE] CREATE VIEW pohled AS SELECT * FROM t1 WHERE a > 0 DROP VIEW jméno_pohledu

Pohledy II. (SQL-92) Logická datová nezávislost Bezpečnost UPADTE Updatable views pouze nad jednou tabulkou INSERT DELETE

Aktualizace pohledů Nad základní relací == problémy nevznikají. Zachovává-li projektivní omezení primární klíč, pak je dovolena jakákoli aktualizace. je třeba vložit prázdnou hodnotu do atributu def. NOT NULL? Selektivní omezení zachovává primární klíč vždy == bez problémů, Agregační omezení nevedou k rozumě aktualizovatelným pohledům Pohledy na více relacích (ve většině případu opět nevede aktualizace k jednoznačně (a smysluplně) definovaným aktualizacím základních relací) CREATE VIEW Prazak AS SELECT cislo,jmeno,adresa FROM Ctenar WHERE adresa LIKE '%PRAHA%' Provedeme-li aktualizaci adresy(insert a nebude nová adresa pražská) nezmění se pohled, nýbrž pouze základní relace. WITH CHECK OPTION, kontroluje, zda aktualizací nebyla narušena podmínka v definici pohledu. Současné SŘBD s SQL připouštějí pouze omezené možností pro aktualizaci pohledů. V DB2 nebo v dbase IV je aktualizace pouze na projektivním a/nebo selektivním omezení.

Integritní omezení CHECK - kontrola vstupních dat DEFALUT - výchozí hodnota FOREIGN KEY - definice cizího klíče PRIMARY KEY - definice primárního klíče CREATE TABLE osoba ( index INTEGER NOT NULL, jmeno VARCHAR(25) NOT NULL, dat_nar DATE DEFAULT 1/1/2004, poc_det INTEGER CHECK (poc_det<=6), byt INTEGER, PRIMARY KEY (index), FOREIGN KEY (byt) REFERENCES bydliste)

Ochrana dat Požadavek více uživatelského SŘBD Přístup k relaci(pohledu), definice práv GRANT {ALL {DELETE INSERT SELECT UPDATE [(atribut1[, atribut2] )]} } ON relace TO {PUBLIC uživatel1[,uživatel2] } Odebrání práv REVOKE

Transakce v SQL Pouze v hostitelské verzi TRANSACTION jméno_transakce WHENEVER {ERROR podmínka} ROLLBACK příkazy COMMIT END Příkazy z množiny manipulačních TRANSACTION dalsi_rok WHENEVER ERROR ROLLBACK UPDATE osoba SET vek=vek+1 COMMIT END

Manipulace dat v SQL Systémový katalog Informace o SŘBD SYSTABLE jméno relace, zakladatele,počet atributů,... SYSCOLUMNS jméno atributu,jméno relace,... SYSINDEXES jméno indexu, jméno relace,... COMMENT Komentáře Jedná se o relace -> přístup pomocí SQL

GROUP BY SELECT "column_name1", SUM("column_name2") FROM "table_name" GROUP BY "column_name1" Store_Information store_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-08-1999 SELECT store_name, SUM(Sales) FROM Store_Information GROUP BY store_name store_name SUM(Sales) Los Angeles $1800 San Diego $250 Boston $700

HAVING SELECT "column_name1", SUM("column_name2") FROM "table_name" GROUP BY "column_name1" HAVING (arithmetic function condition) Store_Information store_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-08-1999 SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_name HAVING SUM(sales) > 1500 Result: store_name SUM(Sales) Los Angeles $1800

JOIN Table Store_Information store_name Sales Date Los Angeles $1500 Jan-05-1999 San Diego $250 Jan-07-1999 Los Angeles $300 Jan-08-1999 Boston $700 Jan-08-1999 Table Geography region_name East East West West store_name Boston New York Los Angeles San Diego Chceme zjistit celkové prodeje pro jednotlivá oddělení. Při standartním JOIN bude chybět New York, protože není v Store_Information. Outer join (syntaxe ORACLE) : SELECT A1.store_name, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1.store_name = A2.store_name (+) GROUP BY A1.store_name Result: store_name SALES Boston $700 New York NULL Los Angeles $1800 San Diego $250

Užitečné odkazy http://www.cs.vsb.cz/amalka/tomica/sql/index.html http://home.zcu.cz/~kotouc/vyuka/dbm1/pr11.html http://msdn.microsoft.com/library/ http://www.oracle.com/technology/documentation/index.html http://dev.mysql.com/doc/