Tanulj SQL-t – Oktatóanyag kódolási példákkal
Az SQL szintaxisa a relációs algebrán alapul, ami megkülönbözteti ezt a programozási nyelvet a többi nyelvtől. A szintaxis gyakorlati példákon keresztül történő elsajátítása segíthet az SQL hatékony elsajátításában.
Mi az SQL szintaxis?
A programozásban a szintaxis arra utal, hogy egy programozási nyelv hogyan van megírva. A szintaxis határozza meg az alapvető kódszerkezeteket és azok összekapcsolásának módját. A szintaxis megértése alapvető követelmény a programozási nyelvekben történő kódolvasáshoz és -íráshoz.
Az SQL legfontosabb szintaxis-konstrukciói az SQL-utasítások, amelyek tartalmazhatnak záradékokat is. Mindkettőt általában „SQL-parancsoknak” nevezik, bár technikai szempontból ez nem teljesen pontos. Ezek azonban nem az egyetlen SQL-szintaxis-konstrukciók. Az alábbi táblázatban áttekintést talál az SQL-szintaxis-konstrukciókról.
| SQL kifejezés | Magyarázat | Példa |
|---|---|---|
| Utasítás | Utasítja a DBMS-t egy művelet végrehajtására; pontosvesszővel végződik | CREATE TABLE People;
|
| Kifejezés | Módosítja az utasítást; csak utasításokon belül fordulhat elő. | WHERE, HAVING
|
| Kifejezés | Értéket ad vissza értékeléskor | 6 * 7
|
| Azonosító | Adatbázis-objektum, változó vagy eljárás neve; lehet minősített vagy nem minősített. | dbname.tablename / tablename
|
| Predikátum | Kifejezés, amelynek értéke TRUE, FALSE vagy UNKNOWN
|
Age < 42
|
| Lekérdezés | Különleges utasítás; megtalált rekordok halmazát adja vissza | SELECT Name FROM People WHERE Age < 42;
|
| Funkció | Egy vagy több értéket dolgoz fel; általában új értéket hoz létre. | UPPER('text') -- returns 'TEXT'
|
| Megjegyzés | SQL-kód kommentálására szolgál; az RDBMS figyelmen kívül hagyja. | -- Comment up to end of line / /*multiline comment if necessary*/
|
Az olyan SQL parancsok, mint a SELECT és a CREATE TABLE, általában nagybetűvel íródnak. Az SQL azonban nem különbözteti meg a kis- és nagybetűket. A parancsok nagybetűvel történő írása csak egy széles körben elterjedt konvenció.
Hogyan futtatják az SQL kódot?
Az SQL kód szöveges fájlokban található forráskódként. A kód csak egy megfelelő végrehajtási környezetben válik életre. A forráskódot egy SQL értelmező olvassa be, és RDBMS műveletekké alakítja át. Két alapvető megközelítés létezik:
1. SQL-kód interaktív végrehajtásaEnnél a megközelítésnél az SQL-kódot közvetlenül egy szövegablakba írják be vagy másolják. Az SQL-kód végrehajtásra kerül, és az eredmény megjelenik. A kódot módosíthatja, majd újra végrehajthatja. A kódkezelés és az eredmények megjelenítésének gyors egymásutánja miatt ez a megközelítés a legalkalmasabb komplex lekérdezések tanulásához és létrehozásához. 2. SQL-kód végrehajtása szkriptkéntEnnél a megközelítésnél a SQL-kódot tartalmazó teljes forráskódfájl soronként kerül végrehajtásra. Szükség esetén a visszajelzés csak a végrehajtás végén kerül elküldésre a felhasználónak. Ez a megközelítés a legalkalmasabb a folyamatok automatizálására és a MySQL-adatbázis-biztonsági másolatok MySQL-dump segítségével történő importálására.
| Interfész | Leírás | Példák |
|---|---|---|
| Parancssori felület (CLI) | Szövegalapú felület; SQL kód bevitele és végrehajtása, eredmény szöveges megjelenítése | mysql, psql, mysqlsh |
| Grafikus felhasználói felület (GUI) | Az SQL kód szöveges ablakba kerül beírásra és/vagy a felhasználói interakcióra adott válaszként generálódik; az SQL kód végrehajtásra kerül, az eredmény táblázatokban jelenik meg | phpMyAdmin, MySQL Workbench, HeidiSQL |
| Alkalmazásprogramozási felület (API) | Lehetővé teszi a közvetlen kommunikációt egy RDBMS-sel; az SQL kód a programozási nyelv kódjában karakterláncként szerepel és fut; az eredmények további felhasználásra adatstruktúrák formájában állnak rendelkezésre | PHP Data Objects (PDO), Connector/J (Java), Connector/Python, C API |
Hogyan állítsunk be egy termékkezelő rendszert SQL segítségével?
A programozási nyelv elsajátításának legegyszerűbb módja, ha magad írsz és futtatsz kódot. Ebben az oktatóanyagban létrehozunk egy mini adatbázist, és lekérdezéseket futtatunk rajta. Ehhez a sql.js webhely online SQL-értelmezőjét használjuk. Az oktatóanyag követéséhez lépj a webhelyre, és cseréld ki a már beírt SQL-kódot a példáinkban szereplő kódra. Futtasd a kódot darabonként, hogy megjelenjenek az eredmények.
SQL adatbázis beállítása
Ebben a példában egy üzlet számára kereskedelmi termékkezelő rendszert fogunk építeni. A követelmények a következők:
- Számos termékünk van, és mindegyikből van egy bizonyos mennyiség raktáron.
- Ügyfélkörünk számos ügyfelet és vásárlót foglal magában.
- Az ügyfelek által leadott megrendelések több terméket is tartalmazhatnak.
- Minden megrendelésről tároljuk a megrendelés dátumát és a megrendelő adatait, valamint a megrendelt termékeket és a megrendelt mennyiséget.
Ezeket a követelményeket absztrakt leírásba , majd SQL kódba fordítják:
- Modell létrehozása
- Séma meghatározása
- Adatrekordok bevitel
- Lekérdezések meghatározása
Létrehozás entitások és kapcsolatok modellje
Az első lépés papíron vagy speciális modellező eszközökkel történik. Információkat gyűjtünk a modellezni kívánt rendszerről , hogy levezessük az entitásokat és a kapcsolatokat. Ez a lépés gyakran entitás-kapcsolat (ER) diagram formájában valósul meg.
Milyen entitások léteznek és hogyan kapcsolódnak egymáshoz? Az entitások dolgok osztályai. Termékmenedzsment rendszerünk példájában az entitások a termékek, az ügyfelek és a megrendelések. Minden entitáshoz egy táblázat szükséges. A relációs modell sajátosságai miatt további táblázatok kerülnek hozzáadásra a kapcsolatok modellezéséhez. Ennek felismerése és megfelelő megvalósítása tapasztalatot igényel.
A központi kérdés, amelyre választ kell találni, az, hogy a entitások hogyan kapcsolódnak egymáshoz. Itt mindkét irányú kapcsolatot figyelembe kell vennünk, és meg kell különböztetnünk az egyes számot és a többes számot. Íme egy példa autókra és autótulajdonosokra vonatkozóan:
- Egy tulajdonos több autót is birtokolhat.
- Egy autó csak egy tulajdonosé lehet.
A két entitás közötthárom lehetséges kapcsolati minta alakulhat ki:
| Kapcsolat | Entitások | Balról | Jobbról |
|---|---|---|---|
| 1:1 kapcsolat | Auto:jelző | Egy autónak csak egy jelzője lehet. | Egy jelző csak egy autóhoz tartozhat. |
| 1:n arány | Tulajdonos:autó | Egy tulajdonosnak több autója is lehet. | Egy autó csak egy tulajdonoshoz tartozhat. |
| m:n kapcsolat | Autó:utca | Egy autó több úton is közlekedhet. | Több autó is közlekedhet egy úton. |
Termékek megvalósítása
Először is, megvalósítjuk a termékek táblázatát. Ehhez meg kell határoznunk egy sémát, be kell írni az adatrekordokat, és tesztelési célokra el kell végezni néhány egyszerű lekérdezést.
Séma meghatározása
Az adatbázis táblák definiálásának központi SQL parancsa a CREATE TABLE. Ez a parancs lehetővé teszi egy táblázat létrehozását névvel és az oszlopok tulajdonságainak megadásával. Ugyanakkor meghatározza az adattípusokat és, ha szükséges, a tárolandó értékekre vonatkozó korlátozásokat:
DROP TABLE IF EXISTS Products;
CREATE TABLE Products ( product_id int, product_name text, stocked int, price int );sqlA táblázat definiálása előtt egy DROP TABLE IF EXISTS utasítást használunk. Ez eltávolítja az összes létező táblázatot, és lehetővé teszi, hogy ugyanazt az SQL kódot többször is végrehajtsuk hibaüzenetek nélkül.
Adatállományok hozzáadása
Most létrehozunk néhány tesztrekordot. Az INSERT INTO SQL parancsot és a VALUES függvényt fogjuk használni a mezők kitöltéséhez:
INSERT INTO Products VALUES (10, 'ABC Product', 74, 1050);
INSERT INTO Products VALUES (20, 'KLM Product', 23, 750);
INSERT INTO Products VALUES (30, 'XYZ Product', 104, 350);sqlKérdések meghatározása
A Products táblázat állapotának ellenőrzéséhez egy egyszerű lekérdezést írunk. A SELECT FROM parancsot használjuk, és a teljes táblázatot kinyomtatjuk:
SELECT * FROM Products;sqlMost egy kicsit bonyolultabb lekérdezést írunk, amely kiszámítja a raktáron lévő termékek összértékét:
SELECT product_name AS 'Name', (stocked * price) AS 'Value' FROM Products;sqlTovábbi táblázatok bevezetése
Ezután létrehozzuk a többi szükséges táblázatot. Ugyanazokat a lépéseket követjük, mint a Termékek táblázatnál. Először létrehozzuk az Ügyfelek táblázatot:
DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers ( customer_id int, customer_name text, contact text );sqlEzután két mintavételi ügyfél adatait rögzítjük:
INSERT INTO Customers VALUES (100, 'EDC Customer', 'ED@example.com');
INSERT INTO Customers VALUES (200, 'WVU Customer', 'WV@example.com');sqlHogy ellenőrizzük, hogy működött-e, kinyomtatjuk az ügyfél táblázatot:
SELECT * FROM Customers;sqlA következő lépés az Orders táblázat létrehozása:
DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders ( order_id int, customer_id int, order_date text );sqlMost három mintavételi megrendelést adunk meg. Az első rekordértékhez egy azonosítót rendelünk hozzá elsődleges kulcsként. A második érték a meglévő ügyfélazonosítókra vonatkozik, amelyek külső kulcsként funkcionálnak. Ezután tároljuk a megrendelés dátumát:
INSERT INTO Orders VALUES (1000, 100, '2022-05-03');
INSERT INTO Orders VALUES (1001, 100, '2022-05-04');
INSERT INTO Orders VALUES (1002, 200, '2022-05-08');sqlA teszteléshez kiadjuk a parancsokat:
SELECT * FROM Orders;sqlVégül szükségünk van egy táblára, amely tartalmazza a megrendelésben szereplő termékeket és azok mennyiségét. Ez egy m:n kapcsolat, mert egy megrendelés több terméket is tartalmazhat, és egy termék több megrendelésben is megjelenhet. Meghatározzuk a táblát, amely a megrendelések és termékek azonosítóit tartalmazza külső kulcsokként:
DROP TABLE IF EXISTS OrderItems;
CREATE TABLE OrderItems ( orderitem_id int, order_id int, product_id int, count int );sqlMost beírunk néhány megrendelt terméket. Úgy választjuk ki a megrendelések és termékek azonosítóit, hogy legyen egy két termékből álló megrendelés és egy másik, csak egy termékből álló megrendelés:
INSERT INTO OrderItems VALUES (10001, 1000, 10, 3);
INSERT INTO OrderItems VALUES (10002, 1000, 20, 2);
INSERT INTO OrderItems VALUES (10003, 1002, 30, 12);sqlEnnek ellenőrzése érdekében kiadjuk a megrendelt termékeket:
SELECT * FROM OrderItems;sqlÍrjon összetett lekérdezéseket
Ha az eddig bemutatott kódrészleteket mind végrehajtotta, akkor már megértheti a tesztadatbázisunk felépítését. Most térjünk át a bonyolultabb lekérdezésekre, amelyek bemutatják az SQL erejét. Először írjunk egy lekérdezést, amely több táblában elosztott adatokat egyesít. A SQL JOIN parancsot fogjuk használni az ügyféladatokat és a megrendeléseket tartalmazó táblák összekapcsolásához. Eközben megnevezzük az oszlopokat, és egyező ügyfélazonosítót állítunk be JOIN feltételként. Ne feledje, hogy minősített azonosítókat használunk a két táblázat oszlopainak megkülönböztetésére:
SELECT customers.customer_name as 'Customer', customers.customer_id, orders.order_id, orders.order_date AS 'Date' FROM Customers JOIN Orders ON Orders.customer_id = Customers.customer_id ORDER BY Customers.customer_id;sqlMost egy másik JOIN parancsot fogunk használni a megrendelt termékek teljes költségének kiszámításához:
SELECT OrderItems.order_id, OrderItems.orderitem_id AS 'Order Item', Products.product_name AS 'Product', Products.price AS 'Unit Price', OrderItems.count AS 'Count', (OrderItems.count * Products.price) AS 'Total' FROM OrderItems JOIN Products ON OrderItems.product_id = Products.product_id;sql