7. Lecke: Az SQL nyelv és nyelvjárásai, a MySQL
7.5 Az SQL formális szabályai
Ahogyan korábban említettük, az SQL nem tartozik a hagyományos érte-lemben vett programozási nyelvek közé, azaz nem procedurális nyelv. Nem tartalmaz vezérlési szerkezeteket, nem támogatja a felhasználói interakciót és a fájlkezelést, továbbá csak korlátorozottan és nyelvjárástól függően engedi a változók használatát, illetve az eljárások, illetve függvények deklarálását.
A deklaratív nyelvekkel azért hozható összefüggésbe, mert nem támogatja, és nem is teszi szükségessé a feladat megoldásának leírását. Az SQL-ben a forrásadatokat, és az azok feldolgozása nyomán várt eredményt kell a lehető legpontosabban leírnunk. Az eredmény kialakítása, a feladat elvégzése az adatbázis-kezelő rendszer dolga.
A nyelv logikus fölépítésű, és gyorsan megérthető. Az SQL-mondatok min-dig a műveletet meghatározó paranccsal kezdődnek, és pontosvesszővel (;) fejeződnek be. A parancsot, meghatározott sorrendben különböző kötelező és opcionális elemek követhetik:
az SQL fenntartott szavai (kulcsszavak),
tábla- és mezőhivatkozások,
értékek, literálok,
matematikai, szöveges és logikai kifejezések,
a kifejezésekbe írt függvényhivatkozások.
Az SQL-mondatok megfogalmazását csak az nehezítheti, hogy a parancsok a várt eredmény minél pontosabb megfogalmazhatósága érdekében számos opcionális nyelvi elemmel egészíthetők ki. Ez flexibilitás – a nyelv egyébként pontosan meghatározott nyelvtana ellenére – a műveletek árnyalt, apró részle-tekre is kiterjedő megfogalmazását teszi lehetővé az adatbázis kezelője számára.
A nagyszámú opcionális elem nagy szabadságot biztosít ugyan a feladatok leírásában, de megnehezíti a parancsok nyelvtani szabályainak ábrázolását.
Ezért mielőtt a tényleges parancsok bemutatására rátérnénk, meg kell ismer-nünk a nyelvtani szabályok leírására használt formalizmusokat.
NAGYBETŰS szavak: az SQL nem érzékeny a kis- és nagybetűk közötti különbségekre. A formai leírásokban használt nagybetűs szavak olyan nyelvi szavakat jelölnek, amelyeket pontosan a leírásban megadott mó-don, változtatás nélkül lehet csak használni. Ezek mindig az SQL saját kulcsszavai. A mondatokat állítmányaként felfogható parancsok, a pa-rancsokat kiegészítő paraméterek megadására alkalmas záradékok, és az azokat kiegészítő egyéb fenntartott szavak alkothatják.
Dőlt betűk: a nagybetűvel írt szavakkal szemben a dőlt betűs szövegek nem megadott formában kerülnek az SQL mondatokba. Helyükre is-mert, vagy a leírás későbbi részben részletezett nyelvi elemeket kell behelyettesíteni.
[szögletes zárójelben megadott szöveg]: Mint azt rövidesen tapasztal-juk, az SQL-mondatokban általában meglehetősen kevés a kötelező nyelvi elem. Ugyanakkor szinte mindegyik parancsot opcionálisan hasz-nálható, elhagyható nyelvi elemek egész sora egészíti ki. Ezek közül mindig csak azokat kell használni, amelyek a kívánt eredmény pontos leírásához szükségesek.
Az elhagyható nyelvi elemek szögletes zárójelek között szerepelnek.
Ez egyben azt is jelenti, hogy ha egy parancs, vagy paraméter nincsen szögletes zárójelben, akkor használata kötelező!
| függőleges vonal (cső karakter): Az egyes nyelvi elemek között elhe-lyezve azt jelzi, hogy azok közül egyet, és csak egyet választanunk kell SQL-mondat megfogalmazásakor.
Nyelvi elemek sorrendje: Mint említettük az egyes SQL parancsokhoz számos opcionálisan használható elem kapcsolódik. Ezek használatáról a cél ismertében dönthetünk. A használt nyelvi elemek sorrendje azon-ban nem felcserélhető, mindig a formális leírást követi.
Kis- és nagybetűk: Mint tudjuk, a szintaktikai leírásokban az SQL nyelv fenntartott szavait nagybetűkkel tűntetjük fel. A jobb olvashatóság ér-dekében a tényleges SQL mondatokban is szokás a kulcsszavak nagybe-tűs leírása, ez azonban nem kötelező. Az adatbázis-kezelő rendszerek nem különböztetik meg a kis-és nagybetűket. A DBMS számára a se-lect ugyanazt jelenti, mint a SELECT. A fájlrendszerben is megjele-nő adatbázis elemek – mint például a MySQL+adatbázisok a táblái – ne-veiben azonban a DBMS-t futtató gép operációs rendszere határozza meg a kis- és nagybetű érzékenységet. A Unix-rendszereken futó MySQL esetében van különbség egy táblanév kis- és nagybetűs változata kö-zött, Windows operációs rendszer esetében nincs.
Szövegliterálok: A szövegliterálokat az SQL-ben – de az informatikában általában is – egyszeres, vagy dupla aposztrófok közé zárjuk.
SELECT ‘szöveg’) v.
SELECT (“szöveg”)
{kapcsos zárójelbe zárt szöveg}: A kapcsos vagy francia zárójelek közé zárt szöveg logikai egységet alkotó nyelvi elemeket jelöl. A tényleges SQL-mondatokban nem szabad szerepeltetni a zárójeleket.
Sortörés: Az SQL mondatok szavait egy vagy több közkarakterrel (szó-köz, tabulátor, sorvég) kell elválasztani. A mondatokat tehát a szavak határán tetszőleges számú sorra tördelhetjük, a sorokban pedig további közkarakterekkel tagolhatjuk a szöveget. Az egynél több egymást köve-tő közkaraktert egyszerűen figyelmen kívül hagyja DBMS. Ez alkalmas a mondatok olvashatóságának fokozására, ami pedig sokat segíthet az esetleges hibák felkutatásában. A hosszabb mondatok ugyanis sokkal könnyebben átláthatók és megérthetők, ha több sorba tördelve, és a sorokban behúzásokat elhelyezve gépeljük be őket. Az egyes parancsok formális leírásaiban is alkalmazzuk ezeket a sortöréseket, de használat-kor szabadon dönthetünk alkalmazásukról.
Az alábbi példa egy egyszerű DCL-parancson keresztül mutatja be a formális leírás értelmezését. A parancs a felhasználók jelszavának megváltoztatására alkalmas.SET PASSWORD [FOR user] = PASSWORD('jelszó')
| OLD_PASSWORD('jelszó') | 'kódolt jelszó'
A fenti szintaktikai leírást az alábbiak szerint értelmezhetjük.
A jelszó megadásakor kötelező használni a SET és PASSWORD kulcsszavalat, amelyeket kötelezően egyenlőségjel követ.
Ezután három lehetőség közül az egyiket kell használnunk.
A PASSWORD függvény paraméterként szövegliterál formájában adjuk meg az új jelszót,vagy