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

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "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"

Átírás

1 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: /1

2 DQL utasítások 169/2 Projekció Szelekció Feltételek megfogalmazása Rendezés a lekérdezésben Aggregáció a lekérdezésben Csoportképzés a lekérdezésben Join Halmazműveletek Al-select Értéktől függő kiírt adat

3 DQL Adat lekérdező utasítás Az SQL nyelvben egyetlen parancs, a SELECT parancs szolgál az adatok lekérdezésére Alkalmas a relációs algebra minden műveletének a leképzésére Feladata: Egy vagy több adattáblából egy eredménytábla előállítása, amely a képernyőn listázásra kerül, vagy más módon használható fel. A parancs általános alakja: SELECT [distinct] mezőlista FROM táblalista [WHERE szelekciós_feltétel] [GROUP BY csoportosító_kifejezés] [HAVING csoportokra_vonatkozó_feltétel] [ORDER BY rendező_mezőlista]; 169/3

4 Projekció (vetítés) Projekció: csak a kijelölt mezők jelennek meg az eredmény relációban. Jele: mezőlista (r) Megvalósítása: select [distinct] mező_lista from tábla_lista; select Rendszám, Típus from autó; select * from autó; select Típus, Ár/280 As EuroÁr from autó; 169/4 As: Alias név select distinct szín from autó; *: Minden mező Autó Rendszám Típus Szín GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Fehér Típus Opel Nissan Trabant DISTINCT (különböző): csak az egymástól különböző sorok jelennek meg az eredménytáblában, így nem lesz két egyforma rekord benne. Ár EuroÁr Szín Fehér Ezüst

5 Szelekció (kiválasztás) Szelekció: a megadott feltételnek eleget tévő rekordok kerülnek át az eredmény relációba. Jele: felt (r) Megvalósítása: select mezőlista from táblalista WHERE szelekciós_feltétel; select * from autó WHERE Kor < 10; Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 JED-123 Nissan Ezüst 5 Ár /5

6 Feltételek megfogalmazása Használható operátorok: Relációs operátorok (=,!=, <, >,!<,!>, <>, <=, >=) Algebrai operátorok (+,-,*,/) Logikai operátorok (AND, OR, NOT) Speciális logikai kifejezések: x IS NULL: igaz, ha az x mező értéke NULL. x BETWEEN a AND b: igaz, ha a x b. x IN halmaz: igaz, ha x megegyezik a megadott halmaz egy elemével. Megfelel több vagy kapcsolatban lévő feltételnek. x LIKE minta: igaz, ha az x karaktersorozat megfelel a megadott mintának. Helyettesítő karakterek: 169/6 _ - egy kötelező karakter, % - tetszőleges számú karakter

7 NULL érték kezelése Az SQL-ben az egyes mezőkben szerepelhet null érték, ha nincs megadva a mezőre a Not Null megszorítás! A null nem azonos a mezőbe beírt 0 vagy ' ' értékkel! Jelentése: Nem megadott érték (nem tudom az adott telefonszámot) Nem értelmezhető érték (valakinek nincs nyelvismerete) Törölt érték Feltételekben null érték vizsgálatára csak az IS NULL és az IS NOT NULL kifejezések használhatók Egy null értéket bármivel hasonlítunk össze, az eredmény UNKNOWN (ismeretlen) Ha egy üres mezőre a mező=null feltételt adjuk meg, az unknown eredményt ad, vagyis nem lesz igaz! Aggregált értékek kiszámításakor a null értékek kimaradnak Ha egy mezőben null érték van, és a mezőt tartalmazza egy 169/7 számított kifejezés, akkor annak értéke is null érték

8 Háromértékű logika Az SQL-ben a null érték létéből következő unknown logikai érték miatt ún. háromértékű logika van, az értékek True, False és Unknown lehetnek. Hogyan működnek ilyen esetben a logikai operátorok? Az alábbi módon: x y x AND y x OR y NOT(x) T T T T F T U U T F T F F T F U T U T U U U U U U U F F U U F T F T T 169/8 F U F U T F F F F T

9 Null-érték függvények NVL(data, expr1) A null értékű adatot a megadott értékkel helyettesíti. Az adat és az érték típusának meg kell egyeznie! Az adattípus lehet karakter, szám, dátum select nvl(osztály, 'Nincs megadva osztály') Osztály from dolgozó; NVL2(data, expr1, expr2) Ha a data nem null, akkor expr1, ha null, akkor expr2 lesz az eredmény select nvl2(to_char(jutalom), 'IGEN', 'NEM') Jutalom from dolgozó; A to_char() karakterré konvertálja a numerikus jutalom értéket, így szöveges helyettesítő értékek adhatók meg 169/9

10 Példák szelekciós feltételekre Ember Név Cím Szül_Év Kis Géza Eger 1983 Autó Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 Ár SELECT * FROM Ember WHERE Szül_Év BETWEEN 1975 AND 1980; SELECT * FROM Ember WHERE Cím IS NULL; SELECT * FROM Ember WHERE Név LIKE 'B%'; SELECT * FROM Ember WHERE Név LIKE % Géza%'; SELECT Rendszám FROM Autó WHERE Szín IN ('piros', 'kék', 'fehér'); SELECT Rendszám,Típus FROM Autó WHERE Ár < AND Szín NOT LIKE '%lila%'; SELECT Rendszám FROM Autó WHERE Rendszám LIKE '_ER-6%'; SELECT Rendszám FROM Autó WHERE Rendszám LIKE '%0' OR Rendszám LIKE '%2' OR Rendszám LIKE '%4' OR Rendszám LIKE '%6' OR Rendszám LIKE '%8'; select Rendszám from Autó 169/10 where substr(rendszám, -1, 1) in ('0','2','4','6','8');

11 Szelekciós függvények Sorfüggvények, melyek minden egyes rekord adataira elvégzik a kért módosítást. ABS(n): abszolút é'rték Példa: ABS(-15) = 15 LOWER(char): konverzió kisbetűsre. Példa: LOWER('Kovács') = 'kovács' UPPER(char): konverzió nagybetűsre. Példa: UPPER('Kovács') = 'KOVÁCS' INITCAP(char): konverzió nagy kezdőbetűsre. Példa: INITCAP('kovács') = 'Kovács' LTRIM(char): balról szóközök eltávolítása. Példa: LTRIM(' alma ') = 'alma ' RTRIM(char): jobbról szóközök eltávolítása. 169/11 Példa: RTRIM(' alma ') = ' alma'

12 Szelekciós függvények 2. 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ú. Példa: SUBSTR('ABCDEFG',2,3) = 'BCD' TO_CHAR(n): konverzió numerikusról vagy dátumról karakteresre. Példa: TO_CHAR(123) = '123' TO_DATE(char): konverzió karakteresről dátumra. Példa: TO_DATE('15-JAN-06') TO_NUMBER(char): konverzió karakteresről numerikusra. Példa: TO_NUMBER('123') = 123 SQRT(kifejezés): Négyzetgyök, numerikus kifejezésre vonatkozik. Példa: SQRT(16) = 4 169/12

13 A függvények kipróbálása select kifejezés from tábla_lista [where ] select upper('kiskutya') from dual KISKUTYA select substr('kiskutya',3,2) from dual sk select to_date(' ', 'YYYY.MM.DD') from dual 12/31/2016 select sqrt(17) from dual select power(2, 4) from dual select power(2.6, 2.4) from dual 169/

14 Aggregáció a lekérdezésben Aggregáció: oszlopfüggvények, melyek egy oszlop adataiból egy konkrét statisztikai értéket számítanak ki. Csak mezőlistában, vagy a Having feltételben szerepelhetnek! Aggregációs függvények: SUM(x) - összeg x: numerikus mező vagy kifejezés értéke AVG(x) - átlagérték MAX(x) legnagyobb érték MIN(x) legkisebb érték COUNT(x) elemek száma Ha x=*: minden rekordot érint select avg(ár) from Autó; select count(*) from Autó; select count(kor) from Autó Where Kor > 10; select Sum(Ár), Avg(Kor) from Autó; 169/14

15 Csoportképzés a lekérdezésben select mezőlista from táblalista [where...] GROUP BY csoportosító_kifejezés; Az egyes csoportba azok a rekordok kerülnek, melyeknél a csoportosító kifejezés értéke azonos. Az eredménytáblában egy csoportból egy rekord jelenik meg Az összesítő függvények csoportonként hajtódnak végre. Általában a csoportosító kifejezés szerepel a mezőlistában. select Típus, avg(ár) from Autó GROUP BY Típus; select Típus, count(*) from Autó WHERE Szín='Piros' GROUP BY Típus order by Típus; select Szín, min(ár), max(ár) from Autó GROUP BY Szín; select substr(rendszám,1,1) KB, count(*) DB from autó GROUP BY substr(rendszám,1,1); 169/15 KB C H DB 5 2 B IT JMAN 4

16 Csoportok szűrése select mezőlista from táblalista [where...] GROUP BY oszloplista HAVING csoportokra_vonatkozó_feltétel; A HAVING a csoportképzés után a csoportokra vonatkozó, aggregációs függvényeket tartalmazó feltétel megadására használható, csak a GROUP BY kifejezéssel együtt! select Típus, avg(ár) from Autó GROUP BY Típus HAVING avg(ár) > ; select Típus, count(*) from Autó WHERE Szín='Piros' GROUP BY Típus HAVING count(*) > 3 order by Típus; 169/16

17 Rendezés a lekérdezésben A mezőlistában szereplő mezők szerint rendezhetjük a rekordokat növekvő (ASC) vagy csökkenő (DESC) sorrendben Mezőnevek helyett használható a mezők száma is, a számozás 1-ről indul! Több mező is megadható Alapértelmezés a növekvő rendezés, ezt nem kell megadni select mezőlista from... [where...] ORDER BY mezőnév [ASC DESC], mezőnév [ASC DESC],...; Autó Rendszám Típus Szín Kor GBC-765 Opel Fehér 6 Ár select * from autó ORDER BY Típus, Ár DESC; select * from autó ORDER BY 2, 5 desc; 169/17

18 A select utasítás általános alakja A parancs egyes elemeinek a sorrendje kötött A mezőlista és a from táblalista kötelező elem A mezőlistában és a táblalistában alias nevek használhatók A parancsból a [ ] zárójelben lévő részek kimaradhatnak A having csak a group by kifejezéssel együtt használható SELECT [distinct] mezőlista FROM táblalista [WHERE szelekciós_feltétel] [GROUP BY csoportosító_kifejezés] [HAVING csoportokra_vonatkozó_feltétel] [ORDER BY rendező_mezőlista]; 169/18

19 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály -es feladatsor 169/19 75 feladattal :-)

20 >< Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Készítsünk egy táblát, dolgozók nyilvántartására: CREATE TABLE Dolgozó( Kód Number(4) Primary key, Név Varchar(20) Not Null, Város Varchar(20), Beosztás Varchar(20), Belépés Date Default sysdate, Fizetés Number(7), Osztály Varchar(15) ); Elsődleges kulcs mező A mezőbe kötelező adatot írni Alapérték: az aktuális dátum 169/20

21 << Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a tábla szerkezetét. desc dolgozó Töltsük fel a megadott adatokkal. begin INSERT INTO Dolgozó VALUES (1169, 'Brumi Barna', null, 'Programozó', Default, 250, 'Fejlesztés');... end; Írassuk ki a tábla tartalmát. select * from dolgozó 169/21

22 << Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály 169/22

23 1 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Vigye fel mindenki saját magát, tetszőleges adatokkal! INSERT INTO Dolgozó VALUES (1180, 'BitMan', 'Miskolc', 'Programozó', Default, 900, 'Fejlesztés'); select * from dolgozó where név='bitman' 169/23

24 2 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Hibás Ilona miskolci elemző. Vigyük fel az új adatokat. UPDATE Dolgozó SET Város='Miskolc', Beosztás='Elemző' WHERE Név='Hibás Ilona'; select * from dolgozó where név='hibás Ilona'; 169/24

25 3 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Hibás Ilona a fejlesztésre került, 300 fizetéssel. Vigyük fel az új adatokat. UPDATE Dolgozó SET Osztály='Fejlesztés', Fizetés=300 WHERE Név='Hibás Ilona'; 169/25

26 4 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a miskolci emberek nevét. SELECT Név FROM Dolgozó WHERE Város='Miskolc'; 169/26

27 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a nem miskolci emberek nevét, városát. SELECT Név, Város FROM Dolgozó WHERE Város!= 'Miskolc'; További lehetőségek: Város <> 'Miskolc' Város ^= 'Miskolc' not Város = 'Miskolc' Város not in ('Miskolc') 169/27

28 6 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a fejlesztés osztályon dolgozók nevét, ABC sorrendben. SELECT Név FROM Dolgozó WHERE Osztály='Fejlesztés' ORDER BY Név; 169/28

29 7 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a neveket, fizetéseket, fizetés szerinti csökkenő sorrendben. SELECT Név, Fizetés FROM Dolgozó ORDER BY Fizetés DESC; 169/29

30 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki az M betűvel kezdődő neveket! M1 SELECT Név FROM Dolgozó WHERE Név LIKE 'M%'; P M2 SELECT Név FROM Dolgozó WHERE Név LIKE 'm%'; SELECT Név FROM Dolgozó WHERE UPPER(Név) LIKE 'M%'; Like Joker karakterek: _ : kötelezően egy darab karaktert jelent % : tetszőleges számú karakter jelent, lehet 0 db is! 169/30 upper(szöveg) A szöveget nagybetűssé alakítja

31 9 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki az A és a Z betűre végződő neveket! M1 M2 SELECT Név FROM Dolgozó WHERE Név LIKE '%a' OR Név LIKE '%z'; SELECT Név FROM Dolgozó WHERE SUBSTR(Név, -1, 1) IN ('a', 'z'); substr(string, kezdő_pozíció, hossz) Rész sztring képzés Ha a kezdő_pozíció negatív, a művelet jobbról indul. 169/31

32 10 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki azok kódját, nevét, akiknek a kódjában van 4-es számjegy. SELECT Kód FROM Dolgozó WHERE Kód LIKE '%4%'; 169/32

33 11 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki azok kódját, nevét, akiknek a kódjában van 1-es, 2-es, és 4-es számjegy is. M SELECT Kód, Név FROM Dolgozó WHERE Kód LIKE '%1%' AND Kód LIKE '%2%' AND Kód LIKE '%4%'; H SELECT Kód, Név FROM Dolgozó WHERE Kód LIKE '%1%2%4%'; Miért hibás? Így elő van írva a sorrend is! 169/33

34 12 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki azok kódját, nevét, akiknek a vezetékneve 4 betűs! SELECT Név FROM Dolgozó WHERE Név LIKE ' %'; 4 db _ jel, aztán szóköz, aztán % 169/34

35 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály M1 Írassuk ki azok nevét, kódját, akik kódja 1030 és 1130 közötti. Irányítható szélsőérték kezelés SELECT Kód, Név FROM Dolgozó WHERE Kód >= 1030 AND Kód <= 1130; M2 SELECT Kód, Név FROM Dolgozó WHERE Kód BETWEEN 1030 AND 1130; Fix szélsőérték kezelés 169/35

36 14 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Kinek nincs megadva a városa? SELECT Név FROM Dolgozó WHERE Város is null; 169/36

37 15 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a rendszerdátumot. SELECT sysdate FROM dual; sysdate dual tábla Az adatbázisban érvényes dátumot és időpontot adja vissza Létező tábla, egy Dummy nevű oszlopa van, és egy sora, benne egy x adattal. Beépített függvények meghívásakor használható. Tartalma módosítható, de ne nyúljunk hozzá! Próbáld ki: select * from dual 169/37

38 16 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki azok nevét, belépési dátumát, akik 2013-ban léptek be. M1 M2 SELECT Név, Belépés FROM Dolgozó WHERE Belépés LIKE '%2013'; SELECT Név, Belépés FROM Dolgozó WHERE extract(year FROM Belépés) = 2013; extract(érték from dátum) A dátumból kibontja a definiált értéket. Érték lehet: year, month, day, hour, minute, second 169/38

39 17 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki azok nevét, belépési dátumát, akik márciusban léptek be. M1 M2 SELECT Név, Belépés FROM Dolgozó WHERE Belépés LIKE '03%'; SELECT Név, Belépés FROM Dolgozó WHERE extract(month FROM Belépés) = 3; 169/39

40 18 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a és között belépett dolgozók nevét, belépési dátumát. SELECT Név, Belépés FROM Dolgozó WHERE Belépés BETWEEN ' ' AND ' '; 169/40

41 19 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Ki, hány éve dolgozik a cégnél? SELECT Név, floor((sysdate-belépés)/365) "Eltelt évek" FROM Dolgozó; floor(szám) A szám egész része Ha több szóból áll az alias, kell a " " 169/41

42 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Milyen osztályok vannak? P SELECT Osztály FROM Dolgozó; M1 M2 SELECT DISTINCT Osztály FROM Dolgozó; SELECT Osztály FROM Dolgozó GROUP BY Osztály; 169/42

43 21 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a fejlesztésen dolgozó miskolciak nevét. SELECT Név FROM Dolgozó WHERE Osztály='Fejlesztés' AND Város='Miskolc'; 169/43

44 22 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a fejlesztésen és a terjesztésen dolgozó nem miskolciak nevét. M1 M2 SELECT Név FROM Dolgozó WHERE (Osztály='Fejlesztés' OR Osztály='Terjesztés') AND Város!= 'Miskolc'; SELECT Név FROM Dolgozó WHERE Osztály IN ('Fejlesztés', 'Terjesztés') AND Város!= 'Miskolc'; 169/44

45 23 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki azon osztályok nevét, ahol dolgozik budapesti! SELECT DISTINCT Osztály FROM Dolgozó WHERE Város='Budapest'; 169/45

46 24 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Hány rekord van a táblában? SELECT Count(*) FROM Dolgozó; 169/46

47 25 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki az átlagfizetést. SELECT avg(fizetés) FROM Dolgozó; 169/47

48 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki az átlagfizetéstől többet keresők nevét, fizetését. M SELECT Név, Fizetés FROM Dolgozó WHERE Fizetés > (SELECT AVG(Fizetés) FROM Dolgozó); H SELECT Név, Fizetés FROM Dolgozó WHERE Fizetés > AVG(Fizetés); 169/48

49 AL-SELECT Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Az SQL támogatja azt a lehetőséget, hogy a szelekciós feltételben nemcsak létező, letárolt adatelemekre hivatkozzunk, hanem számított kifejezéseket is alkalmazhassunk. A számítást egy másik SELECT utasítással tudjuk megadni. Tehát az egyik lekérdezés szelekciós feltételében hivatkozunk egy másik lekérdezés eredményére. Az al-lekérdezést mindig zárójelben kell megadni, hogy elemei elkülönüljenek. Formailag megegyezik a normál SELECT utasítással (kivétel: al-select-ben nem lehet rendezni!) 169/49

50 27 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki az osztályonkénti létszámot, és átlagfizetést. SELECT Osztály, count(*) Létszám, avg(fizetés) Átlagfizetés FROM Dolgozó GROUP BY Osztály; 169/50

51 28a Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Melyik programozónak a legmagasabb a fizetése? L1 L2 SELECT MAX(Fizetés) FROM Dolgozó WHERE Beosztás = 'Programozó' SELECT Név, Fizetés FROM Dolgozó WHERE Beosztás = 'Programozó' AND Fizetés = (SELECT MAX(Fizetés) FROM Dolgozó WHERE Beosztás = 'Programozó'); L1: A legnagyobb programozói fizetés L2: Azon programozók, akiknek egyezik L1-el a fiztése 169/51

52 28b Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Melyik programozónak a legalacsonyabb a fizetése? L1 L2 SELECT MIN(Fizetés) FROM Dolgozó WHERE Beosztás = 'Programozó' SELECT Név, Fizetés FROM Dolgozó WHERE Beosztás = 'Programozó' AND Fizetés = (SELECT MIN(Fizetés) FROM Dolgozó WHERE Beosztás = 'Programozó'); 169/52

53 29 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki az átlagos programozói fizetéstől többet kereső programozók nevét, fizetését. L1 L2 SELECT AVG(Fizetés) FROM Dolgozó WHERE Beosztás = 'Programozó' SELECT Név, Fizetés FROM Dolgozó WHERE Beosztás = 'Programozó' AND Fizetés > (SELECT AVG(Fizetés) FROM Dolgozó WHERE Beosztás = 'Programozó'); 169/53

54 30 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Melyik tesztelő keres többet, mint a legtöbbet kereső eladó? L1 L2 SELECT MAX(Fizetés) FROM Dolgozó WHERE Beosztás = 'Eladó' SELECT Név, Fizetés FROM Dolgozó WHERE Beosztás = 'Tesztelő' AND Fizetés > (SELECT MAX(Fizetés) FROM Dolgozó WHERE Beosztás = 'Eladó'); 169/54

55 31 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Hányan dolgoznak az egyes osztályokon? SELECT Osztály, count(*) FROM Dolgozó GROUP BY Osztály; 169/55

56 32 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Az egyes városokban hány programozó van? SELECT Város, COUNT(*) "Programozók száma" FROM Dolgozó WHERE Beosztás='Programozó' GROUP BY Város Ha több szóból áll az alias, kell a " " 169/56

57 33 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály L1 L2 L3 Írassuk ki azok nevét, akik abban a városban laknak, ahol a legtöbben laknak. 169/57 SELECT MAX(COUNT(Város)) FROM dolgozó GROUP BY Város SELECT Város FROM dolgozó GROUP BY Város HAVING COUNT(Város)=(SELECT MAX(COUNT(Város)) FROM dolgozó GROUP BY Város) A legnagyobb lakószám A legnagyobb lakószámú város neve SELECT Név FROM dolgozó A városban lakók neve WHERE Város = (SELECT Város FROM dolgozó GROUP BY Város HAVING COUNT(Város)=(SELECT MAX(COUNT(Város)) FROM dolgozó GROUP BY Város));

58 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Mennyit keresnek összesen a tervezők és az elemzők? SELECT SUM(Fizetés) FROM Dolgozó WHERE Beosztás IN ('Tervező', 'Elemző'); 169/58

59 35 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Mely osztályok azok, ahol összesen legalább 1000 BitCoint keresnek? SELECT Osztály FROM Dolgozó GROUP BY Osztály HAVING sum(fizetés) >= 1000; 169/59

60 36 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Mely osztályokon dolgoznak legalább hárman? SELECT Osztály, COUNT(*) FROM Dolgozó GROUP BY Osztály HAVING COUNT(*) >= 3; 169/60

61 36b Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Mely osztályokon dolgozik legalább három programozó? SELECT Osztály, COUNT(*) FROM Dolgozó WHERE beosztás='programozó' GROUP BY Osztály HAVING COUNT(*) >= 3; 169/61

62 37 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a miskolci eladók és az egri tesztelők nevét. M1 M2 SELECT Név FROM Dolgozó WHERE (Város='Miskolc' AND Beosztás='Eladó') OR (Város='Eger' AND Beosztás='Tesztelő'); SELECT Név FROM Dolgozó WHERE Város='Miskolc' AND Beosztás='Eladó' UNION SELECT Név FROM Dolgozó WHERE Város='Eger' AND Beosztás='Tesztelő'; 169/62

63 38 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki a miskolci nem programozók nevét. M1 M2 SELECT Név FROM Dolgozó WHERE Város='Miskolc' AND Beosztás!='Programozó'; SELECT Név FROM Dolgozó WHERE Város='Miskolc' MINUS SELECT Név FROM Dolgozó WHERE Beosztás='Programozó'; 169/63

64 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki azon osztályok nevét, ahol minden ember fizetése kevesebb 320 BitCoin-nál! L1 L2 L3 SELECT osztály, count(*) FROM Dolgozó GROUP BY Osztály SELECT osztály, COUNT(*) FROM Dolgozó WHERE Fizetés<320 GROUP BY Osztály SELECT Osztály FROM Dolgozó D1 GROUP BY Osztály HAVING COUNT(*)=(SELECT COUNT(*) FROM Dolgozó D2 WHERE D2.Fizetés<320 AND D1.Osztály=D2.Osztály GROUP BY D2.Osztály); L1: Osztályonkénti létszám L2: 320-nál kevesebbet keresők osztályonkénti létszáma L3: Azon osztályok neve, ahol L1=L2 169/64

65 40 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Hány darab különböző város van? SELECT count(distinct Város) FROM Dolgozó; 169/65

66 41 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Az egyes beosztásokban dolgozók hány darab különböző városban laknak? SELECT Beosztás, count(distinct Város) FROM Dolgozó GROUP BY Beosztás; 169/66

67 42 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki azon beosztások nevét, melyeknek minden városban van képviselője! L1 L2 L3 SELECT count(distinct Város) FROM Dolgozó SELECT Beosztás, count(distinct Város) FROM Dolgozó GROUP BY Beosztás SELECT Beosztás FROM Dolgozó GROUP BY Beosztás HAVING count(distinct Város) = (SELECT count(distinct Város) FROM Dolgozó); L1: Különböző városok száma L2: Az egyes beosztásokban hány különböző városból vannak L3: Azon beosztások neve, ahol L1=L2 169/67

68 43 Dolgozó D2 Kód Név Város Beosztás Belépés Fizetés Osztály Készítsünk egy új táblát (legyen a neve D2), melybe a miskolci dolgozók adatai kerülnek. CREATE TABLE D2 AS (SELECT * FROM Dolgozó WHERE Város='Miskolc'); 169/68

69 Dolgozó D2 Kód Név Város Beosztás Belépés Fizetés Osztály Töröljük ki a D2 táblából azokat, akik nem a fejlesztésen dolgoznak. DELETE FROM D2 Where Osztály!='Fejlesztés' 169/69

70 45 Dolgozó D2 Kód Név Város Beosztás Belépés Fizetés Osztály Töröljük ki az összes rekordot a D2 táblából. M1 DELETE From D2; M2 TRUNCATE TABLE D2; 169/70

71 Dolgozó D2 Kód Név Város Beosztás Belépés Fizetés Osztály Töröljük a D2 táblát. DROP TABLE D2; 169/71

72 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály :) 169/72

73 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Hogyan lehetne megoldani, hogy a dolgozó táblában lévő redundanciát (az osztálynevek többszörös tárolását) megszüntessük? 1. Kellene készíteni egy új osztály táblát, benne egy kóddal és az osztályok nevével. 2. Ki kellene cserélni az osztályneveket osztálykódra a dolgozó táblában. 3. Össze kellene kapcsolni a két táblát. 169/73

74 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Írassuk ki az osztályok nevét ABC sorrendben select distinct osztály from dolgozó order by osztály; 169/74

75 48 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Készítsünk egy új osztály táblát a dolgozó tábla alapján, másoljuk bele az osztályok nevét is. create table osztály as select distinct osztály from dolgozó order by osztály Osztály Osztály Ellenőrizzük le: select * from osztály 169/75

76 49 Dolgozó Osztály Kód Név Város Beosztás Belépés Fizetés Okód Osztály Osztály Adjunk egy új, okód nevű mezőt az osztály táblához, ez lesz az elsődleges kulcs. P alter table osztály add okód number(2) primary key H M alter table osztály add okód number(2) 169/76

77 Dolgozó Osztály Kód Név Város Beosztás Belépés Fizetés Okód Osztály Osztály Töltsük fel értékekkel az okód mezőt update osztály set okód=1 where osztály like 'F%' update osztály set okód=2 where osztály like 'I%' update osztály set okód=3 where osztály like 'T%' 169/77

78 51 Dolgozó Osztály Kód Név Város Beosztás Belépés Fizetés Okód Osztály Osztály Készítsünk kulcsmezőt az okód mezőből alter table osztály modify okód primary key Nézzük meg, minden rendben van-e? desc osztály 169/78

79 Dolgozó Osztály Kód Név Város Beosztás Belépés Fizetés Okód Osztály Onév Hogy ne legyen ugyanaz a tábla és az egyik mező neve, javítsuk ki az osztály mezőnevet onév-re alter table osztály rename column osztály to onév Ellenőrizzük le: select * from osztály 169/79

80 53 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály A dolgozó táblában cseréljük le az osztályneveket okód-ra. Hogy ne veszítsünk adatot, több lépésben fogjuk ezt megcsinálni! Először szúrjunk be egy okód nevű mezőt. alter table dolgozó add okód number(2) 169/80

81 54 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Az okód mezőt töltsük fel adatokkal. 1. lehetőség: az osztálynevek alapján több lépésben kijavítjuk az okód értékét: update dolgozó set okód=1 where osztály='fejlesztés' update dolgozó set okód=2 where osztály='irányítás' update dolgozó set okód=3 where osztály='terjesztés' 169/81

82 55 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Az okód mezőt töltsük fel adatokkal. Osztály Okód Onév 2. lehetőség: kapcsoljuk össze a dolgozót táblát az osztály táblával, és abból töltsük fel az adatokat: update dolgozó set okód= (select okód from osztály where osztály=onév) Ellenőrizzük le: select * from dolgozó 169/82

83 56 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Okód Töröljük ki az osztály mezőt a dolgozó táblából alter table dolgozó drop column osztály 169/83

84 Dolgozó Dolgozó Osztály Kód Név Város Beosztás Kód Név Belépés Város Beosztás Fizetés Okód Belépés Fizetés Okód Osztály Onév A dolgozó táblában az okód mezőbe most még bármit beírhatunk, nincsenek szabályok. Ha idegen kulcsot készítünk belőle, ami az osztály tábla okód mezőjére mutat, akkor már csak olyan adat kerülhet bele, ami megtalálható az osztály tábla okód mezőjében! Ez megvédi a mezőt, és tartalma konzisztens marad! alter table dolgozó add constraint d_fk foreign key (okód) references osztály(okód); 169/84

85 Dolgozó Dolgozó Osztály Kód Név Város Beosztás Kód Név Belépés Város Beosztás Fizetés Okód Belépés Fizetés Okód Osztály Onév Írassuk ki a Terjesztésen dolgozók nevét select név from dolgozó join osztály using(okód) where onév='terjesztés' 169/85

86 Equi join Egyenlőség alapú illesztés SELECT mezőlista FROM tábla1 INNER JOIN tábla2 USING (mező) WHERE szelekciós feltétel; A táblákban meg kell egyezniük a kapcsolattartó mezők nevének! Irányítható a kapcsolat a megfelelő mezőnevek megadásával! Rendszám Típus Szín Kor Tulaj Tulaj Név Kor Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Kis Géza Jó Éva Kék Béla Bő Jenő select rendszám,név from autó inner join ember using (tulaj); 169/86 Rendszám GBC-765 JED-123 AKT-392 Név Kis Géza Jó Éva Kék Béla

87 Dolgozó Dolgozó Osztály Kód Név Város Beosztás Kód Név Belépés Város Beosztás Fizetés Okód Belépés Fizetés Okód Osztály Onév Mennyi a Fejlesztésen dolgozók átlagkeresete? select avg(fizetés) from dolgozó join osztály using(okód) where onév='fejlesztés' 169/87

88 Dolgozó Dolgozó Osztály Kód Név Város Beosztás Kód Név Belépés Város Beosztás Fizetés Okód Belépés Fizetés Okód Osztály Onév Hányan dolgoznak az egyes osztályokon? select onév, count(*) from dolgozó join osztály using(okód) group by onév 169/88

89 61 Dolgozó Dolgozó Osztály Kód Név Város Beosztás Kód Név Belépés Város Beosztás Fizetés Okód Belépés Fizetés Okód Osztály Onév Hány különböző munkakörben dolgoznak az egyes osztályokon? select count(distinct(beosztás)) "Munkakörök száma", onév from dolgozó join osztály using(okód) group by onév 169/89

90 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály :) 169/90

91 62 Dolgozó Projekt Kód Név Város Beosztás Pkód Belépés Pnév Indult Fizetés Lezárult Osztály Készítsünk egy táblát, amelyben céges projektek adatait tároljuk. create table projekt( pkód number(3) primary key, pnév varchar2(30) not null, indult date default sysdate, lezárult date ) 169/91

92 63 Dolgozó Projekt Kód Név Város Beosztás Pkód Belépés Pnév Indult Fizetés Lezárult Osztály Vigyünk fel néhány projektet insert into projekt values(1, 'Háttal a falnak', ' ', ' ') insert into projekt values(2, 'Kék fűzfa', ' ', ' ') insert into projekt values(3, 'Számító gépek', ' ', null) 169/92

93 64 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Egy projekten többen is dolgozhatnak, és egy dolgozó több projektben is dolgozhat. Hogyan lehet ezt megoldani? Egy kapcsolótábla létrehozásával: create table d_p( dkód number(4), pkód number(3), foreign key (dkód) references dolgozó(kód), foreign key (pkód) references projekt(pkód) ) 169/93

94 65 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Vigyünk fel néhány dolgozót a projektekhez: begin insert into d_p values (1016, 1); insert into d_p values (1026, 1); insert into d_p values (1028, 1); insert into d_p values (1039, 1); insert into d_p values (1214, 1); insert into d_p values (1125, 1); insert into d_p values (1142, 2); insert into d_p values (1118, 2); insert into d_p values (1028, 2); insert into d_p values (1016, 2); insert into d_p values (1016, 3); insert into d_p values (1026, 3); insert into d_p values (1151, 3); 169/94 end;

95 66 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Írassuk ki a 2018-ban futó projektek nevét! select pnév from projekt where indult like '%2018' or lezárult like '%2018' select pnév from projekt where extract(year FROM indult)=2018 or extract(year FROM lezárult)= /95

96 67 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Kik (név) dolgoznak a Számító gépek projekten? select név from dolgozó join d_p on kód=dkód join projekt using(pkód) where pnév='számító gépek' Ha nem egyforma a két összekapcsolt táblában a kapcsolómező neve, akkor a kapcsolatban az on kulcsszót kell használni. Ha egyforma a két mező neve, egyszerűbb a using kulcsszó használata. Ha mégis az on-t használjuk, akkor d_p join projekt on d_p.pkód=projekt.pkód 169/96

97 68 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Ki, hány projekten dolgozott? select név, count(dkód) "Projektek száma" from dolgozó join d_p on kód=dkód group by név 169/97

98 69 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Ki, hány projekten dolgozott? Írassuk ki a 0-s adatokat is! select név, count(dkód) "Projektek száma" from dolgozó left outer join d_p on kód=dkód group by név 169/98

99 Outer join (külső illesztés) SELECT FROM tábla1 [LEFT RIGHT FULL] OUTER JOIN tábla2 ON join_feltétel [WHERE szelekciós feltétel] ; Autó Ember Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Bő Jenő Ózd Minden ózdi ember, és autójuk rendszáma: select Név, Rendszám from Autó RIGHT OUTER JOIN Ember ON Tulaj=Ekód where Cím='Ózd'; 169/99 Név Kék Béla Bő Jenő Rendszám AKT-392 RIGHT: A jobb oldali táblából jönnek a pár nélküli rekordok is, üres értékkel kiegészítve.

100 70 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Mely városok lakói dolgoztak a Háttal a falnak projekten? select distinct város from dolgozó join d_p on kód=dkód join projekt using(pkód) where pnév='háttal a falnak' 169/100

101 71 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Osztály Dkód Pkód Okód Onév A terjesztés osztály dolgozói mely projekteken dolgoztak? select distinct pnév from osztály join dolgozó using(okód) join d_p on kód=dkód join projekt using(pkód) where onév='terjesztés' Fontos a join-ok sorrendje! Osztály Dolgozó d_p Projekt 169/101

102 72 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Mely projekteken dolgoztak legalább 5-en? 1 2 select pkód, count(*) from d_p group by pkód select pkód, count(*) from d_p group by pkód having count(*)>5 3 select pnév from projekt where pkód in (select pkód from d_p group by pkód having count(*)>5) 169/102

103 73 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód A 2017-ben indult projektekben volt-e miskolci résztvevő? Igen, vagy nem! select (case when count(*)=0 then 'Nem' else 'Igen' end) as Résztvevő from dolgozó join d_p on kód=dkód join projekt using(pkód) where indult like '%2017' and város='miskolc' 169/103

104 74 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Az egyes projekteben hány programozó dolgozott? select pnév, count(*) "Programozók száma" from dolgozó join d_p on kód=dkód join projekt using(pkód) where beosztás='programozó' group by pnév 169/104

105 75 Dolgozó Projekt Kód Név Város Beosztás Dolgozó Belépés Fizetés Okód Pkód Pnév Indult Lezárult Kód Név Város Beosztás Belépés Fizetés Osztály d_p Dkód Pkód Mely projekteken nem dolgoztak eladók? 1 select pnév from dolgozó join d_p on kód=dkód join projekt using(pkód) where beosztás='eladó' 2 select distinct pnév from projekt minus select pnév from dolgozó join d_p on kód=dkód join projekt using(pkód) where beosztás='eladó' 169/105

106 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály 169/106

107 Join (szorzat, illesztés) Ha az eredménytábla két (vagy több) táblából akarjuk az adatokat megjeleníteni, akkor a táblák összekapcsolására a JOIN parancsot kell használni. SQL-ben a következő típusokat alkalmazhatjuk: Cross join (Descartes szorzat, teljes illesztés) Theta join Feltételes illesztés Equi join Egyenlőségen alapuló illesztés Natural join Természetes illesztés Outer join Külső illesztés, Self join (tábla összekapcsolása önmagával), Félig összekapcsolások (Semi join, Anti semi join). 169/107

108 Cross join (Descartes szorzat, teljes illesztés) A legegyszerűbb összekapcsolás a keresztszorzat (szorzat) Ebben az összekapcsolásban nem adunk meg feltételt az összekapcsolás módjára, ezért az egyik tábla minden rekordja párosításra kerül a másik tábla minden rekordjával. Kétféle módon is megadható: A from után a táblák felsorolásával (vesszővel elválasztva), A cross join kulcsszóval. Nagy rekordszámok esetén hatalmas eredménytábla keletkezik, ezért használatát lehetőleg kerülni kell! Jele a relációs algebrában: r 1 x r 2 SELECT mezőlista FROM tábla_1, tábla_2; SELECT mezőlista FROM tábla_1 CROSS JOIN tábla_2; 169/108

109 Cross join m1 cross join m2 A B C = m1 m2 A A A B B B C C C 169/109

110 Cross join (Descartes szorzat, teljes illesztés) Autó Rendszám Típus Szín Ár Tulaj Ember Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst Kis Géza Eger 178 Jó Éva Miskolc select Név, Típus, Ár from Autó, Ember; select Név, Típus, Ár from Autó cross join Ember; Név Kis Géza Típus Opel Ár Jó Éva Opel Kis Géza Nissan Jó Éva Nissan /110

111 Feltételes illesztés A keresztszorzat összekapcsolás kiegészíthető a WHERE záradékkal, melyben megadhatjuk az összekapcsolásra vonatkozó, és a rekordok adataira vonatkozó feltételt is. Tetszőleges feltétel megfogalmazható Ha az összekapcsolási feltétel alapja a két táblában lévő adatok egyenlősége, akkor az illesztést Equi joinnak nevezzük. Ha az összekapcsolási feltétel nem az adatok egyenlőségén alapszik, akkor az illesztést Theta joinnak nevezzük. Jele a relációs algebrában: r 1 felt r 2 SELECT mezőlista FROM tábla1, tábla2 WHERE feltétel; 169/111

112 Theta join m1 m join = m1 m where m1<m2 Equi join m1 m join = m1 m where m1=m2 169/112

113 Theta join Feltételes illesztés Autó Rendszám Típus Szín GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Fehér Ár Ember Ekód Név Összeg 114 Kis Géza Jó Éva Telefon A fehér autókat kik tudják megvásárolni? select rendszám, ár, név, összeg from Autó, Ember where összeg > ár and szín='fehér'; select rendszám, ár, név, összeg from Autó cross join Ember where összeg > ár and szín='fehér'; Join feltétel 169/113 Szelekciós feltétel Rendszám GBC-765 Ár Név Kis Géza Összeg AKT Kis Géza AKT Jó Éva

114 Equi join Egyenlőség alapú illesztés Jele a relációs algebrában: r 1 =felt r 2 Kinek van pontosan annyi pénze, amennyibe egy autó kerül? Autó Rendszám Típus Szín GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Fehér Ár Ember Ekód Név Összeg 114 Kis Géza Jó Éva Telefon select rendszám, ár, név, összeg from Autó cross join Ember where összeg = ár; Join feltétel Rendszám GBC-765 Ár Név Kis Géza Összeg /114

115 Equi join típusok A legkényelmesebb megoldás, ha a két táblában van egy-egy ugyanolyan nevű (és típusú) oszlop, ez esetben használhatjuk a Natural join-t, mely automatikusan összekapcsolja az azonos nevű oszlopokat: Ha több oszlop neve is megegyezik a táblákban, olyan belső összekapcsolást alkalmazhatunk, ahol egy kulcsszóval megadható a join feltétele: Ha különbözőek az összekapcsolandó mezők nevei, használjuk az on kulcsszót: 169/115 SELECT mezőlista FROM tábla1 NATURAL JOIN tábla2 WHERE szelekciós feltétel; SELECT mezőlista FROM tábla1 INNER JOIN tábla2 USING (mező) WHERE szelekciós feltétel; SELECT mezőlista FROM tábla1 INNER JOIN tábla2 ON join_feltétel WHERE szelekciós feltétel;

116 Natural join m1 m2 A B C join = 1 2 m1 m2 A C 169/116

117 Natural join Természetes illesztés Jele a relációs algebrában: r 1 r 2 vagy r 1 * r 2 SELECT mezőlista FROM tábla1 NATURAL JOIN tábla2 WHERE szelekciós feltétel; A táblákban meg kell egyezniük a kapcsolattartó mezők nevének! Irányíthatatlan a kapcsolat, minden azonos nevű mező kapcsolódik! Rendszám Típus Szín Kor Tulaj Tulaj Név Kor Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Kis Géza Jó Éva Kék Béla Bő Jenő select rendszám, név from autó natural join ember; 169/117 Rendszám GBC-765 Név Kis Géza

118 Equi join m1 join using m2 A B C = 1 2 m1 m2 A C m1 join on m2 A B C = 1 2 m1 m2 A C 169/118

119 Equi join Egyenlőség alapú illesztés SELECT mezőlista FROM tábla1 INNER JOIN tábla2 USING (mező) WHERE szelekciós feltétel; A táblákban meg kell egyezniük a kapcsolattartó mezők nevének! Irányítható a kapcsolat a megfelelő mezőnevek megadásával! Rendszám Típus Szín Kor Tulaj Tulaj Név Kor Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Kis Géza Jó Éva Kék Béla Bő Jenő select rendszám,név from autó inner join ember using (tulaj); 169/119 Rendszám GBC-765 JED-123 AKT-392 Név Kis Géza Jó Éva Kék Béla

120 A USING kulcsszó használata select * from autó inner join ember using (tulaj); Autó Rendszám Típus Szín Kor Tulaj Ember Tulaj Név Kor Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Kis Géza Jó Éva Kék Béla Bő Jenő Tulaj Rendszám GBC-765 JED-123 AKT-392 Típus Opel Nissan Trabant Szín Fehér Ezüst Kék Kor Név Kis Géza Jó Éva Kék Béla Kor Telefon A using kulcsszó használatakor, ha *-al minden mezőt kiíratunk, akkor a közös kapcsolómező az eredménytábla első oszlopaként jelenik meg! 169/120

121 Equi join Egyenlőség alapú illesztés SELECT mezőlista FROM tábla1 INNER JOIN tábla2 ON t1.mező1=t2.mező2 WHERE szelekciós feltétel; Különválik az összekapcsolási- és a szelekciós feltétel Az on után tetszőleges összekapcsolási feltétel megadható, nemcsak egyenlőség! Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Bő Jenő Ózd select rendszám,név from autó inner join ember on tulaj=ekód where ár > ; 169/121 Rendszám GBC-765 JED-123 Név Kis Géza Jó Éva

122 Az ON kulcsszó használata select * from autó inner join ember on autó.tulaj=ember.tulaj Autó Rendszám Típus Szín Kor Tulaj Ember Tulaj Név Kor Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Kis Géza Jó Éva Kék Béla Bő Jenő Rendszám GBC-765 JED-123 AKT-392 Típus Opel Nissan Trabant Szín Fehér Ezüst Kék Kor Tulaj Tulaj Név Kis Géza Jó Éva Kék Béla Kor Telefon Az on kulcsszó használatakor, ha a *-al minden mezőt kiíratunk, az azonos nevű kapcsolómező többször is megjelenik a listában. 169/122

123 Belső és külső összekapcsolás Belső összekapcsolásnak (Inner join) nevezzük azokat az illesztéseket, amelyek a két tábla megegyező soraival térnek vissza. Ha valamelyik táblából a pár nélküli rekordokat is hozzávesszük az eredményhez (üres mezőkkel kiegészítve), akkor külső összekapcsolást (Outer join) kapunk. A külső összekapcsolás lehet: bal oldali (Left outer join), jobb oldali (Right outer join), vagy teljes (Full outer join). 169/123

124 169/124 Outer join m1 m A C null A B C m1 m2 left join = m1 m2 1 null 2 A B C A B C m1 m2 right join = m1 m2 1 A A B C m1 m2 full join = 2 3 C null null B

125 Outer join (külső illesztés) SELECT FROM tábla1 [LEFT RIGHT FULL] OUTER JOIN tábla2 ON join_feltétel [WHERE szelekciós feltétel] ; Autó Ember Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Bő Jenő Ózd Minden ózdi ember, és autójuk rendszáma: select Név, Rendszám from Autó RIGHT OUTER JOIN Ember ON Tulaj=Ekód where Cím='Ózd'; 169/125 Név Kék Béla Bő Jenő Rendszám AKT-392 RIGHT: A jobb oldali táblából jönnek a pár nélküli rekordok is, üres értékkel kiegészítve.

126 Outer join (külső illesztés) SELECT FROM t1, t2 WHERE t1.m1 (+)= t2.m2 A (+)-al azt a mezőt jelöljük meg, ahonnan a null kiegészítést kérjük! Autó Rendszám Típus Szín Ár Tulaj Ember Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Bő Jenő Ózd Minden ózdi ember, és autójuk rendszáma: select Név, Rendszám from Autó, Ember where tulaj (+)= ekód and Cím='Ózd'; select Név, Rendszám from Autó join Ember ON tulaj (+)= ekód where Cím='Ózd'; 169/126 Név Kék Béla Bő Jenő Rendszám AKT-392

127 Outer join (külső illesztés) Példa Autó Ember Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék LOG-416 Volvo Piros Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Bő Jenő Ózd Hány darab autója van az egyes embereknek? select Név, count(tulaj) As Darab from Autó RIGHT OUTER JOIN Ember ON Tulaj=Ekód Group By Név; Név Kis Géza Jó Éva Kék Béla Bő Jenő Darab /127

128 Self join Olyan speciális összekapcsolás, ahol egy táblát kapcsolunk össze önmagával azért, hogy a tábla egyik oszlopában lévő értékeket hasonlítsuk össze a szintén ugyanebben az oszlopban lévő többi értékkel. A táblát két különböző alias név használatával tudjuk önmagával összekapcsolni. A két különböző alias név miatt a rendszer a táblát két egymástól független táblaként kezeli, megszüntetve ezzel az adatok egyezőségéből adódó mindennemű kapcsolatot, ezért összekapcsoláskor a mezők értékegyezőségére vonatkozó kapcsolatukat is be kell állítani! Az összekapcsolás megvalósítható keresztszorzat (cross join) vagy on kulcsszóval felépített equi join alkalmazásával 169/128

129 Self join m1 A B A a1 m self join m1 A B A a2 m = m1 A m2 3 where a1.m1=a2.m1 and a1.m2>a2.m2 169/129

130 Self join önillesztés :-) select t1.m1, from tábla t1, tábla t2 [where szelekciós feltétel] ; select t1.m1, from tábla t1 join tábla t2 on t1.m=t2.m [where szelekciós feltétel] ; Autó Rendszám Típus Kor GBC-765 Opel 5 JED-123 Nissan 8 HGZ-392 Nissan 7 Ár Tulaj LOG-416 Opel Azon autók rendszáma, melyek idősebbek, mégis drágábbak saját típustársuknál: select a1.rendszám from autó a1, autó a2 where a1.típus=a2.típus and a1.kor>a2.kor and a1.ár>a2.ár); 169/130 Rendszám JED-123 LOG-416

131 Félig összekapcsolások A belső és a külső illesztések valódi összekapcsolások, amelyeknél általában minden táblából lesznek adatok a lekérdezésben. Ha a lekérdezés adatai csak az egyik táblából származnak, a másik tábla pedig csak azért szükséges, hogy meg tudjuk fogalmazni a lekérdezés feltételét, akkor olyan látszólagos összekapcsolásról beszélünk, melyet félig összekapcsolásnak nevezünk. Ha a feltétel az, hogy az egyik táblában lévő adatnak létezik párja a másik táblában, akkor az összekapcsolást Semijoin-nak nevezzük. Ha a feltétel az, hogy az egyik táblában lévő adatnak nem létezik párja a másik táblában, akkor az összekapcsolást Anti semi join-nak nevezzük. 169/131

132 Semi join m1 semi join m2 A B C = 1 2 m1 169/132

133 Semijoin select from tábla1 where EXIST (select 1 from tábla2 where tábla1.m1=tábla2.m2) Az EXIST kulcsszó azt vizsgálja, hogy a keletkezett reláció nem üres. Autó Ember Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst LOG-416 Volvo Piros Kis Géza Eger 178 Jó Éva Miskolc Bő Jenő Ózd Azok neve, akiknek van autója: select Név from Ember WHERE EXISTS (select 1 from Autó where Tulaj=EKód); 169/133 Név Kis Géza Jó Éva

134 Anti semi join m1 anti semi join m2 A B C = 3 m1 169/134

135 Anti semi join select from tábla1 where NOT EXIST (select 1 from tábla2 where tábla1.m1=tábla2.m2) A NOT EXIST kulcsszó azt vizsgálja, hogy a keletkezett reláció üres. Autó Ember Rendszám Típus Szín Ár Tulaj Ekód Név Cím Telefon GBC-765 Opel Fehér JED-123 Nissan Ezüst LOG-416 Volvo Piros Kis Géza Eger 178 Jó Éva Miskolc Bő Jenő Ózd Azok neve, akiknek nincs autója: select Név from Ember WHERE NOT EXISTS (select 1 from Autó where Tulaj=EKód); 169/135 Név Bő Jenő

136 169/136

137 Halmazműveletek Unió: Metszet: Különbség: SELECT UNION [ALL] SELECT ; SELECT INTERSECT SELECT ; SELECT MINUS SELECT ; Csak azonos szerkezetű táblák esetén alkalmazhatók! Futók Ekód Név Város Síelők Ekód Név Város F S 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Miskolc 114 Kis Géza Eger 113 Kő Zoli Eger 102 Kék Béla Miskolc Az összes sportoló neve: select Név from Futók UNION select Név from Síelők 169/137 Név Kis Géza Jó Éva Kék Béla Kő Zoli F S

138 Halmazműveletek Futók Ekód Név Város Síelők Ekód Név Város F S 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Miskolc 114 Kis Géza Eger 113 Kő Zoli Eger 102 Kék Béla Miskolc Azok neve, akiknek mindkét sportot űzik: select Név from Futók INTERSECT select Név from Síelők Név Kis Géza Kék Béla F S Azok a futók, akik nem síelnek: select Név from Futók MINUS select Név from Síelők 169/138 Név Jó Éva A \ B

139 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály 169/139

140 AL-SELECT Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály Az SQL támogatja azt a lehetőséget, hogy a szelekciós feltételben nemcsak létező, letárolt adatelemekre hivatkozzunk, hanem számított kifejezéseket is alkalmazhassunk. A számítást egy másik SELECT utasítással tudjuk megadni. Tehát az egyik lekérdezés szelekciós feltételében hivatkozunk egy másik lekérdezés eredményére. Az al-lekérdezést mindig zárójelben kell megadni, hogy elemei elkülönüljenek. Formailag megegyezik a normál SELECT utasítással (kivétel:al-select-ben nem lehet rendezni) 169/140

141 Dolgozó Az AL-SELECT operátorai Kód Név Város Beosztás Belépés Fizetés Osztály Az al-lekérdezés eredményétől függően különböző operátorokat kapcsolhatunk az AL-SELECT-hez: Ha az eredmény egy rekord: skalár operátorok (relációs operátorok) használhatók. Ha az eredmény több rekord: halmazoperátorok (IN, ANY, ALL, EXISTS) használhatók. SELECT FROM WHERE mező IN (al-select); SELECT FROM WHERE mező θ ANY (al-select); SELECT FROM WHERE mező θ ALL (al-select); SELECT FROM WHERE EXISTS (al-select); θ: tetszőleges relációs operátor (<, >, =,!= ) 169/141

142 Dolgozó Az AL-SELECT operátorai Kód Név Város 2. Beosztás Belépés Fizetés Osztály IN: a mező értéke a halmaz bármely elemével megegyezhet (vagylagos multi egyenlőség) ANY: a halmaz minden eleméhez hasonlít, ha egyet talál, akkor igazzal tér vissza ALL: a halmaz minden eleméhez hasonlít, ha akár egyre nem teljesül, akkor hamisat ad vissza EXISTS: az eredményhalmaz üres, vagy sem (ha üres, akkor hamissal tér vissza) 169/142

143 Dolgozó Példák AL-SELECT-re Kód Név Város Beosztás Belépés Fizetés Osztály Autó: Rendszám Típus Szín GBC-765 Opel Piros JED-123 Nissan Ezüst AKT-392 Trabant Kék Ár Tulaj LOG-416 Volvo Piros Ember: Ekód Név Cím 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Telefon Bő Jenő Ózd Az egri tulajdonosok autóinak árát növeljük meg 20%-al: 169/143 UPDATE Autó SET Ár=Ár*1.2 WHERE Tulaj IN (SELECT Ekód FROM Ember WHERE Cím='Eger'); Töröljük azokat az embereket, akiknek több mint 2 autójuk van: DELETE FROM Ember WHERE Ekód IN (SELECT Ekód, count(*) FROM Ember, Autó WHERE Ekód=Tulaj GROUP BY Ekód HAVING count(*) > 2);

144 Dolgozó Példák AL-SELECT-re Kód Név Város Beosztás Belépés Fizetés Osztály Autó: Rendszám Típus Szín GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Ár Tulaj LOG-416 Volvo Piros Ember: Ekód Név Cím 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Telefon Bő Jenő Ózd Bármely piros autó áránál olcsóbb autók rendszámai: 169/144 SELECT Rendszám FROM Autó WHERE Ár < ANY (SELECT Ár FROM Autó WHERE Szin='piros'); Minden piros autó áránál olcsóbb autók rendszámai: SELECT rsz FROM autó WHERE ár < ALL (SELECT ár FROM autó WHERE szin= piros ); Rendszám GBC-765 JED-123 AKT-392 Rendszám AKT-392

145 Dolgozó Példák AL-SELECT-re Kód Név Város Beosztás Belépés Fizetés Osztály Autó: Rendszám Típus Szín GBC-765 Opel Fehér JED-123 Nissan Ezüst AKT-392 Trabant Kék Ár Tulaj LOG-416 Volvo Piros Ember: Ekód Név Cím 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Telefon Bő Jenő Ózd Azok az emberek, akiknek nincs autójuk (1. változat): SELECT Név FROM Ember WHERE Ekód NOT IN (SELECT Tulaj FROM Autó); Azok az emberek, akiknek nincs autójuk (2. változat): SELECT E.Név FROM Ember E WHERE NOT EXISTS (SELECT * FROM Autó A WHERE A.Tulaj=E.Ekód); 169/145

146 Dolgozó Értéktől függő kiírt Kód adat Név Város Beosztás Belépés Fizetés Osztály A select utasításban használható az alábbi szerkezet, melynek segítségével a cellák tartalmától (vagy azokból számított értéktől) függően lehet valamit kiírni: SELECT CASE [kifejezés] WHEN feltétel_1 THEN érték_1 WHEN feltétel_2 THEN érték _2... WHEN feltétel_n THEN érték _n ELSE érték END from 169/146 Darabszám kiírása magyarul select case count(*) when 0 then 'Nulla' when 1 then 'Egy' when 2 then 'Kettő' when 3 then 'Három' else 'Magyarul nem megy' end as "Tervezők száma" from dolgozó where beosztás='tervező'

147 Dolgozó Értéktől függő kiírt Kód adat Név Város Beosztás Belépés Fizetés Osztály Ember: Ekód Név Cím 114 Kis Géza Eger 178 Jó Éva Miskolc 102 Kék Béla Ózd Telefon Bő Jenő Ózd Van miskolci tulajdonos? select (case when count(*)=0 then 'Nincs' else 'Van' end) as "miskolci tulajdonos" miskolci tulajdonos from Ember Van where Cím='Miskolc' 169/147

148 169/148

149 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] -es feladatsor 169/149

150 o Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] A feladatsor táblái: Create Table Tulajdonos( Tkód Number(4) Primary Key, Név Varchar2(20) Not Null, Város Varchar2(20) ); Create Table Kategória( Knév varchar2(12), AlsóHP number(4), FelsőHP number(4) ); 169/150 Create Table Autó( Rendszám Char(7) Primary Key, Típus Varchar2(25) Not Null, Szín Varchar2(15), Kor Number(2), Ár number(8), Tulaj Number(4), Foreign key (Tulaj) References Tulajdonos(TKód) );

151 oo Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Hozzuk létre a táblákat Töltsük fel a megadott adatokkal Ellenőrizzük a táblák tartalmát! SELECT * FROM tulajdonos SELECT * FROM autó SELECT * FROM kategória 169/151

152 1 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Írassuk ki az autók rendszámát, és tulajdonosuk nevét. M1 M2 M3 SELECT Rendszám, Név FROM Autó, Tulajdonos WHERE Tulaj=Tkód; SELECT Rendszám, Név FROM Autó CROSS JOIN Tulajdonos WHERE Tulaj=Tkód; SELECT Rendszám, Név FROM Autó INNER JOIN Tulajdonos ON Tulaj=Tkód; Milyen illesztés? Descartes szorzat Milyen illesztés? CROSS JOIN Milyen illesztés? EQUI JOIN 169/152

153 2 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Írjuk ki a miskolci tulajdonosok autóinak adatait. SELECT Autó.* FROM Autó JOIN Tulajdonos ON Tulaj=Tkód WHERE Város='Miskolc'; Autó.* Az Autó tábla minden oszlopa. A SELECT * FROM parancs mindkét tábla, minden egyes oszlopát kiírná. 169/153

154 3 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Írassuk ki az autók típusát, árát, és kategóriáját. M1 SELECT típus, ár, knév FROM autó CROSS JOIN kategória WHERE ár BETWEEN AlsóHP AND FelsőHP Milyen illesztés? CROSS JOIN THETA JOIN CROSS JOIN THETA JOIN Azt jelenti, hogy teljes illesztésről van szó Azt jelenti, hogy nem egyenlőség alapján szűri a kapcsolódó rekordpárokat 169/154 SELECT típus, ár, knév FROM autó JOIN kategória on ár BETWEEN AlsóHP AND FelsőHP

155 3 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Írassuk ki az autók típusát, árát, és kategóriáját.?? SELECT típus, ár, knév FROM autó CROSS JOIN kategória WHERE ár BETWEEN AlsóHP AND FelsőHP Ha kihagynánk a CROSS szót, működne a parancs? Nem, mert akkor belső illesztésként (INNER JOIN) kezelné a rendszer, ahol csak egyenlőség adható meg feltételként, az ON vagy a USING kulcsszóval! Ettől THETA JOIN! 169/155

156 4 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Kinek, milyen rendszámú autója van? Szerepeljen az is, akinek nincs autója! M1 M2 SELECT Név, Rendszám Milyen illesztés? OUTER JOIN FROM Autó RIGHT OUTER JOIN Tulajdonos ON Tulaj=Tkód; Az OUTER szó kihagyható! SELECT Név, Rendszám FROM Autó JOIN Tulajdonos ON Tulaj(+)=Tkód; Olyan speciális belső illesztés, ahol kérjük (+) az egyik tábla kiegészítését null értékekkel, így a másik táblából azon rekordoknak is lesz párja, amelyeknek eredetileg nincs! Így e fondorlatos módszerrel a belső illesztés külső illesztéssé válik! 169/156

157 5 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Az egyes autóknak (rendszám) ki a tulajdonosa? Minden autó szerepeljen a listában! M1 M2 SELECT Rendszám, Név FROM Autó LEFT JOIN Tulajdonos ON Tulaj=Tkód; SELECT Rendszám, Név FROM Autó JOIN Tulajdonos ON Tulaj=Tkód(+); Ahhoz, hogy minden Autó szerepelhessen, a Tulajdonost kell kiegészíteni null értékekkel! 169/157

158 6 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] L1 L2 A miskolci autók átlagárától drágább, nem miskolci autók rendszáma. SELECT avg(ár) FROM Autó Inner JOIN Tulajdonos ON Tulaj=Tkód WHERE Város='Miskolc' SELECT Rendszám FROM Autó JOIN Tulajdonos ON Tulaj=Tkód WHERE Város!='Miskolc' AND Ár > (SELECT avg(ár) FROM Autó JOIN Tulajdonos ON Tulaj=Tkód WHERE Város='Miskolc'); L1: A miskolci autók átlagára 169/158 L2: Az L1-től drágább, nem miskolci autók rendszáma

159 7 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Írassuk ki azok nevét, akiknek több autójuk van! SELECT Név FROM Autó JOIN Tulajdonos ON Tulaj=Tkód GROUP BY Név HAVING Count(*)>1 A HAVING segítségével a GROUP BY által előállított csoportokra képezhetünk keresési feltételt. Csak a GROUP BY kifejezéssel együtt használható. Szintaxisa hasonlít a WHERE feltételhez, de itt használhatunk összegző függvényeket is. 169/159

160 8 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Azon autók rendszáma, melyek idősebbek, mégis drágábbak saját típustársuknál: M1 SELECT a1.rendszám FROM Autó a1 JOIN Autó a2 ON a1.típus=a2.típus WHERE a1.kor > a2.kor AND a1.ár > a2.ár; Milyen illesztés? SELF JOIN Az Autó tábla önmagához kapcsolódik. Ezt alias nevek segítségével tudjuk megvalósítani (a1 és a2). Bár a két tála ilyenkor ugyanaz, a rendszer úgy tekinti, mintha két különböző tábla lenne! 169/160

161 8 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Azon autók rendszáma, melyek idősebbek, mégis drágábbak saját típustársuknál: M2 SELECT a1.rendszám FROM Autó a1 JOIN Autó a2 Milyen illesztés? USING(Típus) WHERE NATURAL SELF JOIN a1.kor > a2.kor AND a1.ár > a2.ár; 169/161

162 9 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Bármely piros autó áránál olcsóbb autók adatai: Megfelelő? IGEN 169/162

163 9 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Bármely piros autó áránál olcsóbb autók adatai: M1 SELECT * FROM Autó WHERE Ár < ANY (SELECT Ár FROM Autó WHERE Szín='Piros'); Másképp fogalmazva: a legdrágább piros autó árától olcsóbb autók M2 SELECT * FROM Autó WHERE Ár < (SELECT max(ár) FROM Autó WHERE Szín='Piros'); 169/163

164 10 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Minden piros autó áránál olcsóbb autók adatai: Megfelelő? NEM! 169/164

165 10 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Minden piros autó áránál olcsóbb autók adatai: M1 SELECT * FROM Autó WHERE Ár < ALL (SELECT Ár FROM Autó WHERE Szín='Piros'); Másképp fogalmazva: a legolcsóbb piros autó árától olcsóbb autók M2 SELECT * FROM Autó WHERE Ár < (SELECT min(ár) FROM Autó WHERE Szín='Piros'); 169/165

166 M1 Azok neve, akiknek van autójuk. Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Milyen illesztés? SELECT distinct Név FROM Tulajdonos JOIN Autó ON Tulaj=Tkód EQUI JOIN M2 M3 Select Név from Tulajdonos Halmaz típusú megoldás WHERE TKód IN (SELECT Tulaj FROM Autó); Select Név from Tulajdonos Milyen illesztés? SEMI JOIN WHERE EXISTS (SELECT * FROM Autó WHERE Tulaj=TKód); 169/166 IN: a keresett érték benne van-e a belső lekérdezés által visszaadott eredményhalmazban (több érték között szerepel-e) EXISTS: a belső lekérdezés eredményeként kapott 1 db adatsor létezik (nem null érték)

167 12 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] Azok neve, akiknek nincs autójuk. M1 M2 SELECT Név FROM Tulajdonos MINUS SELECT Név FROM Tulajdonos JOIN Autó On TKód=Tulaj; Select Név from Tulajdonos WHERE TKód NOT IN (SELECT Tulaj FROM Autó WHERE Tulaj IS NOT NULL); M3 Select Név from Tulajdonos Milyen illesztés? WHERE NOT EXISTS (SELECT * FROM Autó WHERE Tulaj=TKód); ANTI JOIN 169/167 NOT EXISTS: a belső lekérdezés eredményeként kapott 1 db adatsor nem létezik (null érték)

168 Tulajdonos [Tkód, Név, Város] Autó [Rendszám, Típus, Szín, Kor, Ár, Tulaj] Kategória [Knév, AlsóHP, FelsőHP] 169/168

169 Dolgozó Kód Név Város Beosztás Belépés Fizetés Osztály VÉGE VÉGE 169/169

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

Adatbázis rendszerek Gy: DQL Lekérdezések Adatbázis rendszerek 1. 11.Gy: DQL Lekérdezések. 70/1 B IT v: 2018.11.24 MAN DQL utasítások 70/2 Projekció Szelekció Feltételek megfogalmazása Rendezés a lekérdezésben Aggregáció a lekérdezésben Csoportképzés

Részletesebben

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

Adatbázis-kezelés, információs-rendszerek Adatbázis-kezelés, információs-rendszerek 3. Ea: Eskúel (2011) Structured Query Language v: 2011.09.05 Szűcs Miklós - ME, ÁIT. 1.o Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítás DCL utasítások

Részletesebben

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

B I T M A N B I v: T 2015.03.09 M A N Adatbázis Rendszerek MSc 3. Gy: MySQL Lekérdezések B I v: T 2015.03.09 M A N 1/61 Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítások DCL utasítások 2/61 DQL Adat lekérdező utasítás Az SQL

Részletesebben

Adatbázis Rendszerek II. 3. SQL alapok

Adatbázis Rendszerek II. 3. SQL alapok Adatbázis Rendszerek II. 3. SQL alapok 22/1 B IT v: 2016.10.20 MAN Oracle adattípusok Szöveges adattípusok CHAR (1-2000) VARCHAR (1-4000) VARCHAR2 (1-4000, nemzeti karakterekhez) CLOB (max. 8 TB) NCLOB

Részletesebben

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

Adatbázis rendszerek Ea: Esqúel. Structured Query Language Adatbázis rendszerek 1. 4. Ea: Esqúel Structured Query Language 64/1 B ITv: MAN 2015.09.17 Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítás DCL utasítások Gyakorló feladatok Ellenőrző kérdések

Részletesebben

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

Adatbázis rendszerek Ea: Eskúel. Structured Query Language Adatbázis rendszerek 1. 4. Ea: Eskúel Structured Query Language 1/83 B ITv: MAN 2017.10.24 Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítás DCL utasítások Gyakorló feladatok Ellenőrző kérdések

Részletesebben

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

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai: 8. Gyakorlat SQL SQL: Structured Query Language; a relációs adatbáziskezelők szabványos, strukturált lekérdező nyelve SQL szabványok: SQL86, SQL89, SQL92, SQL99, SQL3 Az SQL utasításokat mindig pontosvessző

Részletesebben

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

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány) Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány) 23/1 B IT v: 2018.10.31 MAN DML adatokon műveletet végző utasítások DML Data Manipulation Language Rekordok (sorok) beszúrása (felvitele) Mezők

Részletesebben

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

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14 Adatbázisok 9. gyakorlat SQL: SELECT 2015. október 26. 2015. október 26. Adatbázisok 1 / 14 SQL SELECT Lekérdezésre a SELECT utasítás szolgál, mely egy vagy több adattáblából egy eredménytáblát állít el

Részletesebben

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

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT ADATBÁZISOK 9-10. gyakorlat: SQL 2. rész SELECT SELECT utasítás általános alakja SELECT [DISTINCT] oszloplista FROM táblanévlista [WHERE feltétel] [GROUP BY oszloplista [HAVING feltétel] ] [ORDER BY oszloplista];

Részletesebben

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.

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 létrehozása Adatleíró műveletek CREATE DATABASE "tan1" WITH ENCODING= LATIN2 ; vagy parancssorból a terminál alatt $ createdb tan1 E=latin2 Kapcsolódás az adatbázishoz $ psql tan1 Adattábla létrehozása

Részletesebben

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

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány) Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány) 41/1 B IT v: 2017.10.30 MAN DDL Adatstruktúra definiáló utasítások DDL Data Definition Language Adatszerkezetek (elsősorban táblák) létrehozása,

Részletesebben

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

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére SQL PÉLDATÁR készült a PTE TTK Iskolai informatika III. kurzus teljesítésére PTE TTK Czimmermann Gergely MA matematika informatika tanár szakos hallgató 2017 Tartalomjegyzék 1. Adatleíró műveletek... 3

Részletesebben

Adatbázis rendszerek SQL nyomkövetés

Adatbázis rendszerek SQL nyomkövetés Adatbázis rendszerek 1. 12. SQL nyomkövetés 1/32 B ITv: MAN 2017.10.26 Nyomkövetési feladat 2/32 Gyakorló feladatok Termék-Vásárlás-Vásárló Oktató-Tantárgy-Hallgató 3/32 Gyakorló feladat: Termék-Vásárlás-Vásárló

Részletesebben

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte Adattípusok Típus Méret Megjegyzés Konstans BIT 1 bit TRUE/FALSE TINIINT 1 byte 12 SMALLINT 2 byte -123 INTEGER 4 byte -123 COUNTER 4 byte Automatikus 123 REAL 4 byte -12.34E-2 FLOAT 8 byte -12.34E-2 CURRENCY

Részletesebben

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

Adatbázis-kezelés. Harmadik előadás Adatbázis-kezelés Harmadik előadás 39 Műveletek csoportosítása DDL adat definiálás Objektum létrehozás CREATE Objektum törlés DROP Objektum módosítás ALTER DML adat módosítás Rekord felvitel INSERT Rekord

Részletesebben

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

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis AB1 ZH mintafeladatok 1. Töltse ki, és egészítse ki! Matematikai formalizmus arra, hogy hogyan építhetünk új relációkat a régi relációkból. Az adatoknak egy jól strukturált halmaza, amelyből információ

Részletesebben

SQL parancsok feldolgozása

SQL parancsok feldolgozása Az SQL nyelv SQL nyelv szerepe Sequental Query Language, deklaratív nyelv Halmaz orientált megközelítés, a relációs algebra műveleteinek megvalósítására Előzménye a SEQUEL (IBM) Algoritmus szerkezeteket

Részletesebben

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte Adattípusok Típus Méret Megjegyzés Konstans BIT 1 bit TRUE/FALSE SMALLINT 2 byte -123 INTEGER 4 byte -123 COUNTER 4 byte Automatikus 123 REAL 4 byte -12.34E-2 FLOAT 8 byte -12.34E-2 CURRENCY / MONEY 8

Részletesebben

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

Adatbázis Rendszerek II. 8. Gyakorló környezet Adatbázis Rendszerek II. 8. Gyakorló környezet 1/24 B IT v: 2017.10.26 MAN Gyakorló környezet Géptermek 193.6.5.58:8080/apex H16_neptunkód ADMIN neptunkód 2/24 Jelszó váltás 1 2 3 4 3/24 Gyakorló környezet

Részletesebben

Adatbázisok I. Az SQL nyelv

Adatbázisok I. Az SQL nyelv Adatbázisok I Az SQL nyelv SQL (Structured Query Language) Deklaratív nyelv, 1974-ben publikálták Halmaz orientált megközelítés, a relációs algebra műveleteinek megvalósítására Előzménye a SEQUEL (IBM)(Structured

Részletesebben

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

B I T M A N B I v: T 2015.03.01 M A N Adatbázis Rendszerek MSc 2. Gy: MySQL Táblák, adatok B I v: T 2015.03.01 M A N 1/41 Témakörök SQL alapok DDL utasítások DML utasítások DQL utasítások DCL utasítások 2/41 Az SQL jellemzése Az SQL a relációs

Részletesebben

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

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17 Adatbázisok 8. gyakorlat SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT 2015. október 26. 2015. október 26. Adatbázisok 1 / 17 SQL nyelv Structured Query Language Struktúrált lekérdez

Részletesebben

2012.05.11. Adatbázisok I A relációs algebra

2012.05.11. Adatbázisok I A relációs algebra Adatbázisok I A relációs algebra 2 3 4 1 Feladatok Tantárgy tkód cím kredit oktató Oktató oktkód név tanszék fizetés Feladatok 1. Az átlagos kreditpontszám: Γ avg(kredit) (Tantárgy) 2. A Matematika tanszéken

Részletesebben

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

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14 Adatbázisok 8. gyakorlat SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) 2014. október 22. 2014. október 22. Adatbázisok 1 / 14 SQL nyelv Structured Query Language Struktúrált lekérdez nyelv A

Részletesebben

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

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák SQL Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák A SELECT UTASÍTÁS ÁLTALÁNOS ALAKJA (ISM.) SELECT [DISTINCT] megjelenítendő oszlopok FROM táblá(k direkt szorzata) [WHERE feltétel]

Részletesebben

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

Adatbázisok elmélete 9. előadás Adatbázisok elmélete 9. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 ADATBÁZISOK ELMÉLETE

Részletesebben

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

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER Adatbázisok I 1 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 Módosítás: DML: - rekord felvitel INSERT - rekord törlés

Részletesebben

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

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv) Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv) Az SQL a relációs adatbázis-kezelő rendszerek ma legelterjedtebb szabványosított adatbáziskezelő nyelve. Az IBM dolgozta ki 1983-ban,

Részletesebben

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

Részletesebben

Adatbázis-kezelés. 3. Ea: Viszonyított betűszámtan (2013) Relációs algebra alapok (átgondolt verzió) v: 2015.02.15 Szűcs Miklós - ME, ÁIT. 1.

Adatbázis-kezelés. 3. Ea: Viszonyított betűszámtan (2013) Relációs algebra alapok (átgondolt verzió) v: 2015.02.15 Szűcs Miklós - ME, ÁIT. 1. Adatbázis-kezelés 3. Ea: Viszonyított betűszámtan (2013) Relációs algebra alapok (átgondolt verzió) v: 2015.02.15 Szűcs Miklós - ME, ÁIT. 1.o Témakörök Relációs algebra Ellenőrző kérdések 2.o Relációs

Részletesebben

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

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai SQL ALAPOK Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai BEVEZETÉS SQL: Structured Query Language Strukturált Lekérdező Nyelv Szabvány határozza meg, azonban számos nyelvjárása létezik

Részletesebben

Adatbázisok* tulajdonságai

Adatbázisok* tulajdonságai Gazdasági folyamatok térbeli elemzése 4. előadás 2010. 10. 05. Adatbázisok* tulajdonságai Rendezett, logikailag összefüggő és meghatározott szempont szerint tárolt adatok és/vagy információk halmaza Az

Részletesebben

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

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2 Tartalomjegyzék Tartalomjegyzék 1 Az SQL nyelv 1 Az SQL DDL alapjai 2 Adatbázis parancsok 2 Táblaparancsok 2 A táblázat létrehozása 2 A táblázat módosítása 3 A tábla törlése 3 Indextábla létrehozása 3

Részletesebben

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

Keskeny Zoltán 2007/08 SQL. Structured Query Language. (gyakorlat az SQL2 szabvány alapján) Keskeny Zoltán tanév 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

Részletesebben

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

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31 Adatbázisok 2. gyakorlat SQL 2016. november 12. 2016. november 12. Adatbázisok 1 / 31 SQL nyelv Structured Query Language Struktúrált lekérdez nyelv A relációs adatbáziskezelés szabványos nyelve Két f

Részletesebben

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

Adatbázisok elmélete 9. előadás Adatbázisok elmélete 9. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2005 ADATBÁZISOK ELMÉLETE

Részletesebben

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

Adatbázis-lekérdezés. Az SQL nyelv. Makány György 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

Részletesebben

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

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai 8. gyakorlat Structured Query Language Struktúrált lekérdező nyelv A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai DDL (Data Definition Language) adatstruktúra definiáló

Részletesebben

Adatbázis rendszerek Ea: Viszonyított betűszámtan. Relációs algebra alapok

Adatbázis rendszerek Ea: Viszonyított betűszámtan. Relációs algebra alapok Adatbázis rendszerek 1. 2. Ea: Viszonyított betűszámtan Relációs algebra alapok 1/81 B ITv: MAN 2017.10.24 Témakörök Relációs algebra Ellenőrző kérdések 2/81 Relációs algebra Műveletek Gyakorlás 3/81 Relációs

Részletesebben

BEVEZETÉS Az objektum fogalma

BEVEZETÉS Az objektum fogalma BEVEZETÉS Az objektum fogalma Program (1) Adat (2) Objektum Kiadványszerkesztés Word Táblázatkezelés Excel CAD AutoCad Adatbáziskezelés Access 1 Program (1) Adat (2) Objektum Adatmodell (2) A valós világ

Részletesebben

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK Az adatbázis-kezelők elvárásai közé tartozik az, hogy legyen egy olyan adatbázis-kezelőktől független nyelv, amely az adatdefiníciós, az adatmanipulációs és a lekérdező

Részletesebben

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

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 2.4. Relációs algebra (áttekintés) 5.1.

Részletesebben

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

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT ÓBUDAI EGYETEM Neumann János Informatikai Kar Nappali Tagozat ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT NÉV: MÁK VIRÁG NEPTUN KÓD: A DOLGOZAT CÍME: Jani bácsi székadatbázisa Beadási határidő: 14. oktatási hét

Részletesebben

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

5.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK) 5.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK) http://sila.hajas.elte.hu/ SQL gyakorlatban: SELECT záradékai és a kiterjesztett relációs algebra Tankönyv: 5.1.- 5.2. Kiterjesztett relációs algebra

Részletesebben

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 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: 1 Adatbázis kezelés 2. gyakorlat 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: Táblák létrehozása,

Részletesebben

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

Lekérdezések az SQL-ben 1.rész Lekérdezések az SQL-ben 1.rész Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 6.1. Egyszerű (egy-relációs) lekérdezések az SQL-ben - Select-From-Where utasítás

Részletesebben

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

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ázisok I 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 Módosítás: DML: - rekord felvitel INSERT - rekord törlés

Részletesebben

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

Adatbázisok elmélete 10. előadás Adatbázisok elmélete 10. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu http://www.cs.bme.hu/ kiskat 2004 ADATBÁZISOK ELMÉLETE

Részletesebben

Adatbázis, adatbázis-kezelő

Adatbázis, adatbázis-kezelő Adatbázisok I. rész Adatbázis, adatbázis-kezelő Adatbázis: Nagy adathalmaz Közvetlenül elérhető háttértárolón (pl. merevlemez) Jól szervezett Osztott Adatbázis-kezelő szoftver hozzáadás, lekérdezés, módosítás,

Részletesebben

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

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet 26/1 B IT v: 2018.02.21 MAN Gyakorló környezet apex.oracle.com/en/ 26/2 A regisztrációs folyamat 26/3 26/4 26/5 26/6 26/7 26/8 26/9 26/10 26/11 Feladatok

Részletesebben

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

Lekérdezések az SQL-ben 1.rész Lekérdezések az SQL-ben 1.rész Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 6.1. Egyszerű (egy-relációs) lekérdezések az SQL-ben - Select-From-Where utasítás

Részletesebben

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

Adatbázis kezelés Delphiben. SQL lekérdezések Adatbázis kezelés Delphiben. SQL lekérdezések Structured Query Language adatbázisok kezelésére szolgáló lekérdező nyelv Szabályok: Utasítások tetszés szerint tördelhetők Utasítások végét pontosvessző zárja

Részletesebben

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

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 WHERE záradék (további lehetıségek) SQL specialitások, amelyek könnyen átírhatóak relációs algebrai kifejezésre (összetett kiválasztási feltételre) BETWEEN.. AND.. intervallumba tartozás IN (értékhalmaz)

Részletesebben

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

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 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 RELÁCIÓS ALGEBRA A relációs adatbázisokon végzett műveletek matematikai alapjai Halmazműveletek:

Részletesebben

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

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) ); Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) ); CREATE TABLE `dihunor`.`csapat` ( `ID` INT( 4 ) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'A csapat azonositoja',

Részletesebben

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

Az SQL nyelv. SQL (Structured Query Language = Strukturált Lekérdező Nyelv). Az SQL nyelv SQL (Structured Query Language = Strukturált Lekérdező Nyelv). A lekérdezési funkciók mellett a nyelv több olyan elemmel is rendelkezik, amelyek más adatkezelési funkciók végrehajtására is

Részletesebben

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 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: 1 Adatbázis kezelés 3. gyakorlat 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: Tábla kapcsolatok létrehozása,

Részletesebben

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

Több tábla összekapcsolásán alapuló lekérdezések Több tábla összekapcsolásán alapuló lekérdezések Több táblás lekérdezés EMPLOYEES DEPARTMENTS Az összekapcsolások fajtái Direktszorzat (kereszt-összekapcsolás) Természetes összekapcsolás USING utasítással

Részletesebben

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

Adatbázis Rendszerek II. 2. Gyakorló környezet Adatbázis Rendszerek II. 2. Gyakorló környezet 37/1 B IT v: 2017.02.11 MAN Gyakorló környezet Géptermek 37/2 Jelszó váltás 1 2 3 4 37/3 Gyakorló környezet II. apex.oracle.com/en/ 37/4 A regisztrációs folyamat

Részletesebben

Többtáblás lekérdezések megjelenítése

Többtáblás lekérdezések megjelenítése Többtáblás lekérdezések megjelenítése Célkitűzés Egynél több táblának egyenlőségen vagy nem-egyenlőségen alapuló összekapcsolást végző SELECT utasítások írása. Egy táblának önmagával történő összekapcsolása.

Részletesebben

Tankönyv példák kidolgozása

Tankönyv példák kidolgozása Tankönyv példák kidolgozása Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 Áttekintés: Rel.algebra és SQL Példák: Tk.2.4.14.Feladatok Tk.54-57.o. 2.4.1.feladat

Részletesebben

ADATBÁZISOK I. Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: 2013. március 20.

ADATBÁZISOK I. Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: 2013. március 20. ADATBÁZISOK I. Szerkesztette: Bókay Csongor Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: 2013. március 20. Ez a Mű a Creative Commons Nevezd meg! - Ne add el!

Részletesebben

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei 1. Mi az elsődleges következménye a gyenge logikai redundanciának? inkonzisztencia veszélye felesleges tárfoglalás feltételes függés 2. Az olyan tulajdonság az egyeden belül, amelynek bármely előfordulása

Részletesebben

Több tábla összekapcsolásán alapuló lekérdezések. Copyright 2004, Oracle. All rights reserved.

Több tábla összekapcsolásán alapuló lekérdezések. Copyright 2004, Oracle. All rights reserved. Több tábla összekapcsolásán alapuló lekérdezések Copyright 2004, Oracle. All rights reserved. Célkitűzés Egynél több táblának egyenlőségen vagy nem-egyenlőségen alapuló összekapcsolást végző SELECT utasítások

Részletesebben

Bevezetés: az SQL-be

Bevezetés: az SQL-be Bevezetés: az SQL-be Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 2.3. Relációsémák definiálása SQL-ben, adattípusok, kulcsok megadása 02B_BevSQLsemak

Részletesebben

ADATBÁZIS RENDSZEREK I BEADANDÓ

ADATBÁZIS RENDSZEREK I BEADANDÓ ADATBÁZIS RENDSZEREK I BEADANDÓ n é v : H u zynets Erik n e p t un: BJ8BDJ t a n k ö r: G2-BGI G y a k. v ezető: Smid László G y a k. időpontja: Szerda 16-18 Feladat megfogalmazása Beadandóm főként számítógépes

Részletesebben

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

4. Előadás Az SQL adatbázisnyelv 4. Előadás Az SQL adatbázisnyelv Sorváltozók Alkérdések Ismétlődő sorok Összesítések 1 Sorváltozók Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Olyan lekérdezéseknél, amelyik UGYANAZON reláció két

Részletesebben

SELECT. SELECT(projekció) FROM(forrás) WHERE(szűrés) GROUPBY(csoportosítás) HAVING(csoportok szűrése) ORDERBY(rendezés)

SELECT. SELECT(projekció) FROM(forrás) WHERE(szűrés) GROUPBY(csoportosítás) HAVING(csoportok szűrése) ORDERBY(rendezés) Lekérdezések Tartalom Lekérdezések feldolgozási sorrendje Összekapcsolások Operátorok Szűrések Aggregátumok és csoportosítások Csoportos szűrések Rendezések Halmazműveletek Ranking függvények Pivotálás

Részletesebben

Adatbázisok 1 2013-14 tavaszi félév Vizsgatételsor

Adatbázisok 1 2013-14 tavaszi félév Vizsgatételsor Adatbázisok 1 2013-14 tavaszi félév Vizsgatételsor 1. Relációs adatmodell alapjai Adatmodell: Az adatmodell egy jelölésmód egy adatbázis adatszerkezetének a leírására, beleértve az adatra vonatkozó megszorításokat

Részletesebben

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

SQL gyakorló feladatok. 6. Adatbázis gyakorlat április 5. SQL gyakorló feladatok 6. Adatbázis gyakorlat 2011. április 5. SQL alapparancsai DDL: - create: táblák létrehozása - alter: táblák (séma) módosítása - drop: táblák törlése DML: - select: adatok lekérdezése

Részletesebben

Adatbázis rendszerek Ea: Viszonyított betűszámtan. Relációs algebra alapok

Adatbázis rendszerek Ea: Viszonyított betűszámtan. Relációs algebra alapok Adatbázis rendszerek 1. 2. Ea: Viszonyított betűszámtan Relációs algebra alapok 52/1 B ITv: MAN 2015.09.08 Témakörök Relációs algebra Ellenőrző kérdések 52/2 Relációs algebra Műveletek Gyakorlás 52/3 Relációs

Részletesebben

Adatbázis használat I. 2. gyakorlat

Adatbázis használat I. 2. gyakorlat Adatbázis használat I. 2. gyakorlat Tudnivalók Oracle 10g a weben: http://www.oracle.com/technetwork/databa se/database10g/downloads/index.html FF kiírásokat legkésőbb a jövő hétre hozni! 2011. 02. 15.

Részletesebben

Adatbázis használat I. 2. gyakorlat

Adatbázis használat I. 2. gyakorlat Adatbázis használat I. 2. gyakorlat Tudnivalók Oracle 10g a weben: http://www.oracle.com/technetwork/database/ database10g/downloads/index.html Egyéb letöltési lehetőség: http://jerry.gorextar.hu/ab1/oracle/

Részletesebben

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

SQL bevezetés. Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések SQL bevezetés Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések 1 Miért az SQL? Az SQL magas szintű programozási nyelv. A hogyan helyett azt mondjuk meg, hogy mit szeretnénk.

Részletesebben

ADATBÁZIS-KEZELÉS. Relációalgebra, 5NF

ADATBÁZIS-KEZELÉS. Relációalgebra, 5NF ADATBÁZIS-KEZELÉS Relációalgebra, 5NF ABSZTRAKT LEKÉRDEZŐ NYELVEK relációalgebra relációkalkulus rekord alapú tartomány alapú Relációalgebra a matematikai halmazelméleten alapuló lekérdező nyelv a lekérdezés

Részletesebben

SELECT DISTINCT deptno FROM emp; (distinct) SELECT STATEMENT HASH UNIQUE TABLE ACCESS FULL EMP

SELECT DISTINCT deptno FROM emp; (distinct) SELECT STATEMENT HASH UNIQUE TABLE ACCESS FULL EMP SELECT * FROM emp; SELECT ename FROM emp; (projekció) SELECT ename FROM emp WHERE ename='jones'; (szelekció) ------------------------------------------ SELECT DISTINCT deptno FROM emp; (distinct) --------------------------------

Részletesebben

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

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla Adatbázisok-1 előadás Előadó: dr. Hajas Csilla Áttekintés az I.zh-ig Áttekintés az 1ZH-ig // Adatbázisok-1 elıadás // Ullman (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1 Hol tartunk? Mit tanultunk

Részletesebben

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos PASzSz Kilencedik témakör: Lazarus-Firebird Készítette: Dr. Kotsis Domokos Az SQLdb fülön IBConnection Kapcsolat A Data Access fülön Az SQLdb fülön... Select 1. Az SQLQuery lezárása. (Active := false,

Részletesebben

Access alapok. Megnevezés Művelet Minta. Új adatbázis létrehozása. Új / Üres adatbázis.. Tábla létrehozása tervező nézetben.

Access alapok. Megnevezés Művelet Minta. Új adatbázis létrehozása. Új / Üres adatbázis.. Tábla létrehozása tervező nézetben. Access alapok Megnevezés Művelet Minta Új adatbázis Új / Üres adatbázis.. A tábla mezőinek beállítása tervező nézetben Mezőnév = az adott oszlop neve, Adattípus = az oszlopban szereplő adatok mintája (szöveg,

Részletesebben

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

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány) Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány) 66/1 B IT v: 2018.11.25 MAN DDL Adatstruktúra definiáló utasítások DDL Data Definition Language Adatszerkezetek (elsősorban táblák) létrehozása,

Részletesebben

Adatok szűrése, rendezése

Adatok szűrése, rendezése Adatok szűrése, rendezése Célkitűzések Szűrést kifejező lekérdezések végrehajtása A lekérdezés eredményének rendezése &változó használata isql*plus-ban futási időben megadható feltételek céljából A lista

Részletesebben

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1 SZE INFORMATIKAI KÉPZÉS 1 ADATBÁZIS-KEZELÉS MS ACCESS 2010 A feladat megoldása során a Microsoft Office Access 2010 használata a javasolt. Ebben a feladatban a következőket fogjuk gyakorolni: Adatok importálása

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. november 20. 10. El adás SQLite SQLite: Adatbázis kezel rendszer SQL standardokat nagyrészt követi Nagyon elterjedt, pl böngész kben is használt Nehéz olyan programnyelvet

Részletesebben

Adatbázis rendszerek 7. Matematikai rendszer amely foglal magában:

Adatbázis rendszerek 7. Matematikai rendszer amely foglal magában: Adatbázis Rendszerek Budapesti Műszaki és Gazdaságtudományi Egyetem Fotogrammetria és Térinformatika Tanszék 2011 Dr. Alhusain Othman oalhusain@gmail.com 7.1. Bevezetés 7.2. Klasszikus- és relációs- algebra

Részletesebben

Adatbázis Rendszerek

Adatbázis Rendszerek Adatbázis Rendszerek Budapesti Műszaki és Gazdaságtudományi Egyetem Fotogrammetria és Térinformatika Tanszék 2010 Dr. Alhusain Othman oalhusain@gmail.com 1 7.1. Bevezetés 7.2. Klasszikus- és relációs-

Részletesebben

7. Gyakorlat A relációs adatmodell műveleti része

7. Gyakorlat A relációs adatmodell műveleti része 7. Gyakorlat A relációs adatmodell műveleti része Relációs algebra: az operandusok és az eredmények relációk; azaz a relációs algebra műveletei zártak a relációk halmazára Műveletei: Egy operandusú Két

Részletesebben

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

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2 Az indexelés újdonságai Oracle Database 12c R1 és 12c R2 Szabó Rozalinda Oracle adattárház szakértő, oktató szabo.rozalinda@gmail.com Index tömörítés fejlődése 8.1.3-as verziótól: Basic (Prefixes) index

Részletesebben

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

Készítette: Szabóné Nacsa Rozália Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu 1 Structured Query Language (Struktúrált lekérdező nyelv) Relációs adatbázisok kezelésére kifejlesztett szabvány 2 DIAKOK dkód vnév knév 1001 Kiss János

Részletesebben

Az SQL lekérdeznyelv

Az SQL lekérdeznyelv Az SQL lekérdeznyelv A legtöbb relációs ABKR az adatbázist az SQL-nek (Structured Query Language) nevezett lekérdeznyelv segítségével kérdezi le és módosítja. Az SQL központi magja ekvivalens a relációs

Részletesebben

Adatbázisok II. rész

Adatbázisok II. rész Adatbázisok II. rész Érettségi feladatok Új adatbázist készítünk A táblákat a külső adatok menüfül szövegfájl pontjánál importáljuk (nem pedig megnyitjuk!) Fontos: az első sor tartalmazza az oszlopneveket

Részletesebben

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

Adatbáziskezelés. SQL parancsok. Függvények SQL parancsok Függvények Az SQL függvények csoportosítása Két csoportra oszthatjuk a függvényeket, attól függően, hogy milyen környezetben alkalmazzuk azokat. Amelyek CSAK egy adott adatelemen végrehajthatóak.

Részletesebben

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

Lekérdezések az SQL SELECT utasítással Lekérdezések az SQL SELECT utasítással Az SQL SELECT utasítás lehetőségei Vetítés Kiválasztás 1. tábla 1. tábla Összekapcsolás 1. tábla 2. tábla Elemi SELECT utasítások SELECT * {[DISTINCT] column expression

Részletesebben

Adatbázis használat I. 5. gyakorlat

Adatbázis használat I. 5. gyakorlat Adatbázis használat I. 5. gyakorlat Tudnivalók Jövő hétre a normalizálást hozni vagy e- mailben beküldeni! 7. héten (= két hét múlva!) nagyzh + FF checkpoint: adattáblák feltöltése, megszorítások 2010.

Részletesebben

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

3.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK) 3.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK) http://sila.hajas.elte.hu/ SQL SELECT - FROM WHERE Alkérdések - Összekapcsolások Tankönyv: 6.3. Alkérdések WHERE záradékban Alkérdések FROM záradékban

Részletesebben

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

SQL DDL-1: táblák és megszorítások SQL DDL-1: táblák és megszorítások Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 2.3. Relációsémák definiálása 7.1. Kulcsok és idegen kulcsok 7.2. Értékekre

Részletesebben

ADATBÁZISKEZELÉS ADATBÁZIS

ADATBÁZISKEZELÉS ADATBÁZIS ADATBÁZISKEZELÉS 1 ADATBÁZIS Az adatbázis adott (meghatározott) témakörre vagy célra vonatkozó adatok gyűjteménye. - Pl. A megrendelések nyomon követése kereskedelemben. Könyvek nyilvántartása egy könyvtárban.

Részletesebben

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

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet 1 2 Adatbáziskezelő-szerver Általában dedikált szerver Optimalizált háttértár konfiguráció Csak OS + adatbázis-kezelő szoftver Teljes memória az adatbázisoké Fő funkciók: Adatok rendezett tárolása a háttértárolón

Részletesebben

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

Adatbázis rendszerek 2. előadás. Relációs algebra Adatbázis rendszerek. előadás Relációs algebra Molnár Bence Szerkesztette: Koppányi Zoltán Bevezetés Relációs algebra általában A relációs algebra néhány tulajdonsága: Matematikailag jól definiált Halmazelméletből

Részletesebben

Adatbázis-kezelés alapjai SQL 1: DDL, DML. v: B IT MAN 92/1B IT MAN

Adatbázis-kezelés alapjai SQL 1: DDL, DML. v: B IT MAN 92/1B IT MAN Adatbázis-kezelés alapjai SQL 1: DDL, DML v: 2018.11.25 92/1 Témakörök SQL alapok DDL utasítások DML utasítások 92/2 Az SQL jellemzése Az SQL a relációs adatbázis-kezelők szabványosított adatmanipulációs

Részletesebben