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

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

Az SQL adatbázisnyelv: DML

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

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

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

Bevezetés: az SQL-be

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

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

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

SQL bevezetés. Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések

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

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

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

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

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

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

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

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

Adatbázisok* tulajdonságai

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

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

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

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

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

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

Adatbázis tartalmának módosítása. SQL DML utasítások

Adatbázis tartalmának módosítása (DML), az adatbázis-kezelı rendszerek felépítése,

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

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

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

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

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

Adatbázis rendszerek SQL nyomkövetés

SQL DDL-2 (aktív elemek) triggerek

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

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

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 FÉLÉVES FELADAT

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

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

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

Adatbázis használat I. 5. gyakorlat

SQL parancsok feldolgozása

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

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

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

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

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

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

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

4. Előadás Az SQL adatbázisnyelv

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

BEVEZETÉS Az objektum fogalma

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

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

SQL DDL: Táblák, megszorítások (constraints), triggerek, nézettáblák

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

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

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

Az SQL lekérdeznyelv

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

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

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

Java és web programozás

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

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

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

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

ABR ( Adatbázisrendszerek) 2. Előadás : Műveletek a relációs modellben

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

Tankönyv példák kidolgozása

Webfejlesztés 4. alkalom

Információs rendszerek Adatbázis-kezelés

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

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

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

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

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

Elemi alkalmazások fejlesztése IV.

Java és web programozás

Tranzakciók, nézettáblák, indexek. Párhuzamos folyamatok irányítása Virtuális és materializált nézettáblák Az adathozzáférés felgyorsítása

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

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:

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely. ABR ( Adatbázisrendszerek) 12. Előadás:

ADATBÁZIS RENDSZEREK I BEADANDÓ

Adatbázis rendszerek tervezése

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

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

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

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

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

Bevezetés: Relációs adatmodell

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ázis Rendszerek II. 2. Ea: Gyakorló környezet

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

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

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Több tábla összekapcsolásán alapuló lekérdezések

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

Átírás:

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 1

Külső összekapcsolás Összekapcsoljuk R és S relációkat: R C S. R azon sorait, melyeknek nincs S-beli párja lógó soroknak nevezzük. S-nek is lehetnek lógó sorai. A külső összekapcsolás megőrzi a lógó sorokat NULL értékkel helyettesítve a hiányzó értékeket. 2

Példa: külső összekapcsolás R = ( A B ) S = ( B C ) 1 2 2 3 4 5 6 7 (1,2) és (2,3) összekapcsolható, a másik két sor azonban lóg. R OUTERJOIN S = A B C 1 2 3 4 5 NULL NULL 6 7 3

Külső összekapcsolás (SQL) R OUTER JOIN S: a külső összekapcsolásoknál mindig ez szerepel. 1. Opcionális NATURAL az OUTER előtt. 2. Opcionális ON <feltétel> JOIN után. 3. Opcionális LEFT, RIGHT, vagy FULL az OUTER előtt. LEFT = csak R lógó sorait őrzi meg. RIGHT = csak S lógó sorait őrzi meg. FULL = az összes lógó sort megőrzi. Csak az egyik szerepelhet. 4

Összesítések (aggregáció) SUM, AVG, COUNT, MIN, és MAX összesítő függvényeket a SELECT záradékban alkalmazhatjuk egy-egy oszlopra. COUNT(*) az eredmény sorainak számát adja meg. 5

Példa: Összesítés A Felszolgál(kocsma, sör, ár) tábla segítségével adjuk meg a Bud átlagos árát: SELECT AVG(ár) FROM Felszolgál WHERE sör = Bud ; 6

Ismétlődések kiküszöbölése összesítésben Az összesítő függvényen belül DISTINCT. Példa: hány különféle áron árulják a Bud sört? SELECT COUNT(DISTINCT ár) FROM Felszolgál WHERE sör = Bud ; 7

NULL értékek nem számítanak az összesítésben NULL soha nem számít a SUM, 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énye NULL. Kivétel: COUNT az üreshalmazon 0-t ad vissza. 8

Példa: NULL értékek összesítésben SELECT count(*) FROM Felszolgál WHERE sör = Bud ; A Bud sört árusító kocsmák száma. SELECT count(ár) FROM Felszolgál WHERE sör = Bud ; Azon kocsmák száma, ahol ismerjük a Bud sör árát. 9

Csoportosítás Egy SELECT-FROM-WHERE kifejezést GROUP BY záradékkal folytathatunk, melyet attribútumok listája követ. A SELECT-FROM-WHERE eredménye a megadott attribútumok értékei szerint csoportosítódik, az összesítéseket ekkor minden csoportra külön alkalmazzuk. 10

Példa: Csoportosítás A Felszolgál(kocsma, sör, ár) tábla segítségével adjuk meg a sörök átlagos árát. SELECT sör, AVG(ár) FROM Felszolgál GROUP BY sör; beer AVG(price) Bud 2.33 Miller 2.45 11

Példa: Csoportosítás SELECT alkesz, AVG(ár) FROM Látogat, Felszolgál WHERE sör = Bud AND Látogat.kocsma = Felszolgál.kocsma GROUP BY alkesz; Alkeszkocsma-ár hármasok a Bud sörre. Alkeszek szerinti csoportosítás. 12

A SELECT lista és az összesítések Ha összesítés is szerepel a lekérdezésben, a SELECT-ben felsorolt attribútumokra a következő érvényes 1. Összesítések, amelyekben egy összesítési operátort alkalmazunk egy attribútumra vagy egy attribútumot tartalmazó kifejezésre. Ezek a kifejezések csoportonként kerülnek kiértékelésre. 2. Attribútumok, amelyek a GROUP BY záradékban szerepelnek, mint a példában alkesz. Egy összesítéseket tartalmazó SELECT záradékban csak a GROUP BY záradékban is megtalálható attribútumok jelenhetnek meg összesítési operátor nélkül. 13

Helytelen lekérdezés Elsőre sokan gondolhatják azt, hogy az alábbi lekérdezés a Bud sört legolcsóbban áruló kocsmát adja vissza: SELECT kocsma, MIN(ár) FROM Felszolgál WHERE sör= Bud ; Valójában ez egy helytelen SQL lekérdezés. 14

HAVING záradék A GROUP BY záradékot egy HAVING <feltétel> záradék követheti. Ebben az esetben a feltétel az egyes csoportokra vonatkozik, ha egy csoport nem teljesíti a feltételt, nem lesz benne az eredményben. 15

Példa: HAVING A Felszolgál(kocsma, sör, ár) és Sörök(név, gyártó) táblák felhasználásával adjuk meg az átlagos árát azon söröknek, melyeket legalább három kocsmában felszolgálnak, vagy Pete a gyártójuk. 16

SELECT sör, AVG(ár) FROM Felszolgál GROUP BY sör Megoldás HAVING COUNT(kocsma) >= 3 OR sör IN (SELECT név FROM Sörök WHERE gyártó = Pete ); Sör csoportok, melyeket legalább 3 nem-null kocsmában árulnak, vagy Pete a gyártójuk. Sörök, melyeket Pete gyárt. 17

A HAVING feltételére vonatkozó megszorítások Az alkérdésre nincs megszorítás. Az alkérdésen kívül csak olyan attribútumok szerepelhetnek, amelyek: 1. vagy csoportosító attribútumok, 2. vagy összesített attribútomok. (Azaz ugyanazok a szabályok érvényesek, mint a SELECT záradéknál). A HAVING záradékban hivatkozott összesítés csak az éppen feldolgozott csoport soraira vonatkozik. A FROM záradékban megadott relációk bármely attribútumára képezhetünk a HAVING záradékban összesítést, összesítés nélkül a HAVING záradékban csak azok az attribútumok fordulhatnak elő, amelyek a GROUP BY listában is szerepeltek. (Ugyanaz a szabály, mint ami a SELECT záradékra is vonatkozott.) 18

Adatbázis módosítások A módosító utasítások nem adnak vissza eredményt, mint a lekérdezések, hanem az adatbázis tartalmát változtatják meg. 3-féle módosító utasítás létezik: 1. Insert (beszúrás). 2. Delete (törlés). 3. Update (létező sorok értékeinek módosítása). Data Manipulation Language (DML). 19

Beszúrás Ha egyetlen sort szúrunk be: INSERT INTO <reláció> VALUES ( <attribútum lista> ); Példa: a Szeret(alkesz, sör) táblában rögzítjük, hogy Zsuzska szereti a Bud sört. INSERT INTO Szeret VALUES( Zsuzska, Bud ); 20

Az INSERT-nél megadhatjuk az attribútumokat A reláció neve után megadhatjuk az attribútumait. Ennek két oka lehet: 1. elfelejtettük, hogy a reláció definíciójában, milyen sorrendben szerepeltek az attribútumok. 2. Nincs minden attribútumnak értéke, és azt szeretnénk, ha a hiányzó értékeket NULL vagy default értékkel helyettesítenék. 21

Példa: Attribútumok megadása INSERT INTO Szeret(sör, alkesz) VALUES( Bud, Zsuzska ); 22

Default (alapértelmezett) értékek megadása A CREATE TABLE utasításban az oszlopnevet DEFAULT kulcsszó követheti és egy érték. Ha egy beszúrt sorban hiányzik az adott attribútum értéke, akkor a default értéket kapja. 23

Példa: Default (alapértelmezett) érték CREATE TABLE Alkeszek ( név CHAR(30) PRIMARY KEY, ); cím CHAR(50) DEFAULT 123 Sesame St., telefon CHAR(16) 24

Példa: Default (alapértelmezett) értékek INSERT INTO Alkeszek(név) VALUES( Zsuzska ); Az eredmény sor: név cím telefon Zsuzska 123 Sesame St NULL 25

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> ); 26

Példa: Beszúrás alkérdéssel A Látogat(alkesz, kocsma) tábla felhasználásával adjuk hozzá a Szesztestvérek(név) táblához Zsuzska szesztestvéreit, vagyis azokat, akikkel legalább egy közös kocsmát látogatnak. 27

A szesztestvér. Megoldás INSERT INTO Szesztestvérek (SELECT l2.alkesz FROM Látogat l1, Látogat l2 WHERE l1.alkesz = Zsuzska AND ); l2.alkesz <> Zsuzska AND l1.kocsma = l2.kocsma Alkesz párok: az első Zsuzska, a második nem Zsuzska, de van olyan kocsma, amit mindketten látogatnak. 28

Törlés A törlendő sorokat egy feltétel segítségével adjuk meg: DELETE FROM <reláció> WHERE <feltétel>; 29

Példa: Törlés DELETE FROM Szeret WHERE alkesz = Zsuzska AND sör = Bud ; 30

Példa: Az összes sor törlése DELETE FROM Likes; 31

Példa: Több sor törlése A Sörök(név, gyártó) táblából töröljük azokat a söröket, amelyekhez létezik olyan sör, amit ugyanaz a cég gyártott. DELETE FROM Sörök s WHERE EXISTS ( SELECT név FROM Sörök WHERE gyártó = s.gyártó AND név <> s.név); Azok a sörök, amelyeknek ugyanaz a gyártója, mint az s éppen aktuális sorának, a nevük viszont különböző. 32

A törlés szemantikája --- (1) Tegyük fel, hogy az Anheuser-Busch csak Bud és Bud Lite söröket gyárt. Tegyük fel még, hogy s sorai közt a Bud fordul elő először. Az alkérdés nem üres, a későbbi Bud Lite sor miatt, így a Bud törlődik. Kérdés, hogy a Bud Lite sor törlődik-e? 33

A törlés szemantikája --- (2) Válasz: igen, a Bud Lite sora is törlődik. A törlés ugyanis két lépésben hajtódik végre. 1. Kijelöljük azokat a sorokat, amelyekre a WHERE feltétele teljesül. 2. Majd töröljük a kijelölt sorokat. 34

Módosítás Bizonyos sorok bizonyos attribútumainak módosítása. UPDATE <reláció> SET <attribútum értékadások listája> WHERE <sorokra vonatkozó feltétel>; 35

Példa: Módosítás Fecó telefonszámát 555-1212-re változtatjuk (Fecó itt egy alkesz): UPDATE Alkeszek SET telefon = 555-1212 WHERE név = Fecó ; 36

Példa: Több sor módosítása Legfeljebb 4 dollárba kerülhessenek a sörök: UPDATE Felszolgál SET ár = 4.00 WHERE ár > 4.00; 37

Adatbázis sémák SQL-ben Data Definition Language (DDL), az SQL nyelv része, ennek segítségével hozhatunk létre adatobjektumokat, deklarálhatunk megszorításokat stb. 38

Relációk létrehozása A legegyszerűbb forma: CREATE TABLE <név> ( <elemek listája> ); Relációk törlése: DROP TABLE <név>; 39

Tábla definíciók elemei A legegyszerűbb elem: az attribútum és annak típusa. A legfontosabb típusok a következők: INT vagy INTEGER (szinonimák). REAL vagy FLOAT (szinonimák). CHAR(n ) = rögzített hosszúságú sztring n karakter hosszú. VARCHAR(n ) = változó hosszúságú sztring legfeljebb n karakter hosszú. 40

Példa : Create Table CREATE TABLE Felszolgál ( kocsma CHAR(20), ); sör ár VARCHAR(20), REAL 41

SQL értékek Az egészek és lebegőpontos típusú konstansokat csak szimplán le kell írni. (Pont jelöli a tizedesvesszőt.) A sztringek esetében aposztrófok közé kell tennünk a konstansokat. Két aposztróf = egyetlen aposztróf, például: Joe s Bar. Minden érték lehet NULL is. 42

Dátum és idő A DATE és TIME külön típusok az SQLben. A dátum típus formátuma: DATE yyyy-mm-dd Példa: DATE 2007-09-30 (2007. szeptember 30.) 43

Idő típus Az TIME típus formátuma: TIME hh:mm:ss Opcionálisan tizedespont is következhet a másodpercek után. Példa: TIME 15:30:02.5 = fél négy múlt két és fél másodperccel. 44

Kulcsok megadása (deklarálása) Egy attribútumot vagy attribútum listát kulcsként deklarálhatunk (PRIMARY KEY vagy UNIQUE). Mindkét 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. A különbségekről később lesz szó. 45

Egy attribútumos kulcs deklarálása PRIMARY KEY vagy UNIQUE kulcsszót írhatjuk közvetlenül az attribútum mögé. Példa: CREATE TABLE Sörök ( név CHAR(20) UNIQUE, ); gyártó CHAR(20) 46

Több attribútumú kulcsok megadása A kulcs deklaráció a CREATE TABLE utasítás egy eleme is lehet az attribútum-típus elemek után. Több attribútumú kulcsokat csak ebben a formában deklarálhatunk. Ugyanakkor az egyetlen attribútumból álló kulcsokat is megadhatjuk ily módon. 47

Példa: Több attribútumú kulcs CREATE TABLE Felszolgál ( kocsma CHAR(20), ); sör ár VARCHAR(20), REAL, PRIMARY KEY (kocsma, sör) 48

PRIMARY KEY vs. UNIQUE 1. Egy relációhoz egyetlen PRIMARY KEY tartozhat és több UNIQUE megszorítás. 2. A PRIMARY KEY egyetlen attribútuma sem kaphat NULL értéket. A UNIQUE megszorításnál szerepelhetnek NULL értékek egy soron belül akár több is. 49