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.
- 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;
- 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;
- Melyik a legdrágább élelmiszer.
SELECT TOP 1 Megnevezés, Egységár FROM Élelmiszerek ORDER BY Egységár DESC;
- A diétás élelmiszerek össz energia tartalma.
SELECT SUM(Energia) AS diétás_összenergia FROM Élelmiszerek WHERE Diétás=true;
- 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);
- 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.
- 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.
- Az egyes országokból hány kép van és mekkora tárhelyet foglalnak.
- Mekkora a színes képek átlagos tömörítési aránya? (Egy képpontot három bájton tárolunk.)
- A magyar alkotók képeinek listája, feltüntetve, hogy hány évesen készítette az illető az adott képet.
- Melyik nő töltötte fel a legkevesebb képet?
- 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.)