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*/
Poznámka

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:

  1. Vytvoriť model
  2. Definovať schému
  3. Zadajte dátové záznamy
  4. 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:

  1. Jeden majiteľ môže potenciálne vlastniť viacero áut.
  2. 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 );
sql
Poznámka

Pred 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);
sql

Definovať 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;
sql

Teraz 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;
sql

Implementujte 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 );
sql

Potom 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');
sql

Aby 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 );
sql

Teraz 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');
sql

Na otestovanie vydáme nasledujúce príkazy:

SELECT * FROM Orders;
sql

Nakoniec 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 );
sql

Teraz 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);
sql

Aby sme to skontrolovali, vydáme objednané produkty:

SELECT * FROM OrderItems;
sql

Píš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;
sql

Teraz 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
Prejsť na hlavné menu