Warning: session_set_cookie_params(): Cannot change session cookie parameters when headers already sent in /www/html/info/auth.php on line 92

Warning: session_start(): Cannot start session when headers already sent in /www/html/info/auth.php on line 93

Warning: Use of undefined constant MY_NONE - assumed 'MY_NONE' (this will throw an Error in a future version of PHP) in /www/html/info/template.php on line 2

Warning: Use of undefined constant MY_STR - assumed 'MY_STR' (this will throw an Error in a future version of PHP) in /www/html/info/template.php on line 4

Warning: Use of undefined constant MY_VAR - assumed 'MY_VAR' (this will throw an Error in a future version of PHP) in /www/html/info/template.php on line 5

Warning: Use of undefined constant MY_ARR - assumed 'MY_ARR' (this will throw an Error in a future version of PHP) in /www/html/info/template.php on line 6

Warning: Use of undefined constant MY_FN - assumed 'MY_FN' (this will throw an Error in a future version of PHP) in /www/html/info/template.php on line 8

Warning: Use of undefined constant MY_FNH - assumed 'MY_FNH' (this will throw an Error in a future version of PHP) in /www/html/info/template.php on line 9

Warning: Use of undefined constant MY_TMPL - assumed 'MY_TMPL' (this will throw an Error in a future version of PHP) in /www/html/info/template.php on line 10

Warning: Use of undefined constant MY_TMPLH - assumed 'MY_TMPLH' (this will throw an Error in a future version of PHP) in /www/html/info/template.php on line 11

Warning: Use of undefined constant MY_DROP - assumed 'MY_DROP' (this will throw an Error in a future version of PHP) in /www/html/info/template.php on line 13
SQL

Notice: Undefined index: main in /www/html/info/template.php on line 221

Notice: Undefined variable: headers in /www/html/info/global.php on line 46

SQL

SELECT [TOP <az első ennyi sort mutassa>] <miket>
  [FROM <táblák>]
  [WHERE <csak azokat a rekordokat, amikre ez igaz>]
  [GROUP BY <ezek azonosak a csoporton belül>]
  [HAVING <csak azokat a csoportokat, amikre ez igaz>] 
  [ORDER BY <ezek szerint rendezze>]

Függvények

YEAR(<dátum>)
A dátum évét adja.
YEAR('1998.10.21.') => 1998
YEAR(#10/21/1998#) => 1998
MONTH(<dátum>)
A dátum hónapját adja.
MONTH('1998.10.21.') => 10
MONTH(#10/21/1998#) => 10
DAY(<dátum>)
A dátum napját adja.
DAY('1998.10.21.') => 21
DAY(#10/21/1998#) => 21
NOW()
A jelenlegi dátum/időt adja.
NOW() => 2008.11.14. 14:52:25
TRIM(<szöveg>)
A szöveget adja, az elejéről és a végéről kitörölve a whitespace (szóköz, tab, soremelés) karaktereket.
TRIM('  Béla   ') => Béla
LEN(<szöveg>)
A szöveg hosszát adja.
LEN('Béla') => 4
INSTR(<ebben>, <ez>)
Megadja, hogy ebben hanyadik karakternél található ez első előfordulása.
TRIM('Micimackó', 'i') => 2
LEFT(<szöveg>, <szám>)
A szöveg első szám darab karakterét adja
LEFT('Micimackó', 4) => Mici
RIGHT(<szöveg>, <szám>)
A szöveg utolsó szám darab karakterét adja
RIGHT('Micimackó', 4) => ackó
MID(<szöveg>, <kezd>, <szám>)
A szöveg kezd poziciójától szám darab karaktert ad.
MID('Micimackó', 4, 3) => ima

Összesítő függvények

MIN(<mező>)
A csoporton belüli legkisebb mező értéket adja.
MAX(<mező>)
A csoporton belüli legnagyobb mező értéket adja.
AVG(<mező>)
A csoporton belüli átlagos mező értéket adja. Csak szám típusú mezőn használható.
COUNT(<mező>)
Megadja, hogy a csoporton belül hány rekordban van kitöltve a mező. (Azaz hány helyen nem NULL.)
SUM(<mező>)
A csoporton belül mező érték összegét adja. Csak szám típusú mezőn használható.

Példák

SELECT TOP 1 Részleg, COUNT(Név)
FROM Alkalmazottak
GROUP BY Részleg
ORDER BY COUNT(Név) DESC;

A legnépesebb részleg nevét, és az ott dolgozók számát adja. (Ha több részlegnek van ugyanannyi dolgozója, akkor is csak az egyet mutat.)


SELECT Beosztás, AVG(Alapbér)
FROM Alkalmazottak
GROUP BY Beosztás
HAVING COUNT(Név) > 3;

Azon beosztások nevét és átlagbérét mutatja, melyekbe legalább három ember tartozik. Mivel a szűkitő feltételben (COUNT(Név) > 3) összesítő függvény szerepel, csak a HAVING használható, a WHERE nem.


SELECT LEFT(Irsz, 1), COUNT(Név)
FROM Betegek
GROUP BY LEFT(Irsz, 1);

Az irányítószám első számjegye alapján csoportosítva adja meg a betegek számát.


SELECT LEFT(Név, INSTR(Név, ' ')-1), RIGHT(Név, LEN(Név)- INSTR(Név, ' '))
FROM Betegek;

Megadja a betegek vezetéknevét és keresztnevét külön-külon. (Feltéve, ha a nevekben az első szóköz a vezeték- és a keresztnév között van.)


SELECT SUM(Példány*Érték)
FROM Könyvek;

Az összes könyv értékét adja. Mivel nincs GROUP BY, de van összesítő függvény, minden rekord egy csoportba kerül.


  1. Megadja, hogy melyik évben szerezte be a könyvtár a legtöbb könyvet.
    SELECT TOP 1 YEAR(Besz_idő) AS [beszerzés év], SUM(Példány) AS [össz példány]
    FROM Könyvek
    GROUP BY YEAR(Besz_idő)
    ORDER BY SUM(Példány) DESC;
  2. Betegek száma és átlag életkora osztályonként.
    SELECT COUNT(Név), AVG( (NOW() - Szület_idő) / 365 ), Osztály
    FROM Betegek
    GROUP BY Osztály;
  3. Melyik a legdrágább élelmiszer.
    SELECT TOP 1 Megnevezés, Egységár
    FROM Élelmiszerek
    ORDER BY Egységár DESC;
  4. A diétás élelmiszerek össz energia tartalma.
    SELECT SUM(Energia) AS diétás_összenergia
    FROM Élelmiszerek
    WHERE Diétás=true;
  5. Azon élelmiszerek listája, melyek szavatossága kevesebb mint egy év, ám legalább 10000 Ft értékben vannak raktáron. (ügyelj a "legalább", "több mint" és a "kevesebb mint", "legfeljebb" közötti különbségekre!)
    SELECT Megnevezés, Sz_idő, Mennyiség, Egységár, Mennyiség*Egységár AS raktár_értéke
    FROM Élelmiszerek
    WHERE (Sz_idő < 12) AND 
    	(Mennyiség*Egységár >= 10000);
  6. Melyik évfolyamra hány tanuló jár, mikor született közülük a legfiatalabb és a legidősebb.
    SELECT COUNT(Név), MIN(Szület_idő) AS legidősebbszül, 
    	MAX(Szület_idő) AS legifjabbszül, LEFT(Osztály, 1) AS évfolyam
    FROM Tanulók
    GROUP BY LEFT(Osztály, 1);

Feladatok

Alább letölthetők a forrásadatok. Láthatóan # karakterrel határolt mezők vannak a fájlokban. Az alkotok.férfi és a kepek.színes mezők logikai (Igen/Nem) típusúak legyenek. Az ilyen típusú mezők importálás után -1 (Igaz) vagy 0 (Hamis) formában jelennek meg, ám a tábla tervező nézetében meg lehet ezt változtatni. (Az igaz értéket 11111111 értékű bájton tároljuk, amit ha kettes komplemens előjeles egészként értelmezünk, akkor -1 az értéke.)
Az alkotók.
A képek.

A lekérdezés nevének elején szerepeljen a sorszáma, hogy könnyen azonosíthassuk.

  1. 2002 után Gimppel vagy Blenderrel készült képek.
    A feltételek közti vagy kapcsolatot természetesen "OR"-ral lehet megadni. Zárójelezni is kell a feltételeket.
  2. Az egyes országokból hány kép van és mekkora tárhelyet foglalnak.
  3. Mekkora a színes képek átlagos tömörítési aránya? (Egy képpontot három bájton tárolunk.)
  4. A magyar alkotók képeinek listája, feltüntetve, hogy hány évesen készítette az illető az adott képet.
  5. Melyik nő töltötte fel a legkevesebb képet?
  6. Az 1975-ig, vagy az azután születettek töltöttek fel több képet? (Ilyen kérdés még nem volt, de rá lehet jönni, hogy kell csinálni.)