Keskeny Zoltán 2007/08 SQL. Structured Query Language. (gyakorlat az SQL2 szabvány alapján) Keskeny Zoltán tanév

Hasonló dokumentumok
Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

Adatbázis-kezelés, információs-rendszerek

3. Előadás. Az SQL adatbázisnyelv (Tartalom) Az SQL története. Az SQL felépítése. Adattípúsok. SQL utasítások

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Adatbázisok* tulajdonságai

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Adatbázis-kezelés. Harmadik előadás

B I T M A N B I v: T M A N

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

SQL parancsok feldolgozása

Bevezetés: az SQL-be

Az SQL nyelv. SQL (Structured Query Language = Strukturált Lekérdező Nyelv).

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

Adatbázis kezelés Delphiben. SQL lekérdezések

Adatbázis rendszerek Ea: Esqúel. Structured Query Language

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

Adatbázis rendszerek SQL nyomkövetés

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

B I T M A N B I v: T M A N

BEVEZETÉS Az objektum fogalma

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Adatbázis-kezelés alapok Adatbázisok című tárgyhoz, ismétlés kapcsán

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Adatbázisok elmélete 9. előadás

Adatbázisok elmélete 10. előadás

SQL DDL-1: táblák és megszorítások

Relációsémák létrehozása SQL nyelvben

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbázis rendszerek Ea: Eskúel. Structured Query Language

Adatbázisok elmélete 9. előadás

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

Adatbázisok I A relációs algebra

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

LEKÉRDEZÉSEK SQL-BEN. A relációs algebra A SELECT utasítás Összesítés és csoportosítás Speciális feltételek

Adatbázis rendszerek Gy: DQL Lekérdezések

Adatbázis I. 11. előadás. Kulcsok az SQL ben. Hivatkozásépségi megszorítások és idegen kulcsok.

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatbázisok tavaszi félév Vizsgatételsor

Adatbázis használat I. 5. gyakorlat

Java és web programozás

Adatbázisok I. Az SQL nyelv

Lekérdezések az SQL-ben 1.rész

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály. Adatbázis-kezelés alapjai SQL 2: DQL. v: B IT MAN 169/1

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

5.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

XML alapú adatbázis-kezelés. (Katona Endre diái alapján)

Funkcionális függések lekérdezések feldolgozása, kifejezésfák

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

Adatbázis, adatbázis-kezelő

Adatbázis-kezelés. Második előadás

Lekérdezések az SQL-ben 1.rész

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

SQL gyakorló feladatok. 6. Adatbázis gyakorlat április 5.

Készítette: Szabóné Nacsa Rozália

Adatbázis tartalmának módosítása

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP /1/A

Az SQL adatbázisnyelv: DML

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Megszorítások. AB1_06A_Megszorítások - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Lekérdezések az SQL SELECT utasítással

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

Adatbáziskezelés. SQL parancsok. Függvények

Java és web programozás

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

INTEGER egész típusú érték megadása, hozzá hasonló, de számábrázolási tartományában eltérő típus még a SMALLINT, szinonimája a DECIMAL

Elemi alkalmazások fejlesztése IV.

Adatbázisok elmélete 12. előadás

Gazdasági folyamatok térbeli elemzése. 5. elıadás

WHERE záradék (további lehetıségek) SQL specialitások, nem írhatók át relációs algebrába: LIKE. NULL értékek. Az ismeretlen (unknown) igazságérték

ALAPOK. 0 és 255 közé eső számértékek tárolására. Számértékek, például távolságok, pontszámok, darabszámok.

Tankönyv példák kidolgozása

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

A relációs algebra egy speciális algebra, amely néhány egyszerű, de hathatós. operandusok. Egy reláció megadható a nevével vagy közvetlenül, sorainak

Adatbázis rendszerek 2. előadás. Relációs algebra

Programozás. Adatbázis-kezelés (alapok) Fodor Attila

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Hallgató i Ú tmutató. Beadandó anyag követelményei

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

2.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Átírás:

SQL Structured Query Language (gyakorlat az SQL2 szabvány alapján) Keskeny Zoltán 2007-2008 tanév

Az SQL nyelv SQL = Structured Query Language (struktúrált lekérdező nyelv). A relációs adatbázis-kezelés szabványos nyelve. Nem algoritmikus nyelv, de algoritmikus nyelvekbe beépíthető (beágyazott SQL). 1976: SEQUEL az SQL eredeti változata, az IBM-nél fejlesztették ki. 1981: ORACLE2 (SQL alapú RDBMS, nagygépekre) 2

1983: IBM: DB2 (SQL alapú RDBMS, nagygépekre). A világ legnagyobb adatbázisait ma is jórészt DB2- ben kezelik 1986: SQL szabvány, az ANSI (American National Standard Institute) definiálta. Változatai: SQL-86 SQL-89 1992: SQL2 szabvány, SQL-92 1999: SQL3 szabvány (rekurzió, triggerek, objektumrelációs modell.) 2003: SQL2003 szabvány, XML támogatás 3

1. Általános jellemzés Az SQL utasításait két főcsoportba soroljuk: DDL (Data Definition Language) adatstruktúra definiáló utasítások DML (Data Manipulation Language) adatokon műveletet végző utasítások Ezeken belül további alcsoportok is léteznek, de ezek nem részei a tananyagnak. 4

1.1. Szintaxis Keskeny Zoltán 2007/08 Kisbetű és nagybetű: a nyelv alapszavaiban egyenértékű. Utasítások: sorfolytonosan írhatóak, lezárás pontosvesszővel. Változó: nincs, csak tábla- és oszlopnevekre lehet hivatkozni. Kifejezésben hivatkozás egy tábla adott oszlopára: táblanév.oszlopnév Alias név: név AS másodnév (van ahol az AS elhagyható) Szövegkonstans: 'Szöveg' 5

Dátum: DATE '1968-05-12'. Egyes rendszerek az SQL szabványtól eltérő konvenciót alkalmaznak, például 13-NOV-94 (ORACLE), 02/15/1994 (dbase) Idő: TIME '15:31:02.5' (óra, perc, másodperc). Stringek konkatenációja: a + vagy művelettel történik Relációjelek: =, <=, >=,!=, <> 6

Logikai műveletek: AND, OR, NOT Az SQL rendszerek három értékű logikát használnak TRUE, FALSE, NULL (definiálatlan). Ha egy kifejezés valamelyik eleme NULL, akkor az egész kifejezés értéke NULL lesz. Az utasítások szintaxisának leírásánál az elhagyható részeket szögletes zárójellel jelöljük. 7

1.2. Speciális logikai kifejezések x IS NULL igaz, ha az x mező értéke NULL. Megjegyzés: Az x IS NULL kifejezés nem egyenértékű az x = NULL kifejezéssel, mivel az utóbbi kifejezés értéke definiálatlan (NULL). x BETWEEN a AND b igaz ha a <= x <= b x IN halmaz igaz, ha x megegyezik a megadott halmaz egy elemével. A halmazt explicit módon vagy lekérdezéssel lehet megadni. Példa: város IN ('Szeged','Pécs','Baja') 8

x relációjel ALL halmaz igaz, ha x a halmaz minden elemével a megadott relációban van. Példa: fizetés!= ALL (81000, 92123, 15000) x relációjel ANY halmaz igaz, ha a halmaznak van olyan eleme, amellyel x a megadott relációban van. Példa: fizetés < ANY (81000, 92123, 15000) EXISTS halmaz igaz, ha a halmaz nem üres. Például egy EXISTS lekérdezés kifejezés értéke igaz, ha a lekérdezés legalább egy elemet ad vissza. 9

x LIKE minta igaz, ha az x karaktersorozat megfelel a megadott mintának. Ha a mintában % illetve _ jel szerepel, az tetszőleges karaktersorozatot illetve tetszőleges karaktert jelent. Példa: lakcím LIKE '%Vár u.%' igaz minden olyan lakcímre, amelyben szerepel a Vár u. részlet. A fentiekben általában a NOT is használható. Például: x IS NOT NULL, x NOT IN halmaz, stb. 10

2. Relációsémák definiálása (DDL) 2.1 Relációsémák létrehozása Relációséma létrehozására a CREATE TABLE utasítás szolgál, amely egyben egy üres táblát is létrehoz a sémához. Az attribútumok definiálása mellett a kulcsok és külső kulcsok megadására is lehetőséget nyújt. CREATE TABLE táblanév ( oszlopnév adattípus [feltétel],......... oszlopnév adattípus [feltétel], oszlopnév adattípus [feltétel] [, tábla Feltételek] ); 11

Adattípusok Adattípus neve CHAR(n) VARCHAR(n) INTEGER REAL DECIMAL(n[,d]) DATE TIME SERIAL BLOB CLOB VARRAY POINT Keskeny Zoltán 2007/08 Rövid leírás n hosszúságú karaktersorozat Legfeljebb n hosszúságú karaktersorozat Egész szám (röviden INT) Valós (lebegőpontos) szám, más néven FLOAT N jegyű decimális szám, ebből d tizedesjegy Dátum (év, hó nap) Idő (óra, perc, másodperc) Automatikusan növelt szám (általában kulcs) Binary Large Object (általában bináris fájl (kép)) Character Large Object ( szöveges dokumentum) Változó hosszúságú tömb (x,y) koordinátákkal megadott pont Az adattípushoz DEFAULT érték megadásával alapértelmezett érték definiálható. Ha nem adjuk meg, az alapértelmezett érték NULL lesz. 12

Feltételek, Táblafeltételek Feltételek: egy adott oszlopra vonatkoznak PRIMARY KEY: elsődleges kulcs UNIQUE: kulcs REFERENCES tábla(oszlop) [ON-feltetelek]: külső kulcs Táblafeltételek: az egész táblára vonatkoznak PRIMARY KEY (oszloplista): elsődleges kulcs UNIQUE (oszloplista): kulcs FOREIGN KEY (oszloplista) REFERENCES tábla(oszloplista) [ON-feltetelek]: külső kulcs 13

1. példa CREATE TABLE Keskeny Zoltán 2007/08 Hozzuk létre az alábbi relációsémákat SQL-ben. OSZTÁLY (osztálykód, osztálynév, vezadószám) DOLGOZÓ(adószám, név, lakcím, osztálykód) Osztály reláció létrehozása: CREATE TABLE Osztály ( osztálykód CHAR(3) PRIMARY KEY, osztálynév CHAR(20), vezadószám DECIMAL(10) ); 14

Dolgozó reláció létrehozása: Keskeny Zoltán 2007/08 CREATE TABLE Dolgozó ( adószám DECIMAL(10) PRIMARY KEY, név CHAR(30), lakcím CHAR(40), osztalykód CHAR(3) REFERENCES Osztály(osztálykód) ); A Dolgozó reláció így is létrehozható: CREATE TABLE Dolgozó ( adószám DECIMAL(10), név CHAR(30), lakcím CHAR(40), osztalykód CHAR(3), PRIMARY KEY (adószám), FOREIGN KEY (osztálykód) REFERENCES Osztály(osztálykód) ); 15

Rövid magyarázat: PRIMARY KEY és UNIQUE A tábla módosításakor a definiált kulcsfeltételek automatikusan ellenőrzésre kerülne. PRIMARY KEY és UNIQUE esetén ez azt jelenti, hogy a rendszer nem enged olyan módosítást illetve új sor felvitelét, amely egy már meglévő kulccsal ütközne. 16

Rövid magyarázat: REFERENCES REFERENCES (külső kulcs hivatkozás) esetén ONfeltételek megadásával szabályozhatjuk a rendszer viselkedését (jelölje T 1 a hivatkozó és T 2 a hivatkozott táblát) Alapértelmezés (ha nincs ON-feltétel): T 1 -ben nem megengedett olyan beszúrás és módosítás, amely a T 2 -ben nem létező kulcs értékére hivatkozna, továbbá T 2 -ben nem megengedett olyan kulcs módosítása vagy sor törlése, amelyre T 1 hivatkozik. 17

Rövid magyarázat: REFERENCES ON UPDATE CASCADE: ha T 2 egy sorában változik a kulcs értéke, akkor a rá való T 1 -beli hivatkozások is megfelelően módosulnak (módosítás továbbgyűrűzése) ON DELETE CASCADE: ha T 2 -ben törlünk egy sort, akkor a T 1 -ben is törlődnek a rá hivatkozott sorok (törlés továbbgyűrűzése) 18

Rövid magyarázat: REFERENCES ON UPDATE SET NULL: ha T 2 egy sorában változik a kulcs értéke, akkor a T 1 -ben a rá való külső kulcs hivatkozások értéke NULL lesz. ON DELETE SET NULL: ha T 2 -ben törlünk egy sort, akkor a T 1 -ben a rá való külső kulcs hivatkozások értéke NULL lesz. 19

2. példa CREATE TABLE - REFERENCES CREATE TABLE Osztály ( osztálykód CHAR(3) PRIMARY KEY, osztálynév CHAR(20), vezadószám DECIMAL(10) ); CREATE TABLE Dolgozó ( adószám DECIMAL(10) PRIMARY KEY, név CHAR(30), lakcím CHAR(40), osztálykód CHAR(3) REFERENCES Osztály(osztálykód) ON UPDATE CASCADE ON DELETE SET NULL ); 20

2.2 Relációsémák törlése DROP TABLE táblanév; Hatására a séma és a hozzá tartozó adattábla törlődik. DROP TABLE Dolgozó; Törli a Dolgozó sémát és a hozzá tartozó táblát. 21

2.3 Relációsémák módosítása ALTER TABLE táblanév [ADD (újelem,..., újelem)] [MODIFY (módosítás,..., módosítás)] [DROP (oszlop,..., oszlop)]; újelem: egy oszlopnév adattípus [feltétel] vagy egy táblafeltétel mint a CREATE TABLE utasításban. módosítás: oszlopnév adattípus [feltétel] Oszlopok törlését nem minden rendszer engedi meg. Minden esetben amikor lehetőségünk van, kerüljük a sémák módosítását. 22

3. példa ALTER TABLE Keskeny Zoltán 2007/08 ALTER TABLE Dolgozó ADD (szüldátum DATE); ALTER TABLE Dolgozó MODIFY (lakcím VARCHAR(60)); ALTER TABLE Osztály MODIFY (vezadószám REFERENCES Dolgozó(adószám)); 23

3. Adattábla aktualizálása (DML) 3.1 Új sor felvitele INSERT INTO táblanév [(oszloplista)] VALUES (értéklista); Ha oszloplista nem szerepel, akkor valamennyi oszlop értéket kap a CREATE TABLE-ben megadott sorrendben. Egyébként, az oszlopnév-listában nem szereplő mezők NULL értéket kapnak. 24

4. példa INSERT INTO Keskeny Zoltán 2007/08 INSERT INTO Dolgozó (név, adószám) VALUES ('Tóth Aladár', 1111); INSERT INTO Dolgozó VALUES (1111, 'Tóth Aladár',, '12' ); Megjegyzés: A táblába adatokat tölthetünk át másik táblából is, ha a VALUES(értéklista) helyére egy alkérdést írunk (lásd Alkérdések fejezet). 25

3.1 Sor(ok) módosítása UPDATE táblanév SET oszlop = kifejezés,, oszlop=kifejezés [ WHERE feltétel ]; Az értékadás minden olyan soron végrehajtódik, amely eleget tesz a WHERE feltételnek. Ha WHERE feltétel nem szerepel, akkor az értékadás az összes sorra megtörténik. 26

5. példa UPDATE SET Keskeny Zoltán 2007/08 UPDATE Dolgozó SET lakcím = ' Szeged, Rózsa u. 5. ' WHERE név = ' Kovács József '; A Dolgozó tábla azon soraiban ahol a név mező értéke megegyezik Kovács József - fel, a lakcím mező értékét megváltoztatja Szeged, Rózsa u. 5. -re. UPDATE Dolgozó SET osztálykód = ' 003 ' WHERE osztálykód = ' 012 '; A Dolgozó tábla azon soraiban ahol az osztálykód mező értéke megegyezik 012 - vel, az osztálykód mező értékét megváltoztatja 003 -ra. 27

3.1 Sor(ok) törlése DELETE FROM táblanév [ WHERE feltétel ]; Hatására azok a sorok törlődnek, amelyek eleget tesznek a WHERE feltételnek. Ha WHERE feltételt elhagyjuk, akkor az összes sor törlődik, de a séma megmarad. 28

6. példa DELETE FROM Keskeny Zoltán 2007/08 DELETE FROM Dolgozó WHERE név = ' Kovács József '; Azok a sorok fognak törlődni a dolgozó táblából, amelyekben a név mező értéke egyenlő Kovács József - fel. DELETE FROM Osztály; Az összes sor törlődni fog az Osztály táblából. 29

7. példa DELETE FROM Keskeny Zoltán 2007/08 INSERT INTO Dolgozó (név, adószám) VALUES ( ' Tóth Aladár ', '4321' ); DELETE FROM Dolgozó WHERE adószám = 4321; Ha a táblában korábban már volt egy 4321 adószámú sor, akkor a fenti utasításpár azt is kitörli. Általában, ha egy tábla két azonos sort tartalmaz, DELETE utasítással nem tudjuk csak az egyiket kitörölni. Ha ugyanis a WHERE feltétel az egyikre igaz akkor a másikra is igaz. 30

4. Lekérdezés (DML) Lekérdezésre a SELECT utasítás szolgál, amely egy vagy több adattáblából egy eredménytáblát állít elő. Az eredménytábla a képernyőn listázásra kerül, vagy más módon használható fel. A SELECT utasítás alapváltozata: SELECT [DISTINCT] oszloplista FROM táblanévlista [WHERE feltétel]; 31

A SELECT A 1,...,A n FROM T 1,...,T m WHERE feltétel utasítás egyenértékű a következő relációs algebrai kifejezéssel: E = ΠA 1,...,A n (σ feltétel (T 1 x x T m )) Descartes-szorzat: T 1 x x T m Szelektálás feltétel szerint: σ feltétel (T 1 x x T m ) Projekció (kiválasztás): ΠA 1,...,A n (σ feltétel (T 1 x x T m )) Vagyis, a felsorolt táblák Descartes-szorzatából szelektáljuk a feltételnek eleget tevő sorokat, majd ezekből projekcióval kiválasztjuk az E eredménytábla oszlopait. 32

A DISTINCT opciót akkor kell kiírni, ha az eredménytáblában az azonos sorokból csak egyet kívánunk megtartani. Ha az oszloplista helyére * karakter írunk, ez valamennyi oszlop felsorolásával egyenértékű. A SELECT legegyszerűbb változatával adattábla listázását érhetjük el: SELECT * FROM T; 33

4.1 A relációs algebra műveleteinek megvalósítása Projekció: SELECT [DISTINCT] A 1,...,A n FROM T; Példa: SELECT DISTINCT szerző, cím FROM Könyv; A Könyv tábla szerző és cím oszlopában szereplő összes adatot megjeleníti. 34

Szelekció: SELECT * FROM T WHERE feltétel; Példa: SELECT * FROM Könyv WHERE kivétel<2000.01.01; A Könyv tábla összes olyan sorát megjeleníti, amelyben a kivétel oszlopban szereplő érték kisebb mint 2000.01.01. 35

Descartes-szorzat: T 1 x T 2 SELECT * FROM T1,T2; A több táblás lekérdezések alapját képezi. Működése (párosítás): A T1 tábla minden sorához külön-külön hozzárendeli a T2 tábla minden sorát. 36

Természetes összekapcsolás: Állítsuk elő például az ÁRU(cikkszám, megnevezés) és VÁSÁRLÁS(cikkszám, mennyiség) táblák természetes összekapcsolását. SELECT Áru.cikkszám, megnevezés, mennyiség FROM Áru, Vásárlás WHERE Áru.cikkszám = Vásárlás.cikkszám; 37

4.2 A halmaz műveletek megvalósítása Théta join: SELECT * FROM T1, T2 WHERE feltétel; Unió: (SELECT * FROM T1) UNION (SELECT * FROM T2); Lekérdezi mind a két tábla összes sorát külön-külön és csak azokat jeleníti meg az eredménytáblában amelyek legalább az egyik táblában benne vannak. 38

Metszet: (SELECT * FROM T1) INTERSECT (SELECT * FROM T2); Lekérdezi mind a két tábla összes sorát külön-külön és csak azokat jeleníti meg az eredménytáblában amelyek mind a két táblában megegyeznek. 39

Különbség: (SELECT * FROM T1) EXCEPT (SELECT * FROM T2); Lekérdezi mind a két tábla összes sorát különkülön és csak azokat a sorokat jeleníti meg az eredménytáblában,amelyek benne vannak az első lekérdezés eredményében, de nincsenek benne a második lekérdezés eredményében. 40

8. példa Halmaz művelet Keskeny Zoltán 2007/08 HELYISÉG(épület, ajtószám, név, alapterület) TANTEREM(épület, ajtószám, férőhely, tábla, vetítő) GÉPTEREM(épület, ajtószám, gépszám) Kérjük le az oktatási célú géptermek listáját: (SELECT épület, ajtószám FROM Tanterem) INTERSECT (SELECT épület, ajtószám FROM Gépterem); 41

4.3 Alias nevek A SELECT után megadott oszloplista valójában nem csak oszlopneveket, hanem tetszőleges kifejezéseket is tartalmazhat, és az eredménytábla oszlopainak elnevezésére alias neveket adhatunk meg: 8. példa Alias név A Raktár(cikkszám, név, egységár, mennyiség) táblából egy Összes(áru, érték) tábla létrehozása: SELECT név AS áru, egysegár*mennyiség AS érték FROM Raktár; 42

9. példa Alias név A Személy(adószám, név, születésiév) táblából egy Lista(név, életkor) tábla létrehozása: SELECT név, 2007-születésiév AS életkor AS érték FROM Raktár; 43

A FROM után megadott táblák esetén is használhatóak alias nevek, például akkor, ha egy táblának önmagával való Descartes-szorzatát képezzük: 10. példa Alias név Azonos nevű dolgozók lekérése a DOLGOZÓ(adószám, lakcím, név) táblából: SELECT d1.név, d1.adószám, d2.adószám FROM Dolgozó AS d1, Dolgozó AS d2 WHERE d1.név = d2.név AND d1.adószám < d2.adószám; 44

ABS(n): abszolút érték 11. példa: ABS(-15) = 15 4.4 Függvények LOWER(char): konverzió kisbetűsre 12. példa: LOWER('Kovács') = 'kovács' UPPER(char): konverzió nagybetűsre 13. példa: UPPER('Kovács') = 'KOVÁCS' LTRIM(char): balról szóközök eltávolítása 14. példa: LTRIM(' alma ') = 'alma ' 45

RTRIM(char): jobbról szóközök eltávolítása 15. példa: LTRIM(' alma ') = ' alma' SUBSTR(char, m [,n]): a char string m-edik karakterétől n hosszú részstringet ad vissza. Ha n nem szerepel akkor a végéig. Az első karakter 1-es sorszámú 16. példa: SUBSTR('ABCDEFG', 2, 3) = 'BCD' SUBSTR('ABCDEFG', 2) = 'BCDEFG' 46

TO_CHAR(n): konverzió numerikusról vagy dátumról karakteresre 17. példa: TO_CHAR(123) = '123' TO_NUMBER(char): konverzió karakteresről numerikusra 18. példa: TO_CHAR(123) = '123' TO_DATE(char): konverzió karakteresről dátumra Használata nem ajánlott, mert különböző rendszerekben különböző a dátum formátum. 19. példa: TO_DATE('15-JAN-06') 47

4.5 Összesítő függvények Egy oszlop értékeiből egyetlen értéket hozunk létre (például átlag). Általános alakjuk: függvénynév([distinct] oszlopnév) Ha a DISTINCT szerepel, akkor az oszlopban szereplő azonos értékeket csak egyszer kell figyelembe venni. A számításnál a NULL értékek figyelmen kívül maradnak. 48

Függvények felsorolása: AVG(oszlopnév): átlagérték SUM(oszlopnév): összeg MAX(oszlopnév): maximális érték MIN(oszlopnév): minimális érték COUNT(oszlopnév): elemek száma. A COUNT függvénynél az oszlopnév helyére * is írható, amely valamennyi oszlopot együtt jelenti. 49

20. Példa: Átlag: SELECT AVG( fizetés ) FROM Dolgozó; Az eredménytábla egyetlen elemből áll, amely az átlagfizetést adja. 21. Példa: Összeg: SELECT SUM( fizetés ) FROM Dolgozó; Az eredménytábla egyetlen elemből áll, amely a fizetések összege. 50

23. Példa: Elemek száma: SELECT COUNT( * ) FROM Dolgozó; A Dolgozó tábla sorainak száma, vagyis a dolgozók száma. SELECT COUNT( DISTINCT osztálykód ) FROM Dolgozó; Az osztályok száma. 51

4.6 Csoportosítás Ha a tábla sorait csoportonként szeretnénk összesíteni, akkor a SELECT utasítás a GROUP BY oszloplista alparanccsal bővíthető. Egy csoportba azok a sorok tartoznak, melyeknél oszloplista értéke azonos. Az eredménytáblában egy csoportból egy rekord lesz. Az összesítő függvények csoportonként hajtódnak végre. 52

25. Példa: A DOLGOZÓ táblából osztályonként az átlagfizetést számoljuk: SELECT osztálykód, AVG(fizetés) FROM Dolgozó GROUP BY osztálykód; 26. Példa: A PROJEKTÓRA(dolgozó, projekt, óra) táblából a dolgozónkénti óraszámot összegezzük: SELECT dolgozó, SUM(óra) FROM PROJEKTÓRA GROUP BY dolgozó; 53

A SELECT után összesítő függvényen kívül csak olyan oszlopnév feltüntetésének van értelme, amely a GROUP BY-ban is szerepel. 54

A GROUP BY által képzett csoportok közül válogathatunk a HAVING feltétel alparancs segítségével. Csak a feltételnek eleget tevő csoportok kerülnek összesítésre. 27. Példa: Azon osztályok listája, ahol az átlagfizetés > 80000 Ft. SELECT osztálykód, AVG(fizetés) FROM Dolgozó GROUP BY osztálykód HAVING AVG(fizetés) > 80000; 55

4.7 Az eredménytábla rendezése A relációs modell nem definiálja a rekordok sorrendjét, a gyakorlatban rendszerint valamilyen rendezettségben kell az eredmény. Erre szolgál: ORDER BY oszlopnév [DESC],, oszlopnév [DESC] alparancs, amely a SELECT utasítás végére helyezhető, és az eredménytáblának a megadott oszlopok szerinti rendezését írja elő. Alapértelmezés szerint a rendezés növekvő sorrendben történik, a fordítotthoz a DESC (descending) kulcsszó írandó a megfelelő oszlopnévhez. 56

28. Példa: Dolgozók és fizetések listája az osztálykódok növekvő, ezen belül a fizetések csökkenő sorrendjében SELECT osztálykód, név, fizetés FROM Dolgozó ORDER BY osztálykód, fizetés DESC; 57

4.8 A SELECT utasítás általános alakja A SELECT utasítás az alábbi parancsokból állhat: SELECT [DISTINCT] oszloplista 5. projekció FROM táblanévlista 1. Descartes-szorzat [WHERE feltétel] 2. szelekció [GROUP BY oszloplista] 3. csoportosítás [HAVING feltétel] 4. csoport-szelekció [ORDER BY oszloplista] 6. rendezés 58

Köszönöm a figyelmet! Folytatása következik... 59