SQL Bevezetés folytatás, haladó SQL
Bevezetés az SQL-be II
Az EXIST művelet
EXIST(<alkérdés>)
akkor és csak akkor igaz, ha az alkérdés eredménye nem üres.
SELECT *
FROM Teák b1
WHERE NOT EXISTS (
SELECT *
FROM Teák
WHERE gyártó = b1.gyártó AND
név != b1.név
);
Az ANY művelet
x = ANY(<alkérdés>)
akkor és csak akkor igaz, ha x egyenlő az alkérdés legalább egy sorával
Az ALL művelet
x != ALL(<alkérdés>)
akkor és csak akkor igaz, ha x az alkérdés egyetlen sorával sem egyezik meg.
SELECT tea
FROM Felszolgál
WHERE ár >= ALL(
SELECT ár
FROM Felszolgál
);
Unió, metszet, különbség
(<alkérdés>)UNION/INTERSECT/MINUS(<alkérdés>)
(SELECT * FROM Szeret)
INTERSECT
(
SELECT vendég, tea
FROM Felszolgál, Látogat
WHERE Felszolgál.teázó = Látogat.teázó
);
A SELECT-FROM-WHERE
multihalmaz szemantikát használnak, a halmazműveleteknél mégis a halmaz szemantika érvényes.
Ismétlődések kiküszöbölése
DISTINCT
kulcsszó.
Összekapcsolás kifejezések
Az SQL-ben számos változata megtalálható az összekapcsolásnak.
Ezek a kifejezések önmagukban is állhatnak lekérdezésként, vagy a FROM
zátadékban is megjelenhetnek.
Descartes szorzat és természetes összekapcsolás:
R NATURAL JOIN S
R CROSS JOIN S
Theta összekapcsolás
R JOIN S ON <feltétel>
Vendégek JOIN Látogat ON
név = vendég;
Relációs algebra és az SQL
Relációs algebra: érdekes a "hogyan" kérdés is
Kapcsolat a relációs algebra műveletek és SQL záradékok, kulcsszavak között.
SQL-nél mondtuk: "hogyan" helyett "mit"
DBMS kitalálja a leggyorsabb végrehajtási módot, háttérben optimalizál
Van a relációs kalkulus, amely deklaratív nyelv.
Haladó SQL
Összekapcsolás típusok
- Descartes-szorzat
- Belső összekapcsolás
- Külső összekapcsolás
Belső összekapcsolások
- Természetes összekapcsolás
- Theta összekapcsolás
- Félig összekapcsolás (semi join)
- Anti összekapcsolés
Külső összekapcsolás
Kiterjesztett relációs algebra
Összekapcsoljuk és relációkat
Három különböző művelet
azon sorait, melyeknek nincs beli párja lógó soroknak nevezzük
A külső összekapcsolás megőrzi a lógó sorokat NULL
értékrkkel helyettesítve a hiányzó értékeket.
Összesítések
SUM, AVG, COUNT, MIN, MAX
összesítő függvények a SELECT
záradékában alkalmazhatjuk egy-egy oszlopra.
COUNT(*)
az eredmény sorainak számát adja meg.
SELECT AVG(ár)
FROM Felszolgál
WHERE tea = 'Brisk';
SELECT COUNT(DISTINCT ár)
FROM Felszolgál
WHERE tea = 'Brisk';
NULL
értékek nem számítanak az összesítésben.
NULL
soha nem számít aSUM, AVG, COUNT, MIN, MAX
függvények kiértékelésekor.- De ha nincs
NULL
értéktől különböző érték az oszlopban, akkor az összesítés eredményeNULL
- kivéve a
COUNT
, ami az üreshalmazon -t ad vissza.
- kivéve a
Csoportosítás
Egy kifejezést GROUP BY
záradékkal folytathatjuk, melyet attribútomok listája követ.
SELECT tea, AVG(ár)
FROM Felszolgál
GROUP BY tea;
A GROUP BY
záradékot egy HAVING <feltétel>
záradék követheti, ami a már csoportokat szűri.
SELECT tea, AVG(ár)
FROM Felszolgál
GROUP BY tea
HAVING COUNT(teázó) >= 3 OR
tea IN (
SELECT név
FROM Teák
WHERE gyártó = 'Pete'
);
Adatbázis módosítások
A módosító utasítások nem adnak eredményt, hamen az adatbázist változtatják meg.
3-féle módosító létezik:
INSERT
DELETE
UPDATE
Ezek a Data manipulation Language része.
Beszúrás
Ha egyetlen sort szúrunk be:
INSERT INTO <reláció>
VALUES (<attribútum lista>);
A reláció után megadhatjuk az attribútumait, mert nem emlékszünk az attribútum sorrendre, vagy nincs minden attribútumnak
értéke, és szeretnénk, ha a hiányzó értékeket NULL
vagy default értékkel helyettesítenénk.
Default értékek megadása
A CREATE TABLE
utasításban van rá lehetőség
CREATE TABLE Vendégek (
név CHAR(30) PRIMARY KEY,
cím CHAR(50) DEFAULT '123 Sesame St.'
telefon CHAR(16)
);
Több sor beszúrása
Egy lekérdezés eredményét is beszúrhatjuk a következő módon:
INSERT INTO <reláció> (<alkérdés>);
Törlés
DELETE FRPM <reláció>
WHERE <feltétel>;
Itt is van lehetőség több sort töröni allekérdezéssel.
Törlés szemantikája: Elősször kijelölünk, aztán törlünk.
Módosítás
UPDATE <reláció>
SET <attribútum értékadások listája>
WHERE <sorokra vonatkozó feltétel>;
Adatbázis sémák SQL-ben
A Data Definition Language segítségével hozhatunk létre adatobjektumokat, deklarálhatunk megszorításokat.
Relációk létrehozása
CREATE TABLE <név> (
<elemek listája>
);
Legfontosabb típusok:
INT
FLOAT
CHAR(n)
: rögzített hosszVARCHAR(n)
: legfeljebb hosszúságDATE
TIME
Kulcsok megadása
Egy attribútomot vagy attribútum listát kulcsként deklarálhatunk (PRIMARY KEY
vagy UNIQUE
)
Minden formája a megszorításnak azt követeli meg, hogy relációnak ne legyen két olyan sora, melyek megegyeznek a kulcs attribútumokon.
CREATE TABLE Felszolgál (
teázó CHAR(20),
tea VARCHAR(20),
ár REAL,
PRIMARY KEY (teázó, tea)
);
PRIMARY KEY vs UNIQUE
- Egy relációhoz egyetlen
PRIMARY KEY
tartozhat és többUNINQUE
megszorítás. - A
PRIMARY KEY
egyetlen attribútuma sem kaphatNULL
értéket. AUNIQUE
megszorításnál szerepelhetnekNULL
értékek egy soron belül akár több is.
Relációk törlése
DROP TABLE <név>