kategória | ||||||||||
|
||||||||||
|
||
A különböző adatbáziskezelő rendszerek más-más lehetőségeket adnak az adatbázisban tárolt adatok visszanyerésére, lekérdezések készítésére. Használhatnak eltérő tervező felületet, vagy más programnyelvet.
Ezeknek a különbözőségeknek az áthidalására hozták létre az SQL nyelvet ( 838i86i Standard Querry Language, szabványos lekérdező nyelv). A nyelvnek lehetnek helyi változatai, de alapjaiban minden rendszerben ugyanaz.
Az SQL ún. beágyazott programnyelv, azaz más nyelvekbe (Visual Basic, Delphi) beépíthetően működik. Parancsai az adatbázisok, táblák létrehozására, módosítására, adatok beszúrására, módosítására, törlésére, lekérdezésére stb. irányulnak.
Itt most az SQL választó lekérdezést létrehozó parancsát (SELECT) tárgyaljuk.
A példákhoz a következő három táblás adatbázist tételezzük fel:
ÁRUCIKKEK: Megnevezés, Beszerzési Ár, Készlet, Szállítókód, Fajtakód
SZÁLLÍTÓK: Kód, Cégnév, Kapcsolattartó
FAJTÁK: Kód, Megnevezés
Az egyszerűség kedvéért a következőket feltételezzük:
minden árucik megnevezése más
egy adott árucikket mindig azonos szállítótól rendelünk
minden árucikkre azonos, 30% kiskereskedelmi árrést teszünk
A SELECT parancs általános alakja:
SELECT
mezőlista
FROM táblák
WHERE rekord-szűrőfeltételek
GROUP BY csoportosítási szempontok
HAVING csoport-szűrőfeltételek
ORDER BY rendezési szempontok
A lekérdezésben szereplő mezők és táblák felsorolása kötelező, a többi záradék elmaradhat.
MEZŐLISTA
A lekérdezésben szereplő mezők, kifejezések neveit tartalmazza, vesszővel elválasztva. Szabályok:
- Ha az adott nevű mező egynél több (a lekérdezésben használt) táblában is benne van, akkor a táblák nevét is meg kell adni (egyébként nem kötelező - de lehet):
SELECT Árucikkek.Megnevezés, Szállítókód, AVG(Készlet) FROM Árucikkek. (Az AVG függvény átlagot számol.)
- Ha egy mező neve nem egy szóból áll, szögletes zárójelbe kell tenni: [Beszerzési Ár].
- A lekérdezés oszlopait átnevezhetjük az AS kulcsszó használatával (alapértelmezésben az oszlopok nevei megegyeznek az illető mezőnevekkel):
SELECT [Beszerzési Ár]*1.3 AS [Eladási ár] FROM Árucikkek (a szögletes zárójel azért kellett, mert az új név nem egy szóból áll).
FROM záradék - a táblák listája
A lekérdezésben szereplő összes táblát fel kell sorolni, vesszőkkel elválasztva. Ha egy tábla neve nem egy szóból áll, szögletes zárójelbe kell tenni. Pl. Árucikkek, Szállítók.
WHERE záradék - rekordszintű szűrés
Arra vonatkozó feltételeket adunk itt, hogy mely rekordok jelenjenek meg a lekérdezésben.
Pl. SELECT Megnevezés FROM Árucikkek WHERE [Beszerzési Ár]>5000.
Több feltételt is összekapcsolhatunk az AND ("és") illetve OR ("vagy") szavakkal. Az AND-del összekapcsolt feltételek mindegyikének teljesülnie kell ahhoz, hogy a rekord bekerüljön az eredményhalmazba, míg az OR-ral összekapcsolt feltételek egyikének teljesülése már elég.
Példák: SELECT Megnevezés FROM Árucikkek WHERE ([Beszerzési Ár]>5000) AND (Készlet<100) (az 5000-nél drágább, kevés készletű cikkek)
SELECT Megnevezés FROM Árucikkek WHERE (Készlet<50) OR (Készlet>7000) (a nagyon kevés illetve nagyon sok készletű cikkek)
A WHERE záradékot arra is felhasználhatjuk, hogy két táblát összekapcsoljunk vele:
SELECT Megnevezés, Cégnév FROM Árucikkek, szállítók
WHERE Szállítók.Kód=Árucikkek.Szállítókód
(Itt egy listát kapunk az árucikkekről és az adott cikket szállító cégről. A táblaneveket azért tettük ki, hogy egyértelmű legyen a feltétel megadása - nem lett volna kötelező, mert minden szereplő mezőnév egyedi, nem fordul elő két különböző táblában.)
GROUP BY záradék - csoportképzés
Csoportosítási szempontokat fogalmazhatunk meg a lekérdezés számára. Példák:
SELECT Fajták.Megnevezés, COUNT(Árucikkek.Megnevezés) FROM Fajták, Árucikkek WHERE Árucikkek.Fajtakód=Fajták.Kód GROUP BY Fajták.Megnevezés
Itt az árucikk-fajtákat csoportosítottuk (pl. mosóporok, kenyerek, szappanok stb.), és megszámoltuk, hogy az egyes csoportokba hányfajta árucikk tartozik (a COUT függvénnyel megszámolhatunk adott tételeket). A WHERE záradékban kapcsoltuk össze a Fajták és Árucikkek táblákat (a táblanevek ismét csak a jobb érthetőség miatt vannak ott).
SELECT Cégnév, SUM([Beszerzési Ár]*Készlet) FROM Szállítók, Árucikkek WHERE Árucikkek.Szállítókód=Szállítók.Kód GROUP BY Cégnév
Itt azt számoltuk ki, hogy az egyes szállítóktól mekkora összegű árukészletünk van (a SUM függvénnyel adott tételek összegét kapjuk meg). A szállítók neve alapján képeztük a csoportokat, a WHERE záradékban kapcsoltuk össze a Szállítók és Árucikkek táblákat.
HAVING záradék - csoportszintű feltétel
Az előző pontban ismertetett csoportosítással kapcsolatos. Itt nem az egyes rekordokra, hanem az egész csoportra adunk valamilyen feltételt.
Pl. SELECT Cégnév, MAX([Beszerzési Ár] FROM Szállítók, Árucikkek WHERE Szállítók.Kód=Árucikkek.Szállítókód GROUP BY Cégnév HAVING MAX([Beszerzési Ár])>10000
Itt azokat a szállítókat listázzuk, akiknél a legdrágább áru ára meghaladja a 10000 Ft-ot (a MAX függvény adott tételek közül a legnagyobbat adja). A szállítók csoportjait abból a szempontból vizsgáljuk, hogy az általuk szállított áruk maximális értéke meghaladja-e a 10000-et.
ORDER BY záradék - rendezés
Az eredmény-lista rendezési szempontját adjuk meg itt.
Pl. SELECT Megnevezés, [Beszerzési Ár]*1.3 FROM Árucikkek ORDER BY Megnevezés
Ebben a listában az árucikkek nevét és eladási árát kapjuk, a neveket ABC-rendbe rakva.
SELECT Megnevezés, [Beszerzési Ár]*1.3 FROM Árucikkek
ORDER BY [Beszerzési Ár] DESC
Itt az árukat az eladási ár alapján visszafelé rendeztük (ezt a DESC szócska garantálja) - tehát a legdrágább van legelöl. (Igaz, hogy a beszerzési árat rendeztük, de ez a sorrend megegyezik az eladási ár szerinti sorrenddel, tekintve, hogy minden árura egyformán 30%-ot teszünk rá.)
Találat: 1678