Bevezetés
Az SQL nyelv
Az SQL a strukturált lekérdezési nyelv rövidítése. Az SQL relációs adatbázisokkal való kommunikációra szolgál. Az SQL-utasítások olyan feladatok végrehajtására használhatók, mint az adatbázisban lévő adatok frissítése vagy adatok lekérése az adatbázisból. Az SQL SELECT utasítás például az adatbázis lekérdezésére és adatsorok visszaadására szolgál. Az SQL-t használó gyakran használt relációsadatbázis-kezelő rendszerek többek között a Microsoft SQL Server, a MySQL, a PostgreSQL, a MariaDB és az Oracle.
Az American National Standards Institute (ANSI) egy SQL nyelvi szabványt határoz meg. Minden szállító saját változatokat és bővítményeket ad hozzá.
Ebben a modulban a következőket sajátíthatja el:
- Az SQL és a használat ismertetése
- Adatbázis-objektumok azonosítása sémákban
- SQL-utasítástípusok azonosítása
- Adatbázis tábláinak lekérdezése a SELECT utasítással
- Adattípusok használata
- NULL-ek kezelése
Transact-SQL
Az olyan alapszintű SQL-utasítások, mint a SELECT, az INSERT, az UPDATE és a DELETE , függetlenül attól, hogy milyen relációs adatbázisrendszerrel dolgozik. Bár ezek az SQL-utasítások az ANSI SQL szabvány részét képezik, számos adatbázis-kezelő rendszer saját bővítményekkel is rendelkezik. Ezek a bővítmények olyan funkciókat nyújtanak, amelyekre nem terjed ki az SQL-szabvány, és olyan területeket fednek le, mint a biztonságkezelés és a programozhatóság. A Microsoft adatbázisrendszerei, például az SQL Server, az Azure SQL Database, a Microsoft Fabric és mások a Transact-SQL vagy a T-SQL sql dialektusát használják. A T-SQL nyelvi bővítményeket tartalmaz a tárolt eljárások és függvények írásához, amelyek az adatbázisban tárolt alkalmazáskódok, valamint a felhasználói fiókok kezelése.
Az SQL deklaratív nyelv
A programozási nyelvek kategorizálhatók eljárási vagy deklaratívként. Az eljárásnyelvek lehetővé teszik, hogy a számítógép által követett utasítások sorozatát definiálja egy feladat végrehajtásához. A deklaratív nyelvek lehetővé teszik a kívánt kimenet leírását, és a kimenet végrehajtási motoron való előállításához szükséges lépések részleteit.
Az SQL támogatja bizonyos eljárási szintaxist, de az adatok SQL-lel való lekérdezése általában deklaratív szemantikát követ. Az SQL használatával írja le a kívánt eredményeket, és az adatbázismotor lekérdezésfeldolgozója létrehoz egy lekérdezési tervet a lekéréséhez. A lekérdezésfeldolgozó az adatbázis adataira és a táblákon meghatározott indexekre vonatkozó statisztikákat használ egy jó lekérdezési terv létrehozásához.
Relációs adatok
Az SQL-t leggyakrabban (bár nem mindig) használják a relációs adatbázisok adatainak lekérdezésére. A relációs adatbázis egy olyan adatbázis, amelyben az adatok több táblában (más néven kapcsolatokban) vannak rendszerezve, amelyek mindegyike egy adott entitástípust (például ügyfél, termék vagy értékesítési rendelés) jelöl. Ezeknek az entitásoknak az attribútumai (például egy ügyfél neve, egy termék ára vagy egy értékesítési rendelés rendelési dátuma) a tábla oszlopaiként vagy attribútumaiként vannak definiálva, és a tábla minden sora az entitástípus egy példányát (például egy adott ügyfelet, terméket vagy értékesítési rendelést) jelöl.
Az adatbázis táblái egymáshoz kapcsolódnak olyan kulcsoszlopok használatával, amelyek egyedileg azonosítják a képviselt entitást. Minden táblához egy elsődleges kulcs van definiálva, és a kulcsra mutató hivatkozás bármely kapcsolódó táblában idegen kulcsként van definiálva. Ezt egy példával könnyebben megértheti:
Az ábrán egy négy táblát tartalmazó relációs adatbázis látható:
- Ügyfél
- SalesOrderHeader
- SalesOrderDetail
- Termék
Minden ügyfelet egyedi CustomerID mező azonosít – ez a mező az Ügyfél tábla elsődleges kulcsa. A SalesOrderHeader tábla egy OrderID nevű elsődleges kulccsal rendelkezik az egyes megrendelések azonosításához, valamint tartalmaz egy CustomerID idegen kulcsot is, amely az Ügyfél táblában lévő elsődleges kulcsra hivatkozik, így azonosítja, hogy melyik ügyfél van társítva az egyes megrendelésekhez. A rendelés egyes elemeire vonatkozó adatokat a SalesOrderDetail tábla tárolja, amely egy összetett elsődleges kulccsal rendelkezik, amely a SalesOrderHeader tábla OrderID azonosítóját egy LineItemNo értékkel egyesíti. Ezeknek az értékeknek a kombinációja egyedileg azonosít egy sorelemet. Az OrderID mező idegen kulcsként is használható annak jelzésére, hogy a sorelem melyik rendeléshez tartozik, a ProductID mező a Product tábla ProductID elsődleges kulcsának idegen kulcsaként szolgál, amely jelzi, hogy melyik terméket rendelte el.
Halmazalapú feldolgozás
A halmazelmélet az adatkezelés relációs modelljének egyik matematikai alapja, és alapvető fontosságú a relációs adatbázisok használatához. Bár a T-SQL-ben a készletek alapos ismerete nélkül is írhat lekérdezéseket, előfordulhat, hogy nehézségekbe ütközik az optimális teljesítményhez szükséges összetettebb típusú utasítások írása.
Anélkül, hogy belemerülnél a halmazelmélet matematikába, úgy gondolhatunk egy halmazra, mint "az egésznek tekintett határozott, különálló objektumok gyűjteménye". Az SQL Server-adatbázisokra alkalmazott halmazok olyan különálló objektumok gyűjteményének tekinthetők, amelyek nulla vagy több azonos típusú tagot tartalmaznak. Az Ügyfél tábla például egy halmazt jelöl: konkrétan az összes ügyfél halmazát. Látni fogja, hogy a SELECT utasítás eredményei is egy készletet alkotnak.
A T-SQL-lekérdezési utasításokról szóló további információk birtokában fontos, hogy az egyes tagok helyett mindig a teljes készletre gondoljon. Ez a gondolkodásmód jobban felkészíti a set-alapú kód írására ahelyett, hogy egyszerre egy sorban gondolkodik. A készletek használatához olyan műveletekre kell gondolni, amelyek egyszerre "egyszerre" fordulnak elő.
A halmazelmélet egyik fontos jellemzője, hogy nincs specifikáció a halmaz tagjainak sorrendjére vonatkozóan. Ez a sorrendhiány a relációs adatbázistáblákra vonatkozik. Az első, a második vagy az utolsó sor fogalma nem létezik. Az elemek bármilyen sorrendben elérhetők (és lekérhetők). Ha az eredményeket egy bizonyos sorrendben kell visszaadnia, azt explicit módon kell megadnia a SELECT lekérdezésben található ORDER BY záradékkal.