Bevezető
Az SQL (Structured Query Language - Strukturált Lekérdező Nyelv) relációs adatbázisok kezelésére alkalmas, szabványos lekérdező nyelv, amelynek fejlesztése az 1970-es években kezdődött az IBM keretein belül, igaz ekkor még SEQUEL-nek nevezték. (Structured English QUEry Language) Tehát az SQL nyelv adatbázisok kezelésére szolgál.
Egy relációs adatbázisban az adattárolás alapjait a táblák jelentik. Egy adatbázis általában több táblából áll. A táblák a logikailag összetartozó adatok sorokból és oszlopokból álló elrendezése. A táblák sorait adatrekordoknak, oszlopait rekordmezőknek nevezzük.
SQL-en belül vannak olyan műveletek melyek nem túl fontosak számunkra, amikkel táblákat tudunk létrehozni vagy törölni, mivel ezeket nem „kódokon” keresztül szoktuk csinálni, hanem a phpMyAdmin-ban vagy valamilyen hasonló grafikus felületű programban. A gyakran elvégzett műveletek túlnyomó részt az alábbi négy alapműveletre korlátozódnak:
- SELECT: tábla sorainak beolvasása
- INSERT: sorok beillesztése a táblába
- UPDATE: tábla sorainak módosítása
- DELETE: tábla sorainak törlése
Pár nyelvtani szabály:
A nyelvben az utasításokat mindig pontosvessző választja el egymástól.
Az olvashatóság és az eligazgatóság érdekében a kulcsszavakat általában nagybetűvel szokás írni, bár az utasítások értelmezésénél nem tesz különbséget. (kulcsszavak = pl: a fent említett select, insert, update, delete)
A táblák és oszlopok neveit a biztonság érdekében rakjuk tick-ek közé (pl. `username`)! Hogy miért? Mert ha esetleg véletlenül egy kulcsszavat használunk oszlop vagy tábla névnek, akkor a tick-ek nélkül hibás lesz a kód. (` = tick = ALT GR + 7)
A karakterláncokat aposztrófok közé kell írni. Ha egy karakterláncban aposztróf szerepel, azt ( \\ ) escape karakterrel (ALT GR + Q) írhatjuk bele. Pl: \\’ A számokat természetesen nem muszáj aposztróf közé írni.
Táblázatok kezelése
Mint említettem egy adatbázisban több táblát is létrehozhatunk pl: felhasználók, adminok, lányok, fiúk, diákok, osztályok, állatok, növények stb…
Vegyünk is alapul egy egyszerű példát! Mondjuk az alábbi tábla neve „versenyzok”
név | neme | szuletesi_ev | azonositoja |
Kiss Virag | nő | 1999 | 12631 |
Nagy Máté | férfi | 1995 | 69069 |
Horváth Péter | férfi | 1996 | 44050 |
Szabó Emese | nő | 1994 | 23145 |
Kala Pál | férfi | 1997 | 23965 |
Bajuk Petra | nő | 1999 | 78940 |
A SELECT utasítás
A SELECT utasítással a táblázatból válogathatunk ki adatokat pl:
SELECT nev FROM versenyzok;
Eredményül egy ún. eredménytáblát kapunk. Lásd:
név |
Kiss Virag |
Nagy Máté |
Horváth Péter |
Szabó Emese |
Kala Pál |
Bajuk Petra |
Ez az eredménytábla hasonlíthat az adattáblához, de csak ideiglenesen jött létre a lekérdezés lefutatásakor.
Használata:
SELECT oszlop_nevek FROM tábla_neve;Miért írtam, hogy oszlop nevek? Mert nem csak egy oszlopot kérdezhetünk le egyszerre, hanem többet is, amit vesszővel kell elválasztani
pl:
SELECT nev, szuletesi_ev FROM versenyzok;Az eredmény:
név | szuletesi_ev |
Kiss Virag | 1999 |
Nagy Máté | 1995 |
Horváth Péter | 1996 |
Szabó Emese | 1994 |
Kala Pál | 1997 |
Bajuk Petra | 1999 |
Ha netán az összes mező értékét szeretnénk kérdezni, akkor nem szükséges felsorolni az összes oszlop nevét, hanem elég, ha csak a * karaktert használjuk. Lásd:
SELECT * FROM versenyzok;
Ezzel a lekérdezéssel az összes „rekord” (6) tartalmát megtudtuk. Az eredménytáblánk most azonos az „alap” tábláéval.
Lekérdezés eredményének szűkítése(WHERE)
A WHERE kulcsszó után feltételeket adhatunk meg a sorokra vonatkozóan. Az eredménytáblába csak azok a sorok fognak bekerülni, amelyek teljesítik a feltételeket.
Ha például azt akarjuk, hogy akik 1998 után születtek azok kerülhessenek be eme szent táblázatba, akkor a feltétel: `szuletesi_ev` > 1998. Ahhoz, hogy összetettebb feltételeket tudjunk írni, nemsokára megismerkedünk a fontosabb operátorokkal.
Használata:
SELECT oszlop_nevek FROM tábla_neve WHERE oszlopra vonatkozó feltétel;
Jelen esetben a példánk:
SELECT nev FROM versenyzok WHERE szuletesi_ev > 1998;
Eredményül csak Kiss Virág és Bajuk Petra fog szerepelni
Példa(2):
SELECT nev FROM versenyzok WHERE szuletesi_ev = 1999;
Eredményül, most szintén csak Kiss Virág és Bajuk Petra neve fog szerepelni.
Példa(3):
SELECT nev FROM versenyzok WHERE neme = ’nő’;
Eredményül, most értelem szerűen csak azoknak a nevét fogja ki listázni akinek a neme nő.
!!FIGYELEM!!!
Ha szöveg alapján szeretnéd szűkíteni a keresésedet akkor használj aposztrófot! Mint a hármas példánál tettem.
Műveleti jelek/Operátorok a WHERE feltételben
A WHERE kulcsszó után feltételeket adhatunk meg a sorokra vonatkozóan.
Művelet | Leírása |
= | egyenlő |
<> | nem egyenlő
|
< | kisebb, mint ...
|
> | nagyobb, mint ...
|
<= | kisebb vagy egyenlő, mint ...
|
>= | nagyobb vagy egyenlő, mint ...
|
LIKE | keresési minta alapján keres
A minta megadásánál használhatod a % karaktert, amely több karakter helyettesítésére szolgál. Egy karakter helyettesítésére a _ mintát használhatod.
Példa: \'A%\' : A betűvel kezdődik a szöveg \'%A\' : A betűvel végződik a szöveg \'A%Z\' : A betűvel kezdődik és Z betűvel végződik a szöveg \'%CIA%\' : minden olyan szöveg, amely tartalmazza a CIA karaktereket. \'A_C\' : A betűvel kezdődik és C-vel végződik és 3 karakterből áll a szöveg
Például: SELECT nev FROM betegek WHERE szuletesi_hely LIKE \'G%\'; Eredmény: Kidobja neked az összes olyan beteg nevét, akiknek a születési helyük G-vel,kezdődik.
|
BETWEEN | egy keresési intervallumot adhatunk meg
Pl: SELECT nev FROM betegek WHERE szuletesi_ev BETWEEN 1950 and 2000; Eredmény: Most szépen kidobja azoknak a betegeknek a nevét akik 1950 és 2000 közt születtek. Egyes rendszerekben az eredmény eltérő lehet! MySQL-ben így néz ki: eredménytábla elemei = 1950 vagy nagyobb de nem lehet nagyobb mint 2000 |
IS NULL | mikor egy bizonyos mezőnek nincs értéke, tehát üres
Pl: SELECT nev FROM dolgozok WHERE szuletesi_ev IS NULL; Eredmény: Ki adja azoknak a dolgozóknak a neveit, akiknél nincs megadva a születési év. |
IS NOT NULL | mikor egy bizonyos mezőnek van értéke, tehát nem üres
Pl: SELECT nev FROM dolgozok WHERE szuletesi_ev IS NOT NULL; Eredmény: Ki adja azoknak a dolgozóknak a neveit, akiknél meg van adva a születési év. |
A WHERE feltételek összekapcsolása
Emlékezzünk, hogy a WHERE kulcsszó után megadhattunk egy feltételt, amely alapján szűrtük az eredményhalmazt. Lásd:
SELECT nev FROM versenyzok WHERE szuletesi_ev = 1994;
Azonban e feltételeket össze is tudjuk kapcsolni különböző ún. logikai műveletekkel. Például AND (és), illetve OR (vagy).
Az OR (vagy) és AND (és) műveletek
Használatuk:
OR
SELECT oszlop_nevek FROM tábla_neve WHERE oszlop_neve műveleti_jel érték OR oszlop_neve műveleti_jel érték;
AND
SELECT oszlop_nevek FROM tábla_neve WHERE oszlop_neve műveleti_jel érték AND oszlop_neve műveleti_jel érték;
Példa (OR művelet)
SELECT * FROM versenyzok WHERE szuletesi_ev=1994 OR szuletesi_ev=1999;
Eredményül most megkaptuk azoknak a versenyzoknek az adatait akik 1994ben vagy 1999ben születtek.
Lásd:
nev | neme | szuletesi_ev | azonositoja |
Kiss Virág | nő | 1999 | 12631 |
Szabó Emese | nő | 1994 | 23145 |
Bajuk Petra | nő | 1999 | 78940 |
Példa (AND művelet 1)
SELECT * FROM versenyzok WHERE nev LIKE \'Kiss%\' AND szuletesi_ev >= 1990;
Eredményül most megkaptuk azoknak a versenyzoknek az adatait, akiknek a vezetéknevük (fogalmazzunk most így) Kiss-sel kezdődik és a születési évük 1990 vagy nagyobb. Ugye e szerint a táblázatunk most így nézne ki a gyakorlatban:
nev | neme | szuletesi_ev | azonositoja |
Kiss Virág | nő | 1999 | 12631 |
Hát igen elég szegényes minta táblát adtam meg. Sebaj ez lehetőséget ad egy kis ön ellenőrzésre/gyakorlásra. A feltételünk/kérésünk adott, nem változott.
Első kérdésem: Ha szerepelne a táblázatomban egy Kis Márk nevű versenyző, aki 1991ben született, akkor az szerepelhet-e az eredménytáblázatomban?