Download - Adatbáziskezelés - SQL
![Page 1: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/1.jpg)
Adatbáziskezelés - SQL
Forrás: dr. Kovács László: Adatbázisok tervezésének és kezelésének módszertana
Computerbooks 2004www.mysql.com
![Page 2: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/2.jpg)
Miért fontos az adatbáziskezelés a kontrollernek?
• Bonyolultabb kapcsolatú és/vagy nagyobb adattömeg nem kezelhető az Excellel
• Vállalati alapadatok számítógépes rendszerekben adatbázisokban vannak tárolva
• Grafikus kezelőfelületek nem mindig teszik lehetővé az igények szerinti lekérdezést
• Gyorsan kell az adat, nem lehet várni az informatikusra
![Page 3: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/3.jpg)
SQL jellemzői• SQL – (structured english query language)• struktúrált – kötött szintakszis• angol – az utasításai angol nyelvűek• (nemcsak) lekérdező nyelv
• kevés parancs• nincsenek vezérlő elemek• nincs input-, output kezelés• nincs grafikus kezelőfelület
![Page 4: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/4.jpg)
Miért SQL?
• Minden jelentősebb RDMS ezt használja (MS Sql, Oracle, PostgreSqL, MySQL)
• Aki nem ezt használja, az is megérti (MS Foxpro, MSAccess)
• SQL szabvány (’92), helyi nyelvek kiegészítik
![Page 5: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/5.jpg)
Miért MySQL?• Ingyenes, letölthető www.mysql.com –ról• Majdnem mindent tud, amit a „nagyok”
– tranzakciókezelés– tárolt eljárások– triggerek– van hozzá saját OLAP (MAXDB)
• A WEB alkalmazások uralkodó adatbázisa (a webkiszolgálók 60%-a Unix/Linux – Apache –Php – MySql architektúrájú)
• PC-n is jól fut, de skálázási problémák• gyors
![Page 6: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/6.jpg)
SQL utasításai• Adatdefiníciós
– CREATE – létrehoz– DROP – megszüntet– ALTER – módosítás
• Adatkezelő– INSERT – beszúr– DELETE – törlés– UPDATE – módosítás
• Lekérdező– SELECT – kiválaszt
• Adatvezérlő– GRANT/REVOKE – jogot ad/elvon– COMMIT/ROLLLBACK – jóváhagy/visszagörget
![Page 7: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/7.jpg)
Mivel fogunk foglalkozni?
• Adatbázis-tervezés– Követelményanalízis– Adatmodell alkotás (EER)– Relációs adatbázis kialakítása (UML)
• Adatbázis-lekérdezés– SELECT mezőnév, kifejezés FROM táblanév
WHERE szűrőfeltétel [GROUP BY csoportosítás [ASC | DESC]], [HAVING alszűrés] [ORDER BY sorbarendez]
![Page 8: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/8.jpg)
Adatbázis-tervezés -Követelményanalízis
• Célunk egy logisztikai raktárbázis nyilvántartásának elkészítése, amely a következőket tudja:– le tudjuk kérdezni belőle minden cikkfajta
darabszámát, az egyes cikkek jellemzőit (darab/egységcsomag, térfogat, kezelés)
– az egyes egységcsomagok raktáron belüli helyét (a raktáron belül 8 terem van), beérkezési idejét, a bekerülési nettó egységárát, áfa kulcsát
– az egyes termek specialitásait (3 hűtőház, 2 teremnek csak teteje van)
![Page 9: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/9.jpg)
Adatmodell tervezés 1.(EER modell részei)
• Egyed: a külvilág többi részétől egyértelműen megkülönböztethető dolog– Normál egyed: rendelkezik olyan tulajdonsággal,
amely egyértelműen azonosítja
Jele:
– Gyenge egyed: más egyedhez fűződő kapcsolata szükséges az azonosításához
Jele:
![Page 10: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/10.jpg)
• Tulajdonság: egyed jellemzője– egyszerű tulajdonság
– összetett tulajdonság
– kulcs tulajdonság
– többértékű tulajdonság
– leszármaztatott tulajdonság
Adatmodell tervezés 1.(EER modell részei)
kulcs
![Page 11: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/11.jpg)
Adatmodell tervezés 3.(EER modell részei)
• Kapcsolat: egyedek közötti viszony– 1:1 kapcsolat
– 1:N kapcsolat
– N:M kapcsolat
– N-ed fokú kapcsolat
![Page 12: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/12.jpg)
• Tartalmazás: egyik egyed minden előfordulása tartalmazza a másik egyed előfordulását
• Specializáció: Ha A minden tulajdonsága megvan B-ben és A előfordulásai közébeletartoznak B előfordulásai is
Adatmodell tervezés 4.(EER modell részei)
is_a
has_a
![Page 13: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/13.jpg)
Irányvonal EER alkotáshoz
• Egyed – meghatározó dolog (főnév)• Kapcsolat – egyedek között fellépő reláció
(ige) • Tulajdonság – meghatározó dolog
valamilyen jellemzője (melléknév, birtoka az egyednek)
![Page 14: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/14.jpg)
Kiépítés sorrendje
1. Egyedek meghatározása2. Egyedek közötti kapcsolatok3. Kulcstulajdonság 4. Egyéb tulajdonság
![Page 15: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/15.jpg)
Raktári nyilvántartás EER modellje
cikkfajta
cikk_id
cikknev
térfogat
cikkcsoport
cikkcsop_id
nev
egységcsomag
cikke
egység_id darabmin/max készlet
nettó egységár
ÁFA kulcsegységcsomagja
érk_dátum
romlott
zárolt
terem
terem_id
teremnév
max helyszabad_hely
hol van?
sor_id
oszlop_id
hol lehet
igen/nem
leiras
![Page 16: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/16.jpg)
Relációs adatmodell részei• Adatbázis – egymással kapcsolatban lévő,
integrált relációk rendszere – relációk összekapcsolása kulcstulajdonságok alapján
• Reláció – azonos szerkezetű rekord előfordulások névvel ellátott halmaza
• Rekord – logikailag összetartozó mezők összessége
• Mező – elemi adattárolási egység• Domain – mező által felvehető értékek halmaza
![Page 17: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/17.jpg)
Konvertálás elvei
• Teljesség
• Integritás
• Konzisztencia
• Redundancia elkerülése
• Könnyű karbantartás
![Page 18: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/18.jpg)
EER modell konvertálása relációs adatmodellé I.
EgyedEgyszerű tulajdonságÖsszetett tulajdonságLeszármaztatott tul.Kulcstulajdonság
Gyenge egyedTöbbértékű tulajdonság
Reláció (tábla)MezőTöbb mezőIntegritás megőrzés Indexelt mező (elsődleges
kulcs, idegen kulcs)Külön reláció, aminek
elsődleges kulcsa idegen kulcs
![Page 19: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/19.jpg)
EER modell konvertálása relációs adatmodellé II.
• 1:1 kapcsolat• 1:N kapcsolat• N:M kapcsolat• N-ed fokú kapcsolat• Tartalmazás /
Specializáció
Elsődleges, idegen kulcsElsődleges, idegen kulcsÚj reláció két idegen kulccsal Új reláció N idegen kulccsal Elsődleges, idegen kulcs
![Page 20: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/20.jpg)
Példa I.CIKKCSOPORT
LeirasNevCikkcsoport_id
CIKKFAJTAMin_keszlet Max_keszlet Cikkcsoport_idCikknevCikk_id
Elsődleges kulcs
Idegen kulcs
![Page 21: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/21.jpg)
Példa II.CIKKCSOPORT
LeirasNevCikkcsoport_id
TeremMax_hely Szabad_helyTeremnevTerem_id
ElhelyezLehetTerem_idCikkcsoport_id
![Page 22: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/22.jpg)
Adatbázis létrehozása, belépés
• CREATE DATABASE <adatbázisnév>;• CREATE DATABASE raktar;
• USE <adatbázisnév>;• USE raktar;
![Page 23: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/23.jpg)
Táblák létrehozása• CREATE TABLE <táblázatnév> (<mezőnév1>
<típusnév> <integritási feltétel, <mezőnév2> <típusnév> <integritási feltétel….);
• CREATE TABLE cikkfajta (cikk_id int unsignednot null auto_increment, cikknev varchar(45) notnull, min_keszlet int(20) unsigned, max_keszletint(30) unsigned, PRIMARY KEY (cikk_id, cikkcsoport_id), FOREIGN KEY (cikkcsoport_id) REFERENCES cikkcsoport);
![Page 24: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/24.jpg)
Mezőtípusok• Numerikus típusok
– Egészek (Bit, tinyint, smallint, mediumint, int, integer, bigint)
– Lebegőpontos (float, decimal, double)• Dátum típusok
– Dátum (date, datetime)– Időpecsét (timestamp)
• Szöveg típusok– Rögzített hosszú (char, blob)– Változó hosszú (varchar, varblob)
• Felhasználó által definiált értékkészletű– Csak egy értéke lehet ENUM(„érték1”, „érték2”…)– Több lehetséges értéke lehet („érték1”, „érték2”…)
![Page 25: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/25.jpg)
Leggyakoribb integritási feltételek
• UNSIGNED – előjel nélküli• NOT NULL – mezőt mindig kötelező kitölteni• DEFAULT <érték> - alapértelmezett érték• AUTO_INCREMENT – új rekord beszúrásakor
növeli az értéket (azonosító)• UNIQUE – minden mezőértéknek különbözőnek
kell lennie• CHECK <kifejezés> - ellenőrizze, hogy teljesül-e
a beírt értékekre• PRIMARY KEY (<mezőnév>) – elsődleges kulcs• FOREIGN KEY (<mezőnév>) REFERENCES
<táblanév> - idegen kulcs
![Page 26: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/26.jpg)
MySQL installálása• Mysql zip fájl kitömörítése a
munkakönyvtárba• My.ini fájl betöltése a
c:\windows\system32 alkönyvtárba és beállítások módosítása
• DOS prompt behívása és a következőparancs kiadása
cd\mysql\binmysqld ––console• Gép újraindítása
![Page 27: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/27.jpg)
Indító batch fájl szerkesztése
cd\mysql\binmysqld –-removemysqld --installnet start mysqlmysql –u root
![Page 28: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/28.jpg)
Jogosultság megadása/megvonása/jelszóváltás
• Rendszergazda neve: root
• Jogosultság megadásaGRANT <művelet> ON <táblanév> TO <felhasználó> [IDENTIFIED BY
<jelszó>] [WITH GRANT OPTION];
• Jogosultság megvonásaREVOKE <művelet> ON <táblanév> FROM <felhasználó>;
• Jelszó módosításaSET PASSWORD ‘<felhasználónév>’@’<hosztnév>’ =
PASSWORD(‘<új jelszó>’);
• Változások jóváhagyásaFLUSH PRIVILEGES;
![Page 29: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/29.jpg)
Fontosabb műveletek
• All – mindenre megvan a joga• Create – táblát készíthet• Insert – táblába adatokat felvihet• Update – adatokat táblában módosíthat• Drop – táblát törölhet• Delete – adatokat törölhet táblából• Select – lekérdezhet adatokat• File – fájlból betölthet, fájlba írhat adatot
![Page 30: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/30.jpg)
Táblák adatokkal való feltöltése• Közvetlen SQL paranccsalINSERT INTO <táblanév> VALUES (<mezőérték1>,
<mezőérték2>, ….);• Batch fájl alkalmazásávalPrompt> mysql –h <hosztnév> -u <usernév> -p <jelszó> <
<batchfájlnév.sql>• Külső adatok importálásával
– ODBC kapcsolat (más adatbázisból)– Szövegfájlból
LOAD DATA LOCAL INFILE ‘<fájlnév elérési úttal>’ INTO TABLE <táblanév> TERMINATED BY ‘<rekord vége jel>’;
![Page 31: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/31.jpg)
Adatbázis lekérdezés
• Egy parancsot kell kiadni angol nyelven• A parancsot pontosvesszővel kell lezárni• Az eredmény szöveges fájlba át lehet
irányítani• Több tábla adataiból is lehet adatokat
lekérdezni• Gyakran előforduló lekérdezéseket el lehet
tárolni (SQL script, VIEW, SNAPSHOT)
![Page 32: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/32.jpg)
Lekérdezés szintaktikája (leglényegesebb elemek)
SELECT - lekérdező parancs[ALL | DISTINCT | DISTINCTROW ] - mindet/csak különböző mezőket/sorokat<mezőnevek> [INTO OUTFILE <fájlnév> ] - lekérdezést fájlba menthetiFROM <táblanév(ek)> - táblanév vagy nevek[WHERE <szűrőfeltételek] [GROUP BY <mezőnév [ASC | DESC] - csoportosítva mezőértékek szerint [HAVING <csoportosítás szűrőfeltétele>] [ORDER BY <mezőnév> [ASC | DESC] , ...] - mezőnév szerint sorrendbe rak[LIMIT <mettől>, <mennyit>] - hány darabot mutasson
![Page 33: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/33.jpg)
Logikai kifejezések<felt1> AND <felt2> – és, mindkét feltétel teljesül<felt1> OR <felt2> – egyik vagy mindkettő feltétel teljesülNOT <felt> - feltétel nem teljesül<mező>=<kifejezés> - mező egyenlő kifejezéssel<mező>><kifejezés> - mező nagyobb, mint a kifejezés<mező><<kifejezés> - mező kisebb, mint a kifejezés<mező>>=<kifejezés> - mező nagyobb, vagy egyenlő, mint a kifejezés<mező><=<kifejezés> - mező kisebb, vagy egyenlő, mint a kifejezés<mező> BETWEEN <érték1> AND <érték2> - mező értéke a két érték
között (2 érték benne van)<mező> IN (<érték1>, [<érték2>], [<érték3>]) – mező értéke a felsorolt
értékek valamelyikével megegyezik<mező> LIKE ‘<minta>’ – mező értékében benne van-e az adott minta
% - tetszőleges karaktersorozatot helyettesít a mintában_ - egyetlenegy karaktert helyettesít a mintában^ - escape szekvenciapl. ‘%fűrdő^_’ – illeszkedik az összes olyan mintára, aminek a vége fűrdő_.
<mező> IS NULL – mező értéke üres
![Page 34: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/34.jpg)
Lekérdezésre példák (alapadatbázis)
SZALLITOKHazszamUtcaszallito_id TelefonVarosSzallito_nev
CIKKFAJTAMin_keszlet
Max_keszlet
Tipus (alapanyag, segedanyagkarb.anyag, felkesztermek, kesztermek)
Cikknevcikk_id
ARAKEgyseg_darab
Afa_kulcs
szallito_id Teljes_netto_ar
Nettó_egyseg_ar
Cikk_id
![Page 35: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/35.jpg)
Fontosabb lekérdezési műveletek
• Szelekció – bizonyos rekordokat keresünk• Projekció – bizonyos mezőket keresünk• Kiterjesztés – mezők kapcsolatából új
mező születik• Aggregáció – műveletek (általában
csoportképzés alapján)• Join – több tábla egyesítése
![Page 36: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/36.jpg)
Műveletek általános sorrendje
1. Elemi (adott táblára vonatkozó) szelekció2. Descartes szorzat képzése3. Összetett szelekció4. Csoportképzés5. Aggregáció6. Sorba rendezés7. Projekció
![Page 37: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/37.jpg)
Feladatok (1)• Listázzuk ki a szallito táblát!SELECT * FROM szallito;• Listázzuk ki a szállítók nevét és városát!SELECT szallito_nev, varos FROM szallito;• Listázzuk ki azokat a termékek nevét, és azonosítóját, ahol a
minimális készlet nagyobb, mint 1000 darab!SELECT cikk_id, cikknev FROM szallito WHERE min_keszlet >
100;• Rakjuk maximális készletszint szerint növekvő sorrendbe a
cikkfajtákat és listázzuk ki a nevüket!SELECT cikknev FROM szallito ORDER BY max_keszlet ASC;
![Page 38: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/38.jpg)
Feladatok (2)• Listázzuk ki csökkenő sorrend szerint a 8-as cikk nettó
egységárait és szállítói azonosítóit!SELECT szallito_id, nettó_egyseg_ar FROM arak WHERE
nettó_egyseg_ar = 8 ORDER BY nettó_egyseg_arDESC;
• Listázzuk ki a félkész és késztermékeink nevét!SELECT cikknev FROM cikkfajta WHERE tipus LIKE
‘%termek%’;• Listázzuk ki az M betűvel kezdődő városban lakó
szállítók nevét, címét és telefonszámát!SELECT szallito_nev, varos, utca, hazszam, telefon FROM
szallito WHERE varos LIKE 'm%';
![Page 39: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/39.jpg)
Feladatok(3)• Listázzuk ki a legkedvezőbb ajánlatot adó szállítók
azonosítóját, a cikkazonosítót és az árajánlatot termékenként!
SELECT szallito_id, cikk_id, MIN(nettó_egyseg_ar) FROM arak GROUP BY cikk_id;
• Listázzuk ki a cikkek átlagárát és a cikkazonosítót cikkenként!
SELECT AVG(nettó_egyseg_ar), cikk_id FROM arakGROUP BY cikk_id;
• Listázzuk ki azon cikkek azonosítóját, ahol háromnál kevesebb ajánlatunk van!
SELECT cikk_id FROM arak GROUP BY cikk_id HAVING COUNT(*)<3;
![Page 40: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/40.jpg)
Feladatok(4)• Listázzuk ki a legkedvezőbb ajánlatot adó szállítók nevét,
a cikkek nevét és az árajánlatot termékenként!SELECT szallito.szallito_nev, cikkfajta.cikknev,
MIN(arak.netto_egyseg_ar) FROM szallito, cikkfajta, arakWHERE arak.szallito_id=szallito.szallito_id AND arak.cikk_id=cikkfajta.cikk_id GROUP BY arak.cikk_id;
• Listázzuk ki azon cikkek nevét, ahol háromnál kevesebb ajánlatunk van!
SELECT cikkfajta.cikknev FROM cikkfajta, arak WHERE arak.cikk_id=cikkfajta.cikk_id GROUP BY arak.cikk_idHAVING COUNT(*)<3;
![Page 41: Adatbáziskezelés - SQL](https://reader034.vdocuments.pub/reader034/viewer/2022051302/58904dfa1a28ab220c8b5d31/html5/thumbnails/41.jpg)
Feladatok (5)• Listázzuk ki azon cikkek nevét, ahol háromnál kevesebb
ajánlatunk van, továbbá az ajánlatok számát egy Excel által is olvasható szövegfájlba!
SELECT cikkfajta.cikknev, count(*) FROM cikkfajta, arakWHERE arak.cikk_id=cikkfajta.cikk_id GROUP BY arak.cikk_id HAVING COUNT(*)<3 INTO OUTFILE ‘c:/mysql/kimenet.txt’ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';