SQL sintaksė grin­džia­ma re­lia­ci­nės algebros prin­ci­pais, todėl ši prog­ra­ma­vi­mo kalba skiriasi nuo kitų kalbų. Su­si­pa­ži­ni­mas su sintakse per prak­ti­nius pa­vyz­džius gali padėti jums veiks­min­gai išmokti SQL.

Kas yra SQL sintaksė?

Prog­ra­ma­vi­mo srityje sintaksė reiškia tai, kaip rašoma prog­ra­ma­vi­mo kalba. Sintaksė apibrėžia pag­rin­di­nes kodo struk­tū­ras ir tai, kaip jas sujungti. Sintaksės su­pra­t­i­mas yra pag­rin­di­nė sąlyga, norint skaityti ir rašyti kodą prog­ra­ma­vi­mo kalbomis.

Svar­biau­sios SQL sintaksės konst­ruk­ci­jos yra SQL teiginiai, kurie taip pat gali apimti sąlygas. Abiejų šių elementų dažnai vadinama „SQL ko­man­do­mis“, nors techniniu požiūriu tai nėra visiškai tikslu. Tačiau tai nėra vie­nin­te­lės SQL sintaksės konst­ruk­ci­jos. Toliau pa­teik­to­je lentelėje rasite SQL sintaksės konst­ruk­ci­jų apžvalgą.

SQL terminas Pa­aiš­ki­ni­mas Pavyzdys
Teiginys Nurodo DBVS atlikti veiksmą; baigiasi kab­lia­taš­kiu CREATE TABLE People;
Sąlyga Keičia teiginį; gali būti naudojama tik tei­gi­niuo­se WHERE, HAVING
Išraiška Vertinant grąžina reikšmę 6 * 7
Iden­ti­fi­ka­to­rius Duomenų bazės objekto, kintamojo ar pro­ce­dū­ros pa­va­di­ni­mas; gali būti kva­li­fi­kuo­tas arba nekva­li­fi­kuo­tas dbname.tablename / tablename
Pre­di­ka­tas Išraiška, kurios vertė yra TRUE, FALSE arba UNKNOWN Age < 42
Užklausa Spe­cia­lu­sis teiginys; grąžina rastų įrašų rinkinį SELECT Name FROM People WHERE Age < 42;
Funkcija Apdoroja vieną ar daugiau verčių; paprastai sukuria naują vertę UPPER('text') -- returns 'TEXT'
Ko­men­ta­ras Naudojama SQL kodui ko­men­tuo­ti; RDBMS ignoruoja -- Comment up to end of line / /*multiline comment if necessary*/
Note

SQL komandos, pa­vyz­džiui, SELECT ir CREATE TABLE, paprastai rašomos di­džio­sio­mis raidėmis. Tačiau SQL ne­at­si­žvel­gia į didžiųjų ir mažųjų raidžių skirtumą. Komandų rašymas di­džio­sio­mis raidėmis yra tik plačiai taikoma praktika.

Kaip vykdomas SQL kodas?

SQL kodas saugomas kaip šaltinio kodas teks­ti­niuo­se failuose. Kodas įgyja gyvybę tik tinkamoje vykdymo aplinkoje. Šaltinio kodą nuskaito SQL in­ter­preta­to­rius ir paverčia RDBVS veiksmais. Čia yra du pag­rin­di­niai metodai:

1. In­te­rak­ty­vus SQL kodo vykdymasŠiuo būdu SQL kodas įvedamas arba įkli­juo­ja­mas tiesiai į teksto langą. SQL kodas yra vykdomas, o re­zul­ta­tas rodomas ekrane. Galite pa­ko­re­guo­ti kodą ir vėl jį vykdyti. Dėl greitos kodų re­da­ga­vi­mo ir rezultatų rodymo sekos šis būdas ge­riau­siai tinka sudėtingų užklausų mokymuisi ir kūrimui. 2. Vykdyti SQL kodą kaipscenarijų Šiuo metodu visas šaltinio kodo failas, kuriame yra SQL kodas, vykdomas eilutė po eilutės. Jei reikia, at­si­lie­pi­mas var­to­to­jui siun­čia­mas tik vykdymo pabaigoje. Šis metodas la­biau­siai tinka procesų au­to­ma­ti­za­vi­mui ir MySQL duomenų bazių at­sar­gi­nių kopijų im­por­ta­vi­mui naudojant MySQL dump.

Sąsaja Aprašymas Pa­vyz­džiai
Ko­man­di­nės eilutės sąsaja (CLI) Tekstinė sąsaja; įvedamas ir vykdomas SQL kodas, re­zul­ta­tas rodomas tekstu mysql, psql, mysqlsh
Grafinė vartotojo sąsaja (GUI) SQL kodas įvedamas teksto lange ir (arba) ge­ne­ruo­ja­mas rea­guo­jant į vartotojo veiksmus; SQL kodas vykdomas, re­zul­ta­tas rodomas lentelių pavidalu php­My­Ad­min, MySQL Workbench, HeidiSQL
Prog­ra­ma­vi­mo sąsaja (API) Leidžia tie­sio­giai bendrauti su RDBMS; SQL kodas įtrau­kia­mas ir vykdomas kaip eilutė prog­ra­ma­vi­mo kalbos kode; re­zul­ta­tai pa­tei­kia­mi kaip duomenų struk­tū­ros tolesniam nau­do­ji­mui PHP duomenų objektai (PDO), Connector/J (Java), Connector/Python, C API

Kaip sukurti produktų valdymo sistemą naudojant SQL

Pa­pras­čiau­sias būdas išmokti prog­ra­ma­vi­mo kalbą – pačiam rašyti ir vykdyti kodą. Šiame pa­mo­ki­nia­me vadove sukursime mini duomenų bazę ir atliksime užklausas. Tam pa­si­nau­do­si­me in­ter­ne­ti­niu SQL in­ter­preta­to­riu­mi, esančiu sve­tai­nė­je sql.js. Norėdami atlikti užduotis, eikite į šią svetainę ir pa­kei­s­ki­te ten jau įvestą SQL kodą mūsų pavyzdžių kodu. Vykdykite kodą po vieną eilutę, kad būtų rodomi re­zul­ta­tai.

Sukurti SQL duomenų bazę

Šiame pavyzdyje kursime komercinę prekių valdymo sistemą par­duo­tu­vei. Štai kokie yra rei­ka­la­vi­mai:

  • Turime keletą produktų, ir kiekvieno iš jų sandėlyje yra tam tikras kiekis.
  • Mūsų klientų bazę sudaro daug klientų ir pirkėjų.
  • Klientų pateikti užsakymai gali apimti keletą produktų.
  • Kiek­vie­nam užsakymui mes saugome užsakymo datą ir užsakymą pa­tei­ku­sio asmens duomenis, taip pat užsakytus produktus ir užsakytą kiekį.

Šie rei­ka­la­vi­mai pa­ver­čia­mi abst­rak­čiu aprašymu, o vėliau – SQL kodu:

  1. Sukurti modelį
  2. Apibrėžti schemą
  3. Įvesti duomenų įrašus
  4. Apibrėžti užklausas

Sukurti objektų ir ryšių modelį

Pirmasis etapas vyksta ant po­pie­riaus arba naudojant spe­cia­lias mo­de­lia­vi­mo priemones. Renkame in­for­ma­ci­ją apie mo­de­liuo­ja­mą sistemą , kad nu­sta­ty­tu­me objektus ir ryšius. Šis etapas dažnai įgy­ven­di­na­mas kaip objektų-ryšių (ER) diagrama.

Kokie yra objektai ir kaip jie susiję? Objektai – tai daiktų klasės. Mūsų produktų valdymo sistemos pavyzdyje objektai yra produktai, klientai ir užsakymai. Kiek­vie­nam objektui rei­ka­lin­ga atskira lentelė. Dėl re­lia­ci­nio modelio ypatumų, siekiant mo­de­liuo­ti ryšius, pri­de­da­mos pa­pil­do­mos lentelės. Norint tai suprasti ir tinkamai įgy­ven­din­ti, reikia patirties.

Pag­rin­di­nis klausimas, į kurį reikia atsakyti, yra tai, kaip šie objektai yra susiję tar­pu­sa­vy­je. Čia turime at­si­žvelg­ti į abiejų krypčių ryšį ir atskirti vie­naskai­tą nuo dau­gi­skai­tos. Štai pavyzdys, kuriame naudojami au­to­mo­bi­liai ir jų sa­vi­nin­kai:

  1. Vienas sa­vi­nin­kas gali turėti kelis au­to­mo­bi­lius.
  2. Au­to­mo­bi­lis gali pri­klau­sy­ti tik vienam sa­vi­nin­kui.

Tarp šių dviejų subjektų išryškėjatrys galimi santykių modeliai:

Ryšiai Subjektai Iš kairės Iš dešinės
1:1 santykis Auto:in­di­ka­to­rius Au­to­mo­bi­lis gali turėti tik vieną in­di­ka­to­rių. Posūkio signalas gali pri­klau­sy­ti tik vienam au­to­mo­bi­liui.
1:n santykis Sa­vi­nin­kas:au­to­mo­bi­lis Sa­vi­nin­kas gali turėti kelis au­to­mo­bi­lius. Au­to­mo­bi­lis gali pri­klau­sy­ti tik vienam sa­vi­nin­kui.
m:n santykis Au­to­mo­bi­lis:gatvė Au­to­mo­bi­lis gali važiuoti keliais keliais. Vienu keliu gali važiuoti keli au­to­mo­bi­liai.

Įdiegti produktus

Pir­miau­sia sukursime produktų lentelę. Tam turime apibrėžti schemą, įvesti duomenų įrašus ir, bandymo tikslais, atlikti keletą paprastų užklausų.

Apibrėžti schemą

Pag­rin­di­nė SQL komanda, skirta duomenų bazių lentelių api­brė­ži­mui, yra CREATE TABLE. Ši komanda leidžia sukurti lentelę su pa­va­di­ni­mu ir nurodyti stulpelių savybes. Tuo pačiu metu api­brė­žia­mi duomenų tipai ir, jei reikia, saugotinų verčių ap­ri­bo­ji­mai:

DROP TABLE IF EXISTS Products;
CREATE TABLE Products ( product_id int, product_name text, stocked int, price int );
sql
Note

Prieš api­brėž­da­mi lentelę, naudojame komandą „DROP TABLE IF EXISTS“. Tai pašalina bet kokią esamą lentelę ir leidžia tą patį SQL kodą vykdyti keletą kartų be klaidų pranešimų.

Pridėti duomenų rinkinius

Dabar sukursime keletą bandomųjų įrašų. Lau­ke­liams užpildyti naudosime SQL komandą INSERT INTO bei funkciją 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

Apibrėžti užklausas

Norėdami pa­tik­rin­ti lentelės „Products“ būseną, pa­ra­šy­si­me paprastą užklausą. Naudosime komandą SELECT FROM ir išvesime visą lentelę:

SELECT * FROM Products;
sql

Dabar pa­ra­šy­si­me šiek tiek su­dė­tin­ges­nį užklausą, kuri ap­skai­čiuos bendrą turimų prekių vertę:

SELECT product_name AS 'Name', (stocked * price) AS 'Value' FROM Products;
sql

Įdiegti pa­pil­do­mas lenteles

Toliau sukursime likusias rei­ka­lin­gas lenteles. Atliksime tuos pačius veiksmus, kuriuos atlikome kurdami lentelę „Products“. Pir­miau­sia sukursime lentelę „Customers“:

DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers ( customer_id int, customer_name text, contact text );
sql

Tada įvedame dviejų pa­vyz­di­nių klientų duomenų įrašus:

INSERT INTO Customers VALUES (100, 'EDC Customer', 'ED@example.com');
INSERT INTO Customers VALUES (200, 'WVU Customer', 'WV@example.com');
sql

Norėdami pa­tik­rin­ti, ar viskas pavyko, išvesime klientų lentelę:

SELECT * FROM Customers;
sql

Kitas žingsnis – sukurti lentelę „Užsakymai“:

DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders ( order_id int, customer_id int, order_date text );
sql

Dabar įvesime tris pa­vyz­di­nius pirkimo užsakymus. Pirmąjį įrašo lauką pri­skir­si­me kaip pirminį raktą. Antrasis laukas skirtas esamų klientų ID, kurie veikia kaip išoriniai raktai. Tada įrašome užsakymo datą:

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

Norėdami tai pa­tik­rin­ti, įvesime šiuos komandas:

SELECT * FROM Orders;
sql

Ga­liau­siai mums reikia lentelės, kurioje būtų nurodyti užsakyme esantys produktai ir jų kiekis. Tai yra m:n ryšys, nes viename užsakyme gali būti keli produktai, o vienas produktas gali būti įtrauktas į kelis užsakymus. Sukursime lentelę, kurioje užsakymų ir produktų ID bus naudojami kaip užsienio raktų:

DROP TABLE IF EXISTS OrderItems;
CREATE TABLE OrderItems ( orderitem_id int, order_id int, product_id int, count int );
sql

Dabar įvesime keletą užsakytų prekių. Pa­si­rink­si­me užsakymų ir prekių iden­ti­fi­ka­to­rius taip, kad viename užsakyme būtų dvi prekės, o kitame – tik viena prekė:

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

Norėdami tai pa­tik­rin­ti, išduosime užsakytus produktus:

SELECT * FROM OrderItems;
sql

Rašyti su­dė­tin­gus už­klau­si­mus

Jei iki šiol įvykdėte visus pateiktus kodo frag­men­tus, tu­rė­tu­mė­te suprasti mūsų ban­do­mo­sios duomenų bazės struktūrą. Dabar pereikime prie su­dė­tin­ges­nių užklausų, kurios parodo SQL galimybes. Pir­miau­sia pa­ra­šy­ki­me užklausą, kuri sujungia keliose lentelėse iš­si­bars­čiu­sius duomenis. Naudosime SQL JOIN komandą, kad su­jung­tu­me lenteles, kuriose yra klientų duomenys ir užsakymai. Tai darydami, pa­va­din­si­me stul­pe­lius ir nu­sta­ty­si­me ati­tin­ka­mą kliento ID kaip JOIN sąlygą. Atminkite, kad naudojame kva­li­fi­kuo­tus iden­ti­fi­ka­to­rius, kad at­skir­tu­me dviejų lentelių stul­pe­lius:

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

Dabar pa­nau­do­si­me kitą „JOIN“ komandą, kad ap­skai­čiuo­tu­me užsakytų produktų bendrą kainą:

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
Go to Main Menu