SQL haladó Külső összekapcsolások, Csoportosítás/Összesítés,

Slides:



Advertisements
Hasonló előadás
10. gyakorlat SQL SELECT.
Advertisements

2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Lekérdezések SQL-ben Relációs algebra A SELECT utasítás
Adatbázis rendszerek I
Anyagadatbank c. tárgy gyakorlat
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 8. gyakorlat SQL alapok.
Erőállóképesség mérése Találjanak teszteket az irodalomban
1 Informatikai Szakképzési Portál Adatbázis kezelés Az SQL nyelv elemei.
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
Delphi programozás alapjai
Műveletek logaritmussal
5. GYAKORLAT SQL CREATE TABLE, aktualizálás. S QL Structured Query Language A relációs adatbáziskezelés szabványos nyelve Nem algoritmikus, de beépíthető.
– SQL 2: Adatok kezelése – Tarcsi Ádám, január 30. Adatbázis gyakorlat.
Adatbázis gyakorlat – SUBSELECT – Tarcsi Ádám március.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
SQL – DQL (Data Query Language ) adat lekérdezések
INSERT INTO Egy vagy több rekordot ad hozzá a táblához. Egyetlen rekordot hozzáfűző kifejezés: INSERT INTO cél_tábla (mező1,mező2,…) VALUES (érték1, érték2,
SQL Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések
Adatbázis rendszerek II.
Készítette: Sárközi Anikó
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
ADATBÁZISOK
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
Adatbázis kezelés SQL. Történeti áttekintés 1976IBM:SEQUEL,SQL 1976IBM:SEQUEL,SQL 1983ORACLE 1983ORACLE 1984INFORMIX 1984INFORMIX 1986SQL – szabvány :
Összesítés és csoportosítás lekérdezésekben. Halmazműveletek.
1 Informatikai Szakképzési Portál Adatbázis kezelés DML – Adat manipuláló nyelv.
- adatbázisséma definiálása (DDL) Data Definition Languages, - adatok aktualizálása (DML),Data Maniputaion Language - lekérdezési lehetőségek (DML) Data.
SQL. 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.
SQL.
Az SQL nyelv alapjai.
DML. Új rekord beszúrása: INSERT INTO tábla (oszlop1,oszlop2,…) VALUES (érték1,érték2,…); Rekord módosítása: UPDATE tábla SET oszlop = érték WHERE feltétel;
szakmérnök hallgatók számára
DDL – Adatdefiníciós nyelv
2012. tavaszi félév Véső Tamás Véső Tamás OE­NIK / 18.
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!
Adatbázis-kezelés SQL-lel. SQL SQL = Structured Query Language – Strukturált Lekérdezőnyelv Relációs adatbázis-kezelők lekérdezési nyelve. Alapjait az.
Adatbázis-kezelés SQL-lel
SQL DDL DATA DEFINITION LANGUAGE. Táblák létrehozása CREATE TABLE táblanév ( oszlopnév1 típus(méret) /DEFAULT érték/ /NOT NULL/, oszlopnév2 típus(méret)
Készítette: Tóth Ervin
Az SQL nyelv. SQL Az SQL utasításait két fő csoportba szokták sorolni: DDL (= Data Definition Language): adatstuktúra definiáló utasítások. DML (= Data.
DQL. A select parancs az adattábla lekérdezésére szolgál, azaz a táblában tárolt adatok közül az előírt feltételeknek megfelelőket kiválogatja. Formája.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 10. gyakorlat SQL SELECT, Összekapcsolás, Nézettáblák.
SQL.
QualcoDuna interkalibráció Talaj- és levegövizsgálati körmérések évi értékelése (2007.) Dr. Biliczkiné Gaál Piroska VITUKI Kht. Minőségbiztosítási és Ellenőrzési.
1 Sramó András Adatbázis-technológia V. előadás Adatbázis-technológia 5. előadás Az SQL.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Tarcsi Ádám, Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, január.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai
Objektum orientált programozás
Adatbázisok gyakorlat
Ma az un. Relációs adatmodelleket használjuk.
5. gyakorlat Fleiner Rita.
Többtáblás lekérdezések, hierarchikus lekérdezések, allekérdezések
Webprogramozó tanfolyam
SQL. SQL jellemzői Nem algoritmikus (nem tartalmaz algoritmikus szerkezeteket: ciklus, eljárás, elágazás) Nem rekurzív (önmagát nem hívhatja) Halmazorientált.
Adatbázis-kezelés 3-4. Adatok lekérdezése utasítás általános formája SELECT [ALL/DISTINCT] {*/, …, } FROM [ ], …, [ ] [WHERE GROUP BY, …, HAVING ORDER.
– SELECT - 1. – Tarcsi Ádám január Adatbázis gyakorlat.
SQL bevezetés Select-From-Where záradékok
Adatbázisok 1. SQL (alkérdések). Az IN használata Emlékezzünk vissza: Az IN után szereplő multihalmaz elemei lekérdezéssel is megadhatók SELECT nev FROM.
SQL aggregálás, csoportosítás és összekapcsolás Adatbázisok 1.
Többértékű függőségek
1 SQL jogosultság-kezelés Privilégiumok Grant és Revoke Grant Diagrammok.
Adatbázisok SQL.
Logisztikai projekt - gyakorlat Adatbázis-elmélet
Előadás másolata:

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

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.

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

Külső összekapcsolás (SQL) R OUTER JOIN S: a külső összekapcsolásoknál mindig ez szerepel. Opcionális NATURAL az OUTER előtt. Opcionális ON <feltétel> JOIN után. 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 sze- repelhet.

Ö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.

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’;

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’;

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.

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

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.

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

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

A SELECT lista és az összesítések Ha összesítés is szerepel a lekérdezésben, a SELECT-ben felsorolt attribútumok vagy egy összesítő függvény paramétereként szerepelnek, vagy a GROUP BY attribútumlistájában is megjelennek.

Helytelen lekérdezés Elsőre sokan gondolják, 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.

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.

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.

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

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: vagy csoportosító attribútumok, vagy összesített attribútomok. (Azaz ugyanazok a szabályok érvényesek, mint a SELECT záradéknál).

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: Insert (beszúrás). Delete (törlés). Update (létező sorok értékeinek módosítása). Data Manipulation Language (DML).

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

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

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

Default é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.

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

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

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

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.

Megoldás INSERT INTO Szesztestvérek (SELECT l2.alkesz A szesztestvér. Megoldás Alkesz párok: az első Zsuzska, a második nem Zsuzska, de van olyan kocsma, amit mindketten látogatnak. 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 );

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

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

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

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ő.

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?

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. Kijelöljük azokat a sorokat, amelyekre a WHERE feltétele teljesül. Majd töröljük a kijelölt sorokat.

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

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ó’;

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;

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.

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

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 or 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ú.

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

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.

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

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.

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ó.

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

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.

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

PRIMARY KEY vs. UNIQUE Egy relációhoz egyetlen PRIMARY KEY tartozhat és több UNIQUE megszorítás. 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.