Naučte sa SQL – tutoriál s príkladmi kódovania
Syntax SQL je založená na relačnej algebre, čo odlišuje tento programovací jazyk od ostatných jazykov. Zoznámenie sa so syntaxou prostredníctvom praktických príkladov vám pomôže efektívne sa naučiť SQL.
Čo je syntax SQL?
V programovaní sa syntax vzťahuje na spôsob písania programovacieho jazyka. Syntax určuje základné konštrukcie kódu a spôsob ich prepojenia. Porozumenie syntaxe je základnou požiadavkou na čítanie a písanie kódu v programovacích jazykoch.
Najdôležitejšími syntaktickými konštrukciami v jazyku SQL sú príkazy SQL, ktoré môžu obsahovať aj klauzuly. Obe sa bežne označujú ako „príkazy SQL“, hoci z technického hľadiska to nie je úplne presné. Nie sú to však jediné syntaktické konštrukcie jazyka SQL. Nižšie nájdete tabuľku, ktorá vám poskytne prehľad syntaktických konštrukcií jazyka SQL.
| Termín SQL | Vysvetlenie | Príklad |
|---|---|---|
| Inštrukcia | Nariaďuje DBMS vykonať akciu; končí sa bodkočiarkou | CREATE TABLE People;
|
| Klauzula | Modifikuje príkaz; môže sa vyskytovať iba v rámci príkazov. | WHERE, HAVING
|
| Výraz | Vráti hodnotu pri vyhodnotení. | 6 * 7
|
| Identifikátor | Názov databázového objektu, premennej alebo procedúry; môže byť kvalifikovaný alebo nekvalifikovaný. | dbname.tablename / tablename
|
| Predikát | Výraz, ktorého hodnota je TRUE, FALSE alebo UNKNOWN.
|
Age < 42
|
| Dotaz | Špeciálne vyhlásenie; vráti nájdenú sadu záznamov | SELECT Name FROM People WHERE Age < 42;
|
| Funkcia | Spracováva jednu alebo viac hodnôt; zvyčajne vytvára novú hodnotu. | UPPER('text') -- returns 'TEXT'
|
| Komentár | Používa sa na komentovanie kódu SQL; RDBMS ho ignoruje. | -- Comment up to end of line / /*multiline comment if necessary*/
|
Príkazy SQL, ako napríklad SELECT a CREATE TABLE, sa zvyčajne píšu veľkými písmenami. SQL však nerozlišuje veľké a malé písmená. Písanie príkazov veľkými písmenami je len bežne používanou konvenciou.
Ako sa vykonáva kód SQL?
Kód SQL existuje ako zdrojový kód v textových súboroch. Kód ožíva iba vďaka vhodnému prostrediu na vykonávanie. Zdrojový kód číta interpret SQL a prevádza ho na akcie RDBMS. Existujú dva základné prístupy:
1. Interaktívne vykonávanie kódu SQLPri tomto prístupe sa kódSQLzadáva alebo kopíruje priamo do textového okna. Kód SQL sa vykoná a zobrazí sa výsledok. Kód môžete upraviť a znovu vykonať. Vďaka rýchlej manipulácii s kódom a zobrazeniu výsledkov je tento prístup najvhodnejší na učenie sa a vytváranie zložitých dopytov. 2. Vykonajte kód SQL akoskript Pri tomto prístupe sa celý súbor zdrojového kódu obsahujúci kód SQL vykonáva po riadkoch. V prípade potreby sa spätná väzba odošle používateľovi až na konci vykonávania. Tento prístup je najvhodnejší na automatizáciu procesov a na importovanie záloh databázy MySQL pomocou MySQL dump.
| Rozhranie | Popis | Príklady |
|---|---|---|
| Rozhranie príkazového riadku (CLI) | Textové rozhranie; zadáva sa a vykonáva sa kód SQL, výsledok sa zobrazuje v texte | mysql, psql, mysqlsh |
| Grafické používateľské rozhranie (GUI) | SQL kód sa zadáva do textového okna a/alebo sa generuje v reakcii na interakciu používateľa; SQL kód sa vykonáva, výsledok sa zobrazuje vo forme tabuliek | phpMyAdmin, MySQL Workbench, HeidiSQL |
| Rozhranie pre programovanie aplikácií (API) | Umožňuje priamu komunikáciu s RDBMS; kód SQL je zahrnutý a vykonávaný ako reťazec v kóde programovacieho jazyka; výsledky sú k dispozícii ako dátové štruktúry na ďalšie použitie | PHP Data Objects (PDO), Connector/J (Java), Connector/Python, C API |
Ako nastaviť systém správy produktov pomocou SQL
Najjednoduchší spôsob, ako sa naučiť programovací jazyk, je napísať a spustiť kód sami. V tomto tutoriáli vytvoríme mini databázu a spustíme na nej dotazy. Na to použijeme online interpret SQL z webovej stránky sql.js. Ak chcete sledovať tutoriál, prejdite na webovú stránku a nahraďte už zadaný kód SQL kódom z našich príkladov. Spúšťajte kód po častiach, aby sa zobrazili výsledky.
Nastavte databázu SQL
V tomto príklade vytvoríme komerčný systém riadenia produktov pre obchod. Požiadavky sú nasledovné:
- Máme niekoľko produktov a každý z nich máme na sklade v určitom množstve.
- Naša zákaznícka základňa zahŕňa mnoho klientov a zákazníkov.
- Objednávky zákazníkov môžu obsahovať viacero produktov.
- Pre každú objednávku ukladáme dátum objednávky a údaje o osobe, ktorá objednávku zadala, ako aj objednané produkty a objednané množstvo.
Tieto požiadavky sa preložia do abstraktného popisu a potom do kódu SQL:
- Vytvoriť model
- Definovať schému
- Zadajte dátové záznamy
- Definovať dotazy
Vytvorte model entít a vzťahov
Prvý krok sa vykonáva na papieri alebo pomocou špeciálnych modelovacích nástrojov. Získavame informácie o systéme, ktorý má byť modelovaný, aby sme mohli odvodiť entity a vzťahy. Tento krok sa často realizuje vo forme diagramu entít a vzťahov (ER).
Aké entity existujú a ako sú navzájom prepojené? Entity sú triedy vecí. V našom príklade systému riadenia produktov sú entitami produkty, zákazníci a objednávky. Pre každú entitu je potrebná tabuľka. Vzhľadom na špecifiká relačného modelu sa pridávajú ďalšie tabuľky na modelovanie vzťahov. Uvedomenie si tejto skutočnosti a jej správna implementácia si vyžaduje skúsenosti.
Kľúčovou otázkou, na ktorú je potrebné odpovedať, je to, ako sú entity navzájom prepojené. Tu musíme zohľadniť oba smery vzťahu a rozlišovať medzi jednotným a množným číslom. Tu je príklad s automobilmi a ich majiteľmi:
- Jeden majiteľ môže potenciálne vlastniť viacero áut.
- Auto môže patriť len jednému majiteľovi.
Medzi týmito dvoma entitami sa vynárajútri možné vzorce vzťahov:
| Vzťah | Entity | Zľava | Zprava |
|---|---|---|---|
| Vzťah 1:1 | Auto:indikátor | Auto môže mať len jeden smerovka. | Blinkre môže patriť iba k jednému autu. |
| Vzťah 1:n | Vlastník:auto | Majiteľ môže mať potenciálne viacero áut. | Auto môže patriť len jednému vlastníkovi. |
| Vzťah m:n | Auto:ulica | Auto môže jazdiť po viacerých cestách. | Na jednej ceste môže jazdiť viacero áut. |
Implementovať produkty
Najskôr implementujeme tabuľku produktov. Na to musíme definovať schému, vložiť dátové záznamy a na testovacie účely vykonať niekoľko jednoduchých dotazov.
Definovať schému
Centrálny príkaz SQL na definovanie tabuliek databázy je CREATE TABLE. Tento príkaz umožňuje vytvoriť tabuľku s názvom a špecifikovať vlastnosti stĺpcov. Zároveň sa definujú datové typy a v prípade potreby obmedzenia hodnôt, ktoré sa majú ukladať:
DROP TABLE IF EXISTS Products;
CREATE TABLE Products ( product_id int, product_name text, stocked int, price int );sqlPred definovaním tabuľky používame príkaz DROP TABLE IF EXISTS. Tým sa odstráni akákoľvek existujúca tabuľka a umožní sa viackrát spustiť ten istý kód SQL bez vyvolania chybových správ.
Pridať súbory údajov
Teraz vytvoríme niekoľko testovacích záznamov. Na vyplnenie polí použijeme príkaz SQL INSERT INTO a funkciu VALUES:
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);sqlDefinovať dotazy
Na kontrolu stavu tabuľky Produkty napíšeme jednoduchý dotaz. Použijeme príkaz SELECT FROM a vygenerujeme kompletnú tabuľku:
SELECT * FROM Products;sqlTeraz napíšeme o niečo zložitejšiu požiadavku, ktorá vypočíta celkovú hodnotu produktov, ktoré máme na sklade:
SELECT product_name AS 'Name', (stocked * price) AS 'Value' FROM Products;sqlImplementujte dodatočné tabuľky
Ďalej vytvoríme zostávajúce tabuľky, ktoré potrebujeme. Postupujeme rovnako ako v prípade tabuľky Products. Najskôr vytvoríme tabuľku Customers:
DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers ( customer_id int, customer_name text, contact text );sqlPotom zadáme údaje pre dvoch vzorových zákazníkov:
INSERT INTO Customers VALUES (100, 'EDC Customer', 'ED@example.com');
INSERT INTO Customers VALUES (200, 'WVU Customer', 'WV@example.com');sqlAby sme skontrolovali, či to funguje, vygenerujeme tabuľku zákazníkov:
SELECT * FROM Customers;sqlĎalším krokom je vytvorenie tabuľky Objednávky:
DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders ( order_id int, customer_id int, order_date text );sqlTeraz zadáme tri vzorové objednávky. Prvej hodnote záznamov priradíme ID ako primárny kľúč. Druhá hodnota je pre existujúce ID zákazníkov, ktoré fungujú ako cudzie kľúče. Potom uložíme dátum objednávky:
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');sqlNa otestovanie vydáme nasledujúce príkazy:
SELECT * FROM Orders;sqlNakoniec potrebujeme tabuľku pre produkty v objednávke spolu s ich množstvom. Ide o vzťah m:n, pretože objednávka môže obsahovať viacero produktov a produkt sa môže objaviť vo viacerých objednávkach. Definujeme tabuľku, ktorá obsahuje ID objednávok a produktov ako cudzie kľúče:
DROP TABLE IF EXISTS OrderItems;
CREATE TABLE OrderItems ( orderitem_id int, order_id int, product_id int, count int );sqlTeraz zadáme niekoľko objednaných produktov. Vyberieme identifikačné čísla objednávok a produktov tak, aby jedna objednávka obsahovala dva produkty a druhá objednávka iba jeden produkt:
INSERT INTO OrderItems VALUES (10001, 1000, 10, 3);
INSERT INTO OrderItems VALUES (10002, 1000, 20, 2);
INSERT INTO OrderItems VALUES (10003, 1002, 30, 12);sqlAby sme to skontrolovali, vydáme objednané produkty:
SELECT * FROM OrderItems;sqlPíšte zložité dotazy
Ak ste vykonali všetky doteraz uvedené úryvky kódu, mali by ste byť schopní pochopiť štruktúru našej testovacej databázy. Teraz prejdime k zložitejším dotazom, ktoré demonštrujú silu jazyka SQL. Najskôr napíšeme dotaz, ktorý zlúči údaje rozložené v viacerých tabuľkách. Použijeme príkaz SQL JOIN na spojenie tabuliek, ktoré obsahujú údaje o zákazníkoch a objednávkach. Pri tom pomenujeme stĺpce a nastavíme zodpovedajúce ID zákazníka ako podmienku JOIN. Nezabudnite, že na rozlíšenie stĺpcov dvoch tabuliek používame kvalifikované identifikátory:
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;sqlTeraz použijeme ďalší príkaz JOIN na výpočet celkových nákladov na objednané produkty:
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