Ma az un. Relációs adatmodelleket használjuk.

Slides:



Advertisements
Hasonló előadás
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.
Advertisements

10. gyakorlat SQL SELECT.
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.
PL/SQL folytatás Kurzorok Alprogramok Tárolt eljárások ADATBÁZIS ALAPÚ RENDSZEREK.
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
Microsoft Access Lekérdezések.
1 Informatikai Szakképzési Portál Adatbázis kezelés DCL – Adatvezérlő nyelv.
Delphi programozás alapjai
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.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
Többtáblás lekérdezések, allekérdezések Rózsa Győző
megismerése, mintaadatbázis létrehozása
SQL – DQL (Data Query Language ) adat lekérdezések
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.
SQL 1 SEQUEL, Structured English Query Language: SQL ANSI, ISO: SQL86, SQL89, SQL92. Alap (entry), közbenső (intermediate), teljes (full) szint. A DDL.
SQL92 lehetőségek KL A tábla B tábla C view adatok VIEW működése utasítás: SELECT.. FROM A,B … SELECT.. FROM C Az adatok a hivatkozáskor állítódnak elő.
ADATBÁZISOK
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.
Nézettáblák létrehozása, módosítása és törlése
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.
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;
DDL – Adatdefiníciós nyelv
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
2012. tavaszi félév Véső Tamás Véső Tamás OE­NIK / 29.
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.
SQL-Structured Query Language. Parancs(utasítás) csoportok CREATE - táblák létrehozása ALTER – táblák módosítása DROP – táblák törlése DDL –Data Definition.
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.
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.
SQL SELECT parancsok Kottyán László. A bemutató mintatáblái.
1 Informatikai Szakképzési Portál Adatbázis kezelés DQL – Adatlekérdező nyelv.
Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai
Szerver és kliens gép közötti kommunikáció Adattárolási modellek  OLTP: OnLine Transaction Processing az MSSQL Szervert egy időben egyszerre sok felhasználó.
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
2. AB gyakorlat Egytáblás csoportosító lekérdezések.
SQL történelem 1970 Edgar F. Codd (IBM) cikke 12 szabály a relációs adatmodellekre 1979 első kereskedelmi forgalmazású relációs adatbáziskezelő 1986 az.
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 rendszerek I
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.
Bevezetés Adatbázisok használata. Mi is az adatbázis? Az adatbázisok ma már az élet számos területén alapvető fontossággal bírnak (Google, Amazon, Flickr,
Triggerek gyakorlás.
Adatbázisok SQL.
Logisztikai projekt - gyakorlat Adatbázis-elmélet
Előadás másolata:

Ma az un. Relációs adatmodelleket használjuk. Adatbáziskezelés 70-es évek elején jött létre a magas szintű programozási nyelvek kialakulásával együtt, a számítógépek tömeges elterjedése következtében. Ma az un. Relációs adatmodelleket használjuk. Tehermentesíti a programozót, számos adatkezeléssel kapcsolatos feladat alól. Pl.: Konkurens hozzáférés biztosítása Jogosultság kezelés Adat védelmi szolgáltatások Hatékony fájlrendszer Redundancia mentesség biztosítása (tervezési módszer)

Relációs adatmodell Az adatbázis táblákból áll A táblák sorai az összetartozó adatokat, oszlopai a tulajdonságokat határozzák meg

SQL szerverek Az utasítást szövegként kapja végrehajtja és amennyiben lekérdezés volt visszaküldi az eredménytáblát SQLServer2005ExpressEdition SQLEXPR_ADV.EXE Telepítés Jogosultság: Windows autentikáció (gépnév\IUSR_gépnév = aktuális user) Windows és SQL autentikáció

SQL nyelv DDL: Adatdefiníciós nyelv Adatbázis létrehozása, módosítása, törlése Táblák létrehozása, módosítása, törlése DML: Adatmódosító nyelv Adatok beírása, módosítása, törlése Lekérdezések DCL: Adatvezérlő nyelv Jogosultságkezelés, tárolt eljárások, triggerek, stb.

DDL: Adatdefiníciós nyelv Adatbázis létrehozása, törlése Táblák létrehozása Create database adatbázisnév; Adatbázis létrehozása Drop database adatbázisnév; Adatbázis törlése USE adatbázisnév; adatbázis kijelölése Create table táblanév (oszlopnév adattípus(méret) paraméter, … oszlopnév adattípus(méret) paraméter); tábla létrehozása Pl.: CREATE TABLE dolgozo (D_azon int IDENTITY(1,1) NOT NULL primary key, D_nev nchar(40), D_szul smalldatetime, D_irsz decimal(4,0) DEFAULT(6800) CHECK (D_irsz >= 1000 and D_irsz <= 9999), D_varos nchar(25) DEFAULT(‘Hódmezővásárhely’), D_cim nchar(60));

DDL: Adatdefiníciós nyelv Táblák módosítása, törlése Alter table táblanév művelet; tábla módosítása Pl.: Alter TABLE dolgozo ADD Tel1 nchar(40), Tel2 nchar(40) ; Új oszlop hozzáadása Alter TABLE dolgozo DROP COLUMN Tel2; Oszlop törlése Alter TABLE dolgozo ALTER COLUMN Tel1 nchar(50); Oszlop módosítása Drop table táblanév; tábla törlése

DDL: Adatdefiníciós nyelv Index táblák létrehozása CREATE tipus INDEX indexnév ON táblanév (oszlopnév lista); index létrehozása Index tipus: UNIQUE: egyedi index létrehozása. Nem lehet két rekord, melynél az indexben szereplő oszlopokban ugyanazok az adatok találhatók. CLUSTERED: fizikailag is rendezi a rekordokat. Ebből következik, hogy táblánként csak egy ilyen típusú index lehet. Ha ilyen indexet készítünk, akkor a tábla egészen addig zárolva lesz, amíg az indexelés véget nem ér. NONCLUSTERED: új indexfile keletkezik, ez az alapértelmezett. Pl.: CREATE INDEX nev ON dolgozo (D_Nev) paraméterek; Oszlop módosítása

DDL: Adatdefiníciós nyelv Index táblák létrehozása, törlése A WITH kulcsszó után különböző kapcsolókat adhatunk meg. A PADINDEX kapcsoló határozza meg, hogy egy index belső csomópontjai hány sort tartalmazzanak. Ez nem lehet kevesebb, mint két sor. A PADINDEX kapcsoló használatának a FILLFACTOR kapcsolóval együtt van értelme, mivel az abban megadott százalékarányt használja. A FILLFACTOR kapcsolóval állíthatjuk be, hogy az SQL Server mennyi helyet hagyjon fent az indexlapokon a még várható sorok számára. Azoknál a tábláknál növelheti a teljesítményt, amelyekbe gyakran szúrunk be adatokat. A FILFFACTOR utáni szám azt határozza meg, hogy az indexlapok hány százalékát kell szabadon hagyni. A kisebb érték azoknál a tábláknál használható, amelybe még biztosan több adat kerül. Olyan tábláknál, ahol az adatok nem változnak, a kapcsoló értékét akár 100-ra is állíthatjuk. Az IGNORE_DUP_KEY kapcsoló azt határozza meg, hogy az egyedi index készítésekor (UNIQUE) hogyan viselkedjen az SQL Server, amikor két olyan rekordot talál, melyeknek az indexelt mezőkben lévő adataik megegyeznek. Ha ezt a kapcsolót megadjuk, akkor nem kapunk hibaüzenetet. A SORTED_DATA használatával a CLUSTERED indexek esetén növelhetjük meg az index elkészítésének hatékonyságát. Akkor adjuk meg, ha biztosak vagyunk benne, hogy az indexelendő adatok már az indexnek megfelelő fizikai sorrendben vannak. Az SQL Server ellenőrizni fogja, hogy az adatok tényleg a helyes sorrendben vannak-e, és ha nem, akkor hibaüzenetet küld. Ellenkező esetben a kapcsoló használata jelentősen meggyorsítja az index elkészítését, hiszen az SQL Servernek nem kell rendeznie az adatokat, és ehhez kevesebb helyre is lesz szüksége. A SORTED_DATA_REORG kapcsoló a nem CLUSTERED típusú index esetén is fizikailag sorba rendezi az adatokat az indexnek megfelelően, és eközben csökkenti az adatok töredezettségét is, miáltal jelentősen javul a teljesítmény. Az IGNORE_DUP_ROW kapcsoló a nem egyedi indexszel (UNIQUE), de a CLUSTERED opcióval elkészített indexeknél használható. Ha az index elkészítése közben kettőződött adatokat talál az indexelt mezőkben, akkor törli a kettőzött értékeket, majd hibaüzenetet küld. A ROLLBACK-kel a törölt adatokat visszaállíthatjuk. Ha az ALLOW_DUP_ROW kapcsolót használjuk nem egyedi, CLUSTERED indexek esetén, a kettőzött adatok megengedettek lesznek. Értelemszerűen az IGNORE_DUP_ROW kapcsolóval nem használható együtt. Ha már volt előzőleg létrehozott CLUSTERED index, akkor a DROP_EXISTING kapcsolóval töröltethetjük, majd újra létrehozhatjuk azt. Az összes többi index is frissítésre kerül. A STATISTICS_NORECOMPUTE kapcsolóval kikapcsolhatjuk az elosztási statisztikák frissítését. Ezt a beállítást az UPDATE STATISTICS paranccsal vonhatjuk vissza. Az ON kulcsszó után megadhatjuk azt a fájlcsoportot, amelyet az index számára szeretnénk kijelölni. Ezzel a nem CLUSTERED indexek teljesítményét lehet javítani. CLUSTERED index esetén nem csak az index, hanem az összes adat is átkerül a megadott fájlcsoportba. tábla módosítása Alter TABLE dolgozo DROP COLUMN Tel2; Oszlop törlése Pl.: Alter TABLE dolgozo ALTER COLUMN Tel1 nchar(50); Oszlop módosítása Drop index táblanév.indexnév; index törlése

DML: Adatmódosító nyelv Adatatok beírása, módosítása INSERT INTO táblanév (oszlopnév-litsa) VALUES (értlék-lista); Adatbeírás Pl.: INSERT INTO dolgozo (D_Nev,D_szul,D_Irsz,D_varos,D_cim) VALUES ('Kis Péter','1980-05-15',6800, 'Hódmezõvásárhely', 'Kaszap u 21 2/5'); UPDATE táblanév SET oszlop1= új érték, oszlop2 = új érték WHERE feltétel; adatmódosítás Pl.: UPDATE dolgozo SET D_irsz= 6600, D_varos = 'Szentes' WHERE D_Nev = 'Kis Péter';

DML: Adatmódosító nyelv Adatatok törlése DELETE FROM táblanév WHERE (feltétel); Adattörlés Pl.: DELETE FROM dolgozo WHERE D_Nev = 'Kis Péter';

DML: Adatmódosító nyelv Adatatlekérdezés SELECT. . . oszlop kiválasztása FROM. . . tábla-nevek megadása [WHERE. . .] sorok kiválasztása [GROUP BY. . . csoportosítás [HAVING. . .] ] csoportok közötti választás [ORDER BY. . .] E-tábla rendezése

DML: Adatmódosító nyelv Adatatlekérdezés

1. Kik a partnereink? 2. Mely partnerek budapestiek? 3. Mely partnerek vidékiek?(partnernévre rendezve) 4. Kinek nincs telefonja? 5. Ki hatodik kerületi? 6. Mely “C” –vel kezdődő budapesti partnernek a telefonját nem tudjuk? 7. Ki az, aki gödöllői vagy egri és nevében van “i” ? 8. Milyen különböző nevű cikkeink vannak? 9. Mennyi a cikkek összértéke? 10. Mennyi az 5000 és 10000Ft közötti cikkek összértéke? 11. Hány cikkünk van és mennyibe kerül a legolcsóbb és a legdrágább cikk? 12. Hány különböző nevű cikkünk van? 13. Az egyes számlákon milyen cikkeket vettek? 14. A budapesti partnereink milyen cikkeket vettek? 15. Melyik cikkcsoportban van tíznél kevesebb cikk? 16. Mennyi az egyes számlák végösszege? 17. Mely számlákon szerepel kettőnél több cikk? 18. Melyik a legdrágább cikk? 19. Mely cikkekből nem vásároltak? 20. Mely partner vásárolt az átlagosnál többért a tárgyévben? 21. Hány partner neve szerepel az ábécé egyes betűivel? 22. Cikkcsoportonként melyik termék a legolcsóbb? 23. Emeljük meg a “COAT” cikkcsoportban levő cikkek árát 10%-kal! 24. Mentsük ki a budapesti partnereinket egy külön táblába! 25. Tegyük ki egri partnereinket is ebbe a táblába! 26. Mely partnerek fizettek “készpénz”-zel is és “átutalás”-sal is? 27. Mely partnerek fizettek csak 1-es fizetési móddal (készpénz)? 28. Mely partnerek vásároltak csupán egyszer? 29. Melyik partner nem vásárolt az utóbbi fél évben semmit?

DML: Adatmódosító nyelv Adatatlekérdezés 1. Kik a partnereink? SELECT PartNev FROM Partner; 2. Mely partnerek budapestiek? SELECT PartNev, Varos FROM Partner WHERE Varos = 'Budapest' 3. Mely partnerek vidékiek? (partnernévre rendezve) SELECT PartNev, Varos FROM Partner WHERE Varos <> 'Budapest' ORDER BY PartNev;

DML: Adatmódosító nyelv Adatatlekérdezés 4. Kinek nincs telefonja? SELECT PartNev, Tel1, Tel2 FROM Partner WHERE (Tel1 IS NULL) AND (Tel2 IS NULL) Az üres cella semmivel sem egyenlő és semmitől sem különböző, ezért speciális értékelést alkalmazunk: Tel1 is null igaz, ha Tel1 üres Tel1 is not null igaz, ha Tel1 nem üres

DML: Adatmódosító nyelv Adatatlekérdezés 5. Ki hatodik kerületi? SELECT PartNev, Irszam FROM Partner WHERE Irszam LIKE '106%' A feltételekben helyettesítő karaktereket is használhatunk, de csak a LIKE operátor alkalmazásával. % tetszőleges számú karaktert helyettesíthet _ egy karaktert helyettesíthet A helyettesítő karakterekből többet is elhelyezhetünk egy feltételben p.: Név LIKE’C%’ C betűvel kezdődő nevek Név LIKE’%C%’ C betűt tartalmazó nevek

DML: Adatmódosító nyelv Adatatlekérdezés 6. Mely “C” –vel kezdődő budapesti partnernek a telefonját nem tudjuk? 7. Ki az, aki gödöllői vagy egri és nevében van “i” ? 8. Milyen különböző nevű cikkeink vannak? SELECT DISTINCT Cikknev FROM Cikk; A SELECT után megadott DISTINCT kulcsszó a duplikált sorok szűrésére szolgál.

DML: Adatmódosító nyelv Adatatlekérdezés, összesítő függvények 9. Mennyi a cikkek összértéke? SUM(oszlopnév) összeg (csak szám) AVG(oszlopnév) átlag (csak szám) MIN(oszlopnév) minimum érték MAX(oszlopnév) maximum érték COUNT(*) sorok száma COUNT(oszlopnév) nem null cellák darabszáma Egy lekérdezésben több összesítő függvényt is alkalmazhatunk, az összesítő függvényekkel műveleteket is végezhetünk, de alaphelyzetben (csoportosítás nélkül) más oszlopokat nem jeleníthetünk meg SELECT SUM(EgysegAr) AS összérték FROM Cikk;

DML: Adatmódosító nyelv Adatatlekérdezés, összesítő függvények 10. Mennyi az 5000 és 10000Ft közötti cikkek összértéke? SELECT SUM(EgysegAr) AS összérték FROM dbo.Cikk WHERE (EgysegAr BETWEEN 5000 AND 10000)

DML: Adatmódosító nyelv Adatatlekérdezés, összesítő függvények 11. Hány cikkünk van és mennyibe kerül a legolcsóbb és a legdrágább cikk? SELECT COUNT(*) AS db, MIN(EgysegAr) AS legolcsóbb, MAX(EgysegAr) AS legdrágább FROM Cikk

DML: Adatmódosító nyelv Adatatlekérdezés, összesítő függvények 12. Hány különböző nevű cikkünk van? MIN(distinct oszlopnév) minimum érték MAX(distinct oszlopnév) maximum érték COUNT(distinct oszlopnév) nem null különböző cellák SELECT COUNT(DISTINCT Cikknev) AS db FROM Cikk

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 13. Az egyes számlákon milyen cikkeket vettek? Számlaszám szerint rendezve kívánjuk megjeleníteni a számlaszámot és a cikkszámot és a cikknevet. Két táblát kell használnunk.

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 13. Az egyes számlákon milyen cikkeket vettek? View segítségével: SQL segítségével: SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk INNER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam Az INNER JOIN: csak az illezkedő rekordokat jeleníti meg VAGY SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk, SzamlaTetel Where Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata SQL segítségével: SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk LEFT OUTER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam Az LEFT OUTER JOIN: a CIKK tábla összes rekordja és a Számlatétel illeszkedő értékei jellennek meg Az RIGHT OUTER JOIN: a Számlatétel tábla összes rekordja és a CIKK illeszkedő értékei jellennek meg SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk RIGHT OUTER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 14. A budapesti partnereink milyen cikkeket vettek? View segítségével: SELECT PartNev, Cikk.Cikkszam, Cikknev FROM Szamla, Partner, SzamlaTetel, Cikk WHERE Szamla.PartAzon = Partner.PartAzon and Szamla.SzamlaSzam = SzamlaTetel.SzamlaSzam and SzamlaTetel.Cikkszam = Cikk.Cikkszam and (dbo.Partner.Varos = 'Budapest')

DML: Adatmódosító nyelv Adatatlekérdezés, csoportosítás 15. Melyik cikkcsoportban van tíznél kevesebb cikk? View segítségével: SQL segítségével: SELECT COUNT(*) AS Expr1, Cikkcsoport FROM dbo.Cikk GROUP BY Cikkcsoport HAVING (COUNT(*) < 10) Az INNER JOIN: csak az illezkedő rekordokat jeleníti meg

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 16. Mennyi az egyes számlák végösszege? View segítségével: SQL segítségével: SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk INNER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam Az INNER JOIN: csak az illezkedő rekordokat jeleníti meg

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 17. Mely számlákon szerepel kettőnél több cikk? View segítségével: SQL segítségével: SELECT SzamlaSzam, Cikknev, Cikk.Cikkszam FROM Cikk INNER JOIN SzamlaTetel ON Cikk.Cikkszam = SzamlaTetel.Cikkszam ORDER BY SzamlaSzam Az INNER JOIN: csak az illeszkedő rekordokat jeleníti meg

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 18. Melyik a legdrágább cikk? Select top 1 Cikkszam, cikknev From cikk order by egysegar desc Csökkenő sorrendbe rendezzük és csak az első értéket Jelenítjük meg. Megoldható a feladat belső selectel is: Select Cikkszam, cikknev From cikk where egysegar = (Select max(egysegar) from cikk)

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 19. Mely cikkekből nem vásároltak? SELECT Cikknev, cikkszam FROM Cikk Where cikkszam not in (Select cikkszam from szamlatetel)

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 20. Mely partner vásárolt az átlagosnál többért a tárgyévben? (A megoldást két részre bontjuk) Select Partnev, sum(menny*egysegar*(1+AFAErtek)) as Ft From szamlatetel, szamla, partner Where partner.partazon= szamla.partazon and szamla.szamlaszam=szamlatetel.szamlaszam Group by partner.partazon, partnev Elmentjük a lekérdezést 20a néven Select Partnev, Ft From [20a] Where Ft >(Select AVG(Ft) from [20a]) Megjegyzés: mivel szabályosan a táblaneveknek betűvel kell kezdődni, a szögletes zárójellel jelezzük, hogy a 20a táblanév

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 21. Hány partner neve szerepel az ábécé egyes betűivel? (Az oszlopnevekben függvényeket is használhatunk) Select Left(Partnev,1) as betű, count(*) as db From Partner Group by Left(Partnev,1);

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 22. Cikkcsoportonként melyik termék a legolcsóbb? Select cikkcsoport, cikknev, cikkszam, egysegar From cikk C1 Where egysegar = (Select min(egysegar) from cikk C2 where C1. cikkcsoport=C2.cikkcsoport) A belső select hivatkozik a külső selectben lévő táblára, ezért minden sorra külön kiértékelődik. Minden sornál az aktuális cikkcsoport legolcsóbb árát adja a belső select.

DML: Adatmódosító nyelv 23. Emeljük meg a “COAT” cikkcsoportban levő cikkek árát 10%-kal! UPDATE Cikk SET EgysegAr = EgysegAr*1.1 WHERE Cikkcsoport='COAT'; 24. Mentsük ki a budapesti partnereinket egy külön táblába! SELECT Partner.* INTO bud FROM Partner WHERE Varos='budapest'; 25. Tegyük ki egri partnereinket is ebbe a táblába! INSERT INTO bud (partnev, irszam, Varos, UtcaHsz, Tel1, Tel2) SELECT partnev, irszam, Varos, UtcaHsz, Tel1, Tel2 FROM Partner WHERE Varos='eger';

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 26. Mely partnerek fizettek “készpénz”-zel is és “átutalás”-sal is? Select distinct Partnev from partner, szamla where partner.partazon in (Select partazon from szamla where FizmAzon=1) and partner.partazon=Szamla.partazon and FizmAzon=2;

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 27. Mely partnerek fizettek csak 1-es fizetési móddal (készpénz)? Select distinct Partnev from partner, szamla where partner.partazon not in (Select partazon from szamla where FizmAzon<>1) and partner.partazon=Szamla.partazon and FizmAzon=1;

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 28. Mely partnerek vásároltak csupán egyszer? Select PartNev, COUNT(*) as vásárolt from partner, szamla where partner.partazon=Szamla.partazon Group by Partner.partazon, PartNev Having Count(*) = 1;

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 29. Melyik partner nem vásárolt az 2000.06.01 óta semmit? Select PartNev from partner where partazon not in (Select partazon from szamla Where SzlaDat > '2000-06-01')

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata Integer, money, real, float Select m_szám, round(óraszám,0)*óradíj as összeg from munka

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata SELECT neve, név, m1.óraszám FROM munka AS m1 INNER JOIN megrendelõ ON m1.megrendelõ = dbo.megrendelõ.azonosító INNER JOIN dolgozó ON m1.vezetõ = dolgozó.kód WHERE m1.óraszám = (SELECT MAX(óraszám) FROM dbo.munka AS m2 WHERE m1.vezetõ = m2.vezetõ)

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 21 SELECT sum(óraszám), count(*) FROM munka, dolgozó, csoport WHERE dolgozó.kód=vezetõ and neve='Nagy Péter' and munka.m_szám=csoport.m_szám

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 22 SELECT top 1 neve, név, convert(VARCHAR(25),ind_kelt,102) from csoport, dolgozó, munka, megrendelõ where dolgozó.kód=csoport.kód and csoport.m_szám=munka.m_szám and megrendelõ=azonosító and belép_éve=(Select min(belép_éve) from dolgozó) order by ind_kelt

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata SELECT top 1 NÉV,ind_kelt From munka m1, megrendelõ where megrendelõ=azonosító and ind_kelt=(Select max(ind_kelt) from munka m2 where m1.megrendelõ=m2.megrendelõ) order by ind_kelt 23 24 SELECT d1.neve, d2.neve, cs1.m_szám From dolgozó d1, dolgozó d2, csoport cs1, csoport cs2 Where d1.kód=cs1.kód and d2.kód=cs2.kód and cs1.m_szám=cs2.m_szám and d1.kód < d2.kód Order by d1.neve, d2.neve

DML: Adatmódosító nyelv Adatatlekérdezés, táblák kapcsolata 25 select d1.neve as dolgozó, d2.neve as nem_fõnöke from dolgozó d1, dolgozó d2 where d2.kód not in (Select vezetõ from munka, csoport where munka.m_szám=csoport.m_szám and d1.kód=csoport.kód) and d1.kód<>d2.kód;

DCL: Adatvezérlő nyelv Tárolt eljárás CREATE PROCEDURE proba_SP AS BEGIN SELECT * FROM Partner END Exec proba_SP CREATE PROCEDURE beszur_sp (@p1 char(60), @p2 char(5), @p3 char(30)) AS BEGIN insert into partner (PartNev, Irszam, Varos) values (@p1, @p2, @p3) select * from partner END Exec beszur_sp 'Kis Péter', '6800', 'Hódmezõvásárhely'

DCL: Adatvezérlő nyelv Tárolt eljárás CREATE PROCEDURE ha_sp (@p1 char(60), @p2 char(5), @p3 char(30)) AS BEGIN if not exists (Select * from partner where Partnev = @p1) insert into partner (PartNev, Irszam, Varos) values (@p1, @p2, @p3) print'bejegyezve' END else print 'Már létezik' Exec beszur_sp 'Kiss Péter', '6800', 'Hódmezõvásárhely'

DCL: Adatvezérlő nyelv Tárolt eljárás CREATE PROCEDURE ciklus AS BEGIN declare @x int select @x=1 while @x<5 begin print 'Az x még mindig kisebb ötnél' select @x=@x+1 end END Exec ciklus

DCL: Adatvezérlő nyelv Triggerek Triggereket általában az alkalmazás sajátosságaiból fakadó szabályosságok beépítésére alkalmazunk. Triggereket akkor is használunk, ha a kívánt megszorításokat a dekleratív eszközeinkel nem tudjuk megvalósítani. A triggerek a szabályok és az egyéb hivatkozási ellenőrzések után futnak le, ezért ha ezek nem teljesülnek, akkor végre sem hajtódik. Amennyiben a trigger hibás, nem fut le, a művelet sem kerül végrehajtásra. CREATE TRIGGER trigger neve ON tábla név FOR {INSERT, UPDATE, DELETE} [WIDTH ENCIPTRION] As sql utasítások

DCL: Adatvezérlő nyelv Triggerek Új táblát hozunk létre (logol) Új triggert hozunk létre CREATE TRIGGER log ON Partner FOR INSERT, UPDATE As insert into logol VALUES (getdate(), Host_name(), suser_name()) Módosítunk a partner táblán és a bejegyzés magától létrejön

DCL: Adatvezérlő nyelv Triggerek Triggerekkel megakadájozhatjuk egy művelet végrehajtását is. Műveletvégzéskor az inserted ill. a deleted tábla visszavonható módon tartalmazza az elvégzésre váró művelet rekordjait

DCL: Adatvezérlő nyelv Triggerek Delete triggereket általában akkor használjuk, ha egy rekord törlésekor más rekordokat is törölni kell vagy ha a törlés hivatkozási integritást sért. CREATE TRIGGER cikktorles ON Cikk FOR delete As Declare @torol char(8) Select @torol=cikkcsoport from deleted IF @torol = 'COAT' begin ROLLBACK TRAN RAISERROR ('Nem törölhetõ, mert COAT',16,10) end