Adatbáziskezelés - SQL. Forrás: dr. Kovács László: Adatbázisok tervezésének és kezelésének módszertana Computerbooks 2004 www.mysql.



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

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

Adatbázisok* tulajdonságai

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

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

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

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

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

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

Adatbázis rendszerek SQL nyomkövetés

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

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

BEVEZETÉS Az objektum fogalma

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

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

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

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ázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

SQL parancsok feldolgozása

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

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

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

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

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

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

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

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

Adatbázis, adatbázis-kezelő

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

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ázis-kezelés, információs-rendszerek

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

MySQL. Elektronikus jegyzet Széchenyi István Egyetem Távközlési tanszék

Adatbázis-kezelés alapok Adatbázisok című tárgyhoz, ismétlés kapcsán

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

Adatbázisok I. Az SQL nyelv

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

Bevezetés: az SQL-be

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

Webfejlesztés 4. alkalom

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

Programozás. Adatbázis-kezelés (alapok) Fodor Attila

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:

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

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

3. Előadás. Az SQL adatbázisnyelv (Tartalom) Az SQL története. Az SQL felépítése. Adattípúsok. SQL utasítások

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

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

Adatbázis rendszerek Gy: MySQL alapok

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

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP /1/A

Adatbázis-kezelés. Második előadás

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

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

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

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.

Elemi alkalmazások fejlesztése IV.

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

Adatbázis Rendszerek II. 3. SQL alapok

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

GEIAL Kovács László. GEIAL Kovács László GEIAL Kovács László

ADATBÁZIS RENDSZEREK I BEADANDÓ

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:

Adatbázis Rendszerek II. 3. Ea: MySQL alapok

Adatbázisok I A relációs algebra

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

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

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

Java és web programozás

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

Java és web programozás

Vizuális programozás gyakorlat

Adatbázis Rendszerek II. 3. Ea: MySQL alapok

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

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

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

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

LBRA6i integrált rendszer


5. Gyakorlat. 5.1 Hálós adatbázis modell műveleti része. NDQL, hálós lekérdező nyelv:

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

Adatmodellezés. 1. Fogalmi modell

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

A könyv tartalomjegyzéke

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

Adatbázisok I Adatmodellek komponensei. Adatbázis modellek típusai. Adatbázisrendszer-specifikus tervezés

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

ADATBÁZISKEZELÉS ADATBÁZIS

w w w. h a n s a g i i s k. h u 1

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

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlaton a következőket fogjuk gyakorolni:

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

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

SQL DDL-2 (aktív elemek) triggerek

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

Adatbáziskezelés alapjai ADATBÁZISKEKZELÉS 1

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

Átírás:

Adatbáziskezelés - SQL Forrás: dr. Kovács László: Adatbázisok tervezésének és kezelésének módszertana Computerbooks 2004 www.mysql.com

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

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

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

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

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

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]

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)

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:

Adatmodell tervezés 1. (EER modell részei) Tulajdonság: egyed jellemzője egyszerű tulajdonság összetett tulajdonság kulcs tulajdonság kulcs többértékű tulajdonság leszármaztatott tulajdonság

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

Adatmodell tervezés 4. (EER modell részei) Tartalmazás: egyik egyed minden előfordulása tartalmazza a másik egyed előfordulását has_a Specializáció: Ha A minden tulajdonsága megvan B-ben és A előfordulásai közé beletartoznak B előfordulásai is is_a

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)

Kiépítés sorrendje 1. Egyedek meghatározása 2. Egyedek közötti kapcsolatok 3. Kulcstulajdonság 4. Egyéb tulajdonság

Raktári nyilvántartás EER modellje cikknev min/max készlet egység_id darab nettó egységár cikk_id romlott cikkfajta egységcsomagja egységcsomag ÁFA kulcs leiras térfogat érk_dátum cikke zárolt cikkcsop_id sor_id hol van? oszlop_id cikkcsoport terem_id nev hol lehet terem teremnév igen/nem szabad_hely max hely

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

Konvertálás elvei Teljesség Integritás Konzisztencia Redundancia elkerülése Könnyű karbantartás

EER modell konvertálása relációs adatmodellé I. Egyed Egyszerű tulajdonság Összetett tulajdonság Leszármaztatott tul. Kulcstulajdonság Gyenge egyed Tö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

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 kulcs Elsődleges, idegen kulcs Új reláció két idegen kulccsal Új reláció N idegen kulccsal Elsődleges, idegen kulcs

Példa I. CIKKCSOPORT Cikkcsoport_id Elsődleges kulcs Nev Leiras CIKKFAJTA Cikk_id Cikknev Idegen kulcs Min_keszlet Max_keszlet Cikkcsoport_id

Példa II. CIKKCSOPORT Cikkcsoport_id Nev Leiras Terem Terem_id Teremnev Max_hely Szabad_hely Elhelyez Cikkcsoport_id Terem_id Lehet

Adatbázis létrehozása, belépés CREATE DATABASE <adatbázisnév>; CREATE DATABASE raktar; USE <adatbázisnév>; USE raktar;

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 unsigned not null auto_increment, cikknev varchar(45) not null, min_keszlet int(20) unsigned, max_keszlet int(30) unsigned, PRIMARY KEY (cikk_id, cikkcsoport_id), FOREIGN KEY (cikkcsoport_id) REFERENCES cikkcsoport);

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 )

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

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\bin mysqld console Gép újraindítása

Indító batch fájl szerkesztése cd\mysql\bin mysqld -remove mysqld --install net start mysql mysql u root

Jogosultság megadása/megvonása/jelszóváltás Rendszergazda neve: root Jogosultság megadása GRANT <művelet> ON <táblanév> TO <felhasználó> [IDENTIFIED BY <jelszó>] [WITH GRANT OPTION]; Jogosultság megvonása REVOKE <művelet> ON <táblanév> FROM <felhasználó>; Jelszó módosítása SET PASSWORD <felhasználónév> @ <hosztnév> = PASSWORD( <új jelszó> ); Változások jóváhagyása FLUSH PRIVILEGES;

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

Táblák adatokkal való feltöltése Közvetlen SQL paranccsal INSERT INTO <táblanév> VALUES (<mezőérték1>, <mezőérték2>,.); Batch fájl alkalmazásával Prompt> 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> ;

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)

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 mentheti FROM <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

Logikai kifejezések <felt1> AND <felt2> és, mindkét feltétel teljesül <felt1> OR <felt2> egyik vagy mindkettő feltétel teljesül NOT <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 szekvencia pl. %fűrdő^_ illeszkedik az összes olyan mintára, aminek a vége fűrdő_. <mező> IS NULL mező értéke üres

Lekérdezésre példák (alapadatbázis) SZALLITOK szallito_id Szallito_nev Varos Utca Hazszam Telefon CIKKFAJTA cikk_id Cikknev Min_ keszl et Max_ keszle t Tipus (alapanyag, segedanyag karb.anyag, felkesztermek, kesztermek) ARAK szallito_id Cikk_id Nettó_ egyseg _ar Afa_ kulcs Egyseg_d arab Teljes_netto_ ar

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

Műveletek általános sorrendje 1. Elemi (adott táblára vonatkozó) szelekció 2. Descartes szorzat képzése 3. Összetett szelekció 4. Csoportképzés 5. Aggregáció 6. Sorba rendezés 7. Projekció

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;

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_ar DESC; 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%';

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

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, arak WHERE 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_id HAVING COUNT(*)<3;

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, arak WHERE 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';