Adatbázis-lekérdezés Az SQL nyelv Makány György
SQL (Structured Query Language=struktúrált lekérdező nyelv): relációs adatbázisok adatainak visszakeresésére, frissítésére, kezelésére szolgáló nyelv. Születési idő és hely: 1976 IBM, a relációs adatmodellel nagyjából egyidőben. Szabványosítva ANSI SQL néven 1986-ban Egyszerű, gyorsan tanulható (kb. 40 kulcsszó, angol mondat) 2
Az SQL kapcsolatai Az SQL-t sokszor beépítik adatbáziskezelő rendszerekbe (pl. Oracle, Informix, dbaseiv, DEC RDBMS, Delphi), de vannak önálló implementációk is (pl. MySQL, Novell XQL, Microsoft SQL Server). Gyakori a minta alapján történő lekérdezés, amiből SQL utasításokat is generáltathatnak (pl. MSAccess, Base). Az SQL rendszerek illeszkednek az elterjedt adatállományformátumokhoz. Felismerik és kezelik a más programok (dbase, Paradox, Interbase, Oracle, stb.) által előállított adatformátumokat. 3
Az SQL (és az adatbáziskezelés) alapfogalmai adategyed, adattétel, rekord: a vizsgált tárgy, objektum adattípus: a tárgyra jellemző tulajdonságtípus adatérték: az adott tárgy egy tulajdonságának értéke kulcs: azon tulajdonságok, amelyek értékeik révén lehetővé teszik a rekordok keresését, azonosítását egyértelmű kulcs: olyan kulcs, amely egyértelmű azonosítást tesz lehetővé 4
SQL adattípusok Adattípusai lefedik az adatbáziskezelőkben előforduló szokásos típusokat: CHAR STRING DATE, TIME SMALLINT INTEGER DOUBLE PRECISION DECIMAL FLOAT karaktertípus akár 4000-32700 karakteres szöveg dátum, idő 16 bites előjeles egész szám 32 bites előjeles egész szám 64 bites egész, kb. 15 értékes jegy fixpontos törtszám, max. 15 jegy lebegőpontos valós, max. 15 pontos jegy 5
Utasításai csoportosíthatóak: Adatdefiníciós utasítások adatbázist, adattáblát létrehozó, törlő és adatvédelmi utasítások Lekérdezések adatlekérdezést, jelentéskészítést szolgáló utasítások Adatkarbantartó utasítások táblák közötti kapcsolatot definiáló, adatbeviteli, adatmódosító és adattörlési utasítások Speciális beágyazott utasítások kurzort létrehozó, törlő és vezérlő utasítások 6
Adatdefiníciós utasítások CREATE DOMAIN CREATE TABLE oszloptípus definiálása adattábla létrehozása CREATE TABLE CONSTRAINTS kulcsok definiálása ALTER TABLE adattábla szerkezetének megváltoztatása DROP TABLE adattábla megszüntetése CREATE ASSERTION önálló feltétel definiálása DROP ASSERTION önálló feltétel megszüntetése SET CONSTRAINTS a feltételek hatálybaléptetése CREATE INDEX index létrehozása CREATE SYNONYM szinoníma létrehozása DROP SYNONYM szinoníma törlése CREATE VIEW nézettábla létrehozása DROP VIEW nézettábla törlése CREATE SCHEMA adatbázisséma létrehozása 7
Lekérdezések 1. SELECT * oszlopok oszlopfelirat FROM A lekérdezések mindig ezzel az igével kezdődnek. Az összes oszlop megjelenik a lekérdezésben az oszlopok neveinek vesszővel elválasztott sorozata az oszlop neve helyett álló szöveg (ideiglenes név) a lekérdezésben érintett adattáblák nevei SELECT cikkszam Cikkszám, megnevezes Megnevezés FROM cikktorzsadattar; 8
Lekérdezések 2. Az oszlopokra és a mezőkre kifejezéseket lehet megfogalmazni. Mezőkre például adatkonverziót (CAST), karakteres, matematikai (ABS, SIN, EXP, stb.), logikai vagy dátum műveletet, oszlopokra különféle függvényeket (MIN, MAX, SUM, COUNT, AVG, stb.) SELECT COUNT(egysegar*mennyiseg) Tételszám, 1.09*SUM(egysegar*mennyiseg) Érték, FROM rendelesek; 9
Lekérdezések 3. Záradékok a megjelenítendő rekordok szűrésére: DISTINCT WHERE az oszlopban azonos értékű rekordok kijelzésének tiltása csak egy feltételnek megfelelő értékű rekordok kijelzése LIKE, IN, BETWEEN, NOT, AND, OR ORDER BY a talált sorok rendezése ASC, DESC GROUP BY a talált sorok csoportosítása HAVING a csoportosítás után a jelzett feltételnek meg nem felelő sorok kizárása 10
Lekérdezések 4. Példa: Minden rendelt árucikkre vonatkozóan értékeljük ki a legkisebb, legnagyobb mennyiséget, értéket, értékösszeget, a mennyiségek összegét és a tételek számát. Az egészet rendezzük a cikkszámok növekvő sorrendjébe és zárjuk ki az eredményből azon sorokat, amelyekben a tételek értékeinek összege nem pozitív! SELECT cikkszam, MIN(mennyiseg), MIN(mennyiseg*egysegar), MAX(mennyiseg), MAX(mennyiseg*egysegar), SUM(mennyiseg*egysegar), COUNT(mennyiseg*egysegar) FROM rendelesek GROUP BY cikkszam HAVING SUM(mennyiseg*egysegar)>0 11 ORDER BY cikkszam;
Lekérdezések 5. További lehetőségek: Táblák összekapcsolása Táblák egyesítése (UNION) Táblák metszete (INTERSECT) Táblák különbsége (EXCEPT vagy MINUS) Táblák összekapcsolása alá- fölé rendeléssel (alkérdéssel) Táblák külső összekapcsolása (INNER JOIN, OUTER JOIN) 12
Adatkarbantartó utasítások INSERT új rekordok bevitele UPDATE rekordok tartalmának megváltoztatása DELETE rekordok törlése 13
Vége 14