SQL STANDARDI
1/37
Cilj, organizacije
• Prenosivost definicija baza podataka i aplikativnih programa među implementacijama koje su saglasne sa standardom
• 1986. prvi standard - ANSI SQL/86 X3H2 komitet
• ANSI - American National Standard Institute,
• ISO - International Standard Organization,
• FIPS - Federal Information Processing Standards for the US federal government,
• IEC – International Electrotechnical Commision
2/37
Međunarodno telo:
ISO/IEC JTC1
3/37
Podkomitet SC32
4/37
Radne grupe (WG) SC32
• WG1 e-Business: Open EDI (Electronic Data
Interchange, Finska)
• WG2 Metadata (SAD)
• WG3 Database Languages (Holandija)
• WG4 SQL Multimedia and Application Packages
(Japan)
• WG5: Remote Database Access (RDA) (Velika
Britanija)
5/37
WG3 Database Languages: publikovani
standardi
6/37
WG3 Database Languages: publikovani
standardi• WG4 – SQL/MM
• 5. izdanje: ISO/IEC 9075:2003
• 6. izdanje: ISO/IEC 9075:2008, (deo 14 2006: revidirani
"SQL/XML“ iz 2003.)
• 7. izdanje: ISO/IEC 9075:2011
• reakcioni / anticipatorni standardi
7/37
SQL 92 (SQL2)
• Početni- “entry”: (blaga poboljšanja punog SQL 89) -definisanje sheme, DML, referencijalni integritet, constraint, ugnježdenje (7 jezika), CHECK opciju pogleda...
• Srednji – “intermediate”: promena sheme, dinamički SQL, kaskadno brisanje, unija, presek i razlika, karakterski skupovi,VARCHAR, CASE, domeni, DATE-TIME (jednostavni)
• Puni – “full”: kaskadno ažuriranje, odložena provera ograničenja, ograničenja opšteg tipa (assertion), BIT-tip,...
8/37
SQL 92
• DDL – ranije
• DML• Nove skalarne operacije i funkcije, npr. || - dopisivanje, CASE –
uslovna vrednost, aritmetika nad DATETIME tipom, SUBSTRING(), UPPER(), LOWER(), LENGTH()
• Dijagnostika: SQLCODE, SQLSTATE, GET DIAGNOSTICS
• Lista izvedenih tabela u FROM liniji, npr.
SELECT P_SIF, I_SIF
FROM P, (SELECT *
FROM I
WHERE STATUS > 10) AS DOBRIIZD
WHERE P.DRZAVA = DOBRIIZD.DRZAVA
9/37
SQL 92
• Dodela imena izvedenoj koloni, npr.SELECT K_SIF, I_SIF, 'Tiraz u hilj.=' AS KOM,
TIRAZ/1000 AS TuH
FROM KI
• Dekartov proizvod, prošireno prirodno, slobodno
spajanje, unija - operacija oblikatabela-1 CROSS JOIN |
[NATURAL] [INNER|LEFT|RIGHT|FULL|UNION] JOIN
tabela-2
[ON logički-izraz]
• Prošireno spajanje, primer 1SELECT *
FROM (I NATURAL FULL JOIN KI)
10/37
SQL 92
• Prošireno spajanje, primer 2
• K( K_SIF, NASLOV, OBLAST)
• KI(K_SIF, I_SIF, IZDANJE, GODINA, TIRAZ)
• “Za svaku knjigu, prikazati ukupni tiraž svih njenih izdanja.”SELECT K_SIF, SUM(TIRAZ) AS TIR
FROM KI
GROUP BY K_SIF
• “Ako knjiga nema izdanja, prikazati vrednost NULL“SELECT K.K_SIF, SUM(TIRAZ) AS TIR
FROM (K NATURAL LEFT JOIN KI)
GROUP BY K.K_SIF
• “Ako knjiga nema izdanja, prikazati vrednost 0“SELECT K.K_SIF,
CASE SUM(TIRAZ) IS NULL
WHEN 1 THEN 0 ELSE SUM(TIRAZ) END AS TIR
FROM (K NATURAL LEFT JOIN KI)
GROUP BY K.K_SIF
11/37
SQL 92
• TABLE T, ekvivalentan sa
(SELECT * FROM T)• SELECT upitni blok u SELECT liniji, npr.
SELECT I.I_SIF, (SELECT SUM(KI.TIRAZ)
FROM KI
WHERE KI.I_SIF = I.I_SIF ) AS
UK_TIRAZ
FROM I
• Prošireni logički izrazi, npr.
(p) IS [NOT] TRUE ((p) je (nije) tačno)
(p) IS [NOT] FALSE ((p) je (nije) netačno)
(p) IS [NOT] UNKNOWN ((p) je (nije) nepoznato)
12/37
SQL 92
• Konekcija klijenta na server
• Aplikativni SQL
• ...
13/37
SQL:1999 (SQL3)
• Nije jednistven standard (5 delova + 3 kasnije)
• OO SQL, 7 godina (planiran za 1995.)
• Regularni izrazi
• Rekurzivni upiti
• Trigeri
• Kontrolne strukture
• Kompleksni (strukturni, ne-skalarni) tipovi
• Neka OO svojstva
14/37
SQL:1999 (SQL3) – relaciona (ne-OO)
svojstva• Novi tipovi podataka
• Novi predikati
• Bogatija semantika
• Bolja bezbednost (hijerarhijska struktura uloga i
privilegija)
• Aktivne baze (trigeri)
15/37
SQL:1999 (SQL3) – novi tipovi podataka
• LARGE OBJECT (LOB), CLOB, BLOB; ograničenja
• BOOLEAN (true, false, unknown)
• Strukturni tipovi: ARRAY, ROW• Primer 1: kolona DANI VARCHAR(10) ARRAY[7]
• Primer 2: CREATE TABLE EMPLOYEE
(EMP-ID INTEGER,
NAME ROW (
FIRST VARCHAR(30),
LAST VARCHAR(30)),
ADDRESS ROW (
STREET VARCHAR(50),
CITY VARCHAR(30),
STATE CHAR(2) ),
SALARY REAL )
SELECT E.NAME.LAST FROM EMPLOYEE E
16/37
SQL:1999 (SQL3) – jednostavni korisnički
definisani tipovi• DISTINCT TYPES – ne mogu da se porede, npr. IQ, BrojCipela (oba
integer), npr.
• CREATE TYPE IQ AS INTEGER;
• CREATE TYPE BrojCipela AS INTEGER;
• CREATE TABLE NONS
(MojBrojCipela BrojCipela,
MojIQ IQ);
• CAST npr.
• SELECT * FROM NONS
WHERE MojBrojCipela > CAST (MojIQ AS BrojCipela)
• Primer 2: SET MojIQ = MojIQ * CAST(2 AS IQ)
17/37
SQL:1999 (SQL3) – novi predikati
• Predikat SIMILAR (UNIX-like regularni izraz)
• Primer:
WHERE NAME SIMILAR TO
'(SQL-(86|89|92|99))|(SQL(1|2|3))‘
18/37
SQL:1999 (SQL3) – bogatija semantika
• Pogledi: proširen skup pogleda koji se mogu ažurirati (funkcionalne zavisnosti, pravila ažuriranja baznih tabela)
• Rekurzija: WITH RECURSIVE
Q1 AS SELECT...FROM...WHERE...,
Q2 AS SELECT...FROM...WHERE...
SELECT...FROM Q1, Q2 WHERE...
• Tačke pamćenja, podtransakcije
19/37
SQL:1999 (SQL3) – rekurzija: primer
WITH RECURSIVE subpart (major_p, minor_p) AS
( SELECT major_p, minor_pFROM part_structure WHERE major_p =“P1”
UNION ALL SELECT subpart.major_p, part_structure.minor_p FROM subpart, part_structureWHERE subpart.minor_p = part_structure.major_p )
SELECT DISTINCT major_p, minor_p FROM subpart
20/37
SQL:1999 (SQL3) – OO svojstvastrukturni korisnički-definisani tipovi
• Strukturni korisnički-definisani tipovi, sa atributima svih mogućih tipova, npr. INTEGER, ARRAY, drugi strukturni korisnički-definisani tipovi, REF
• Tip REF – jedinstveni identifikator vrednostistrukturnog korisnički definisanog tipa
• Primer: emp_type, podtip od person_type (nasleđivanje, hijerarhija), može da ima vrednosti (INSTANTIABLE) i podtipove (NOT FINAL); jedinstveni identifikator je EMP_ID (referenca), deklaracija metodeGIVE_RAISE
• Ponašanje ovih tipova zadaje se funkcijama, procedurama ili metodama
• Poređenje vrednosti zadaje se korisnički-definisanim funkcijama
• (CREATE ORDERING…)
21/37
SQL:1999 (SQL3) – OO svojstva
metode / funkcije
CREATE METHOD GIVE_RAISE
(AMOUNT REAL)
RETURNS REAL
BEGIN
RETURN AMOUNT * SELF.SALARY;
END;
• Funkcija: primer
• Tabela tblA(_idx, code, name)
CREATE FUNCTION gettblA (idx
int)
RETURNS TEXT
READS SQL DATA
BEGIN SELECT CONCAT(code,
name) INTO resultTbl
FROM tblA
WHERE _idx = idx;
RETURN resultTbl;
END
22/37
SQL:1999 (SQL3) – OO svojstva -
metode• Metode – različite od SQL-pozvanih funkcija
• Vezane za jedinstveni korisnički tip (funkcije nisu)
• Korisnički tip za koji je metoda vezana je tip prvog arumenta metode, koji se ne deklariše
• Metode moraju da budu smeštene u istoj shemi kao i tipovi za koje su vezane
• I funkcije i metode – u SQL/PSM ili u programskom jeziku, npr. JAVA, C
23/37
SQL:1999 (SQL3) – OO svojstva -
metode• Pristup atributima korisnički-definisanih tipova -“.” notacijom, npr.WHERE emp.salary > 10000
WHERE salary(emp) > 10000
(ako je objekat emp tipa emp_type, salary atribut, ili je definisana funkcija salary sa jednim argumentom tipaemp_type)
• metoda koristi “.” notaciju kada se primenjuje na tip za koji je vezana, npr. emp.give_raise(amount)
(ako je emp objekat definisan nad tipom emp_type)
24/37
SQL:1999 (SQL3) – OO svojstva –
tipizirana tabela• Tipizirane tabele (tabele nad tipom, “typed tables”, ako je to
strukturni korisnički definisani tip) npr. CREATE TABLE empls OF emp_type
(Definicije kolona su izvedene iz atributa strukturnog tipa)
• Funkcije, metode, procedure, definisane za tip, sada se primenjuju na vrste tabele!
• Svaka vrsta ima OID: REF tip (samo ako je tipizirana tabela!) • Obraćanje vrstama tipizirane tabele, npr. u tabeli KOMPANIJA atribut
manager može da bude definisan sa manager REF(emp_type) with scope empls
• Korišćenje REF-tipa: SELECT manager->salary
25/37
SQL:1999 (SQL3) – tipizirana tabela,
primerCREATE TYPE bioskop_t
AS (br_b integer,
ime text,
adresa text,
telefon text)
REF (br_b)
CREATE TABLE Bioskopi OF bioskop_t;
CREATE TABLE TrenutnoSePrikazuju
(film integer,
bioskop ref(bioskop_t) with scope Bioskopi,
pocetak date,
kraj date);
26/37
/
27
SQL:2003
• “bugfix release” - revizija standarda SQL:1999
• novi (14.) deo: SQL/XML svojstva
• novi tipovi podataka,
• proširenja SQL-rutina (funkcija za definisanje tabele),
• proširenja CREATE TABLE iskaza (LIKE, AS – slično materijalizovanim pogledima),
• novi MERGE iskaz,
• OLAP, itd.
28/37
SQL:2003
• ISO/IEC 9075(1-4,9-11,13,14):2003 • ISO/IEC 9075-1:2003 – Framework (SQL/Framework) • ISO/IEC 9075-2:2003 – Foundation (SQL/Foundation) • ISO/IEC 9075-3:2003 – Call-Level Interface (SQL/CLI) • ISO/IEC 9075-4:2003 – Persistent Stored Modules (SQL/PSM) • ISO/IEC 9075-9:2003 – Management of External Data (SQL/MED) • ISO/IEC 9075-10:2003 – Object Language Bindings (SQL/OLB) • ISO/IEC 9075-11:2003 – Information and Definition Schemas
(SQL/Schemata) • ISO/IEC 9075-13:2003 – SQL Routines and Types Using the Java
Programming Language (SQL/JRT) • ISO/IEC 9075-14:2003 – XML-Related Specifications (SQL/XML)
29/37
SQL:2003 – tipovi podataka
• Uklonjeni BIT i BIT VARYING tipovi
• Novi tipovi: BIGINT, MULTISET, XML
• MULTISET: sličan ARRAY, ali bez uređenja, npr.MULTISET[1, 2, 3, 4] or
MULTISET(SELECT grades FROM courses)
• MULTISET agregatne funkcije – COLLECT,
FUSION, INTERSECTION, primer:
30/37
SQL:2003 – tipovi podataka
• CREATE TABLE logins( session_id INT NOT NULL PRIMARY KEY, successful BOOLEAN NOT NULL, uid INT, attempts ROW(VARCHAR(128),VARCHAR(128)) MULTISET);
• INSERT INTO logins VALUES( 1000,true,0, MULTISET(
ROW('root','31337'), ROW('scott','tiger'), ROW('root','beer')));
• INSERT INTO logins VALUES( 1001,false,0,MULTISET(SELECT ROW(name,password)
FROM bogus_accounts));
31/37
SQL:2003 – tipovi podataka
SELECT COLLECT(FRIEND) AS ALL_FRIENDS, FUSION(HOBBIES) AS
ALL_HOBBIES, INTERSECTION(HOBBIES) AS COMMON_HOBBIES
FROM FRIENDS
32/37
SQL:2003 – SQL/XML
• SQL Funkcije:
• XMLElement()
• XMLAttributes()
• XMLForest()
• XMLSequence()
• XMLConcat()
• XMLAgg(), na primer
33/37
SQL:2003 – MERGE iskaz34/37
SQL:2006 (2008)
• ISO/IEC 9075-14:2006
• Definiše kako se SQL koristi zajedno sa XML-om
• Definiše načine unošenja (import) i skladištenja XML
podataka u SQL bazi podataka, manipulisanja i
izdavanja XML i konvencionalnih SQL podataka u XML
formatu
• Mogućnost integracije (u aplikaciji) SQL koda i XQuery,
XML upitnog jezika (W3C)
• Konkurentni pristup običnim SQL podacima i XML
dokumentima.
35/37
SQL:2011
• Na primer, tabele
Inventory(Part, Qty),
Changes(Part, Qty, Action)
DELETE u MERGEMERGE INTO Inventory AS I
USING Changes AS C ON I.Part = C.Part
WHEN MATCHED AND C.Action = 'Mod' THEN
UPDATE SET Qty = Qty + C.Qty
WHEN MATCHED AND C.Action = 'Dis' THEN
DELETE
WHEN NOT MATCHED AND C.Action = 'Mod’ THEN
INSERT VALUES (C.Part, C.Qty)
36/37
SQL:2011
• Pipelined DML
• INSERT, UPDATE, DELETE u SELECT naredbi
• Primer:
SELECT Oldtable.Empno
FROM OLD TABLE (DELETE FROM EmpWHERE Deptno = 2)
AS Oldtable
SELECT Newtable.Empno
FROM NEW TABLE (UPDATE EMP
SET Salary = 0
WHERE Empno > 100)
AS Newtable
37/37