SQL sintakse balstās uz relatīvo algebru, kas šo prog­ram­mē­ša­nas valodu atšķir no citām valodām. Ie­pa­zīs­to­ties ar sintaksi, iz­man­to­jot prak­tis­kus piemērus, jūs varat efektīvi apgūt SQL.

Kas ir SQL sintakse?

Prog­ram­mē­ša­nā sintakse attiecas uz to, kā tiek rakstīta prog­ram­mē­ša­nas valoda. Sintakse nosaka koda pa­ma­te­le­men­tus un to sa­vie­no­ša­nas veidu. Sintakses izpratne ir pa­mat­pra­sī­ba, lai varētu lasīt un rakstīt kodu prog­ram­mē­ša­nas valodās.

Sva­rī­gā­kās sintakses kons­truk­ci­jas SQL ir SQL teikumi, kuros var būt arī klauzulas. Abas šīs vienības parasti dēvē par „SQL komandām“, lai gan no tehniskā viedokļa tas nav pilnīgi precīzi. Tomēr tās nav vienīgās SQL sintakses kons­truk­ci­jas. Zemāk atrodas tabula, kas sniedz pārskatu par SQL sintakses kons­truk­ci­jām.

SQL termins Pa­skaid­ro­jums Piemērs
Teikums Norāda DBMS veikt darbību; beidzas ar semikolu CREATE TABLE People;
Klausula Modificē teikumu; var pa­rā­dī­ties tikai teikumos WHERE, HAVING
Izteiksme Atgriež vērtību, to iz­vēr­tē­jot 6 * 7
Iden­ti­fi­ka­tors Datu bāzes objekta, mainīgā vai pro­ce­dū­ras nosaukums; var būt kva­li­fi­cēts vai ne­kva­li­fi­cēts dbname.tablename / tablename
Predikāts Izteiksme, kuras vērtība ir TRUE, FALSE vai UNKNOWN Age < 42
Vaicājums Īpaša ins­truk­ci­ja; atgriež atrasto ierakstu kopu SELECT Name FROM People WHERE Age < 42;
Funkcija Apstrādā vienu vai vairākas vērtības; parasti izveido jaunu vērtību UPPER('text') -- returns 'TEXT'
Komentārs Izmanto, lai komentētu SQL kodu; RDBMS to ignorē -- Comment up to end of line / /*multiline comment if necessary*/
Note

SQL komandas, piemēram, SELECT un CREATE TABLE, parasti raksta ar lielajiem burtiem. Tomēr SQL neņem vērā lielos un mazos burtus. Komandu rak­stī­ša­na ar lielajiem burtiem ir vienkārši plaši izplatīta prakse.

Kā tiek izpildīts SQL kods?

SQL kods pastāv kā avota kods teksta failos. Kods sāk darboties tikai piemērotā izpildes vidē. Avota kodu nolasa SQL in­ter­pre­ta­tors un pārvērš RDBMS darbībās. Šajā gadījumā ir divas pa­mat­piee­jas:

1. SQL koda in­te­rak­tī­va izpildeŠajā pieejā SQL kods tiek ievadīts vai kopēts tieši teksta logā. SQL kods tiek izpildīts, un tiek parādīts rezultāts. Jūs varat pielāgot kodu un izpildīt to atkārtoti. Ātrā koda apstrāde un rezultātu pa­rā­dī­ša­na padara šo pieeju vis­pie­mē­ro­tā­ko sarežģītu vaicājumu apguvei un izveidei. 2. SQL koda izpilde kāskripts Šajā pieejā viss avota koda fails, kas satur SQL kodu, tiek izpildīts rindu pa rindai. Ja ne­pie­cie­šams, at­grie­ze­nis­kā saite tiek nosūtīta lie­to­tā­jam tikai izpildes beigās. Šī pieeja ir vis­pie­mē­ro­tā­kā procesu au­to­ma­ti­zē­ša­nai un MySQL datubāzes dublējumu im­por­tē­ša­nai ar MySQL dump.

Saskarnes Apraksts Piemēri
Ko­man­drin­das in­ter­feiss (CLI) Teksta in­ter­feiss; tiek ievadīts un izpildīts SQL kods, rezultāts tiek parādīts tekstā mysql, psql, mysqlsh
Grafiskā lietotāja saskarne (GUI) SQL kods tiek ievadīts teksta logā un/vai ģenerēts atbildē uz lietotāja darbībām; SQL kods tiek izpildīts, rezultāts tiek parādīts tabulu veidā phpMyAd­min, MySQL Workbench, HeidiSQL
Lie­to­jum­prog­ram­mu prog­ram­mē­ša­nas in­ter­feiss (API) Ļauj tieši sa­zi­nā­ties ar RDBMS; SQL kods tiek iekļauts un izpildīts kā virkne prog­ram­mē­ša­nas valodas kodā; rezultāti ir pieejami kā datu struk­tū­ras turpmākai iz­man­to­ša­nai PHP Data Objects (PDO), Connector/J (Java), Connector/Python, C API

Kā izveidot produktu pār­val­dī­bas sistēmu, iz­man­to­jot SQL

Vien­kār­šā­kais veids, kā apgūt prog­ram­mē­ša­nas valodu, ir pašam rakstīt un izpildīt kodu. Šajā apmācībā mēs iz­vei­do­sim nelielu datu bāzi un iz­pil­dī­sim tajā vai­cā­ju­mus. Lai to izdarītu, iz­man­to­sim tiešsais­tes SQL in­ter­pre­ta­to­ru no vietnes sql.js. Lai sekotu līdzi apmācībai, dodieties uz šo vietni un aiz­stā­jiet jau ievadīto SQL kodu ar kodu no mūsu piemēriem. Izpildiet kodu pa daļām, lai redzētu re­zul­tā­tus.

Izveidot SQL datubāzi

Šajā piemērā mēs iz­vei­do­sim ko­mer­ciā­lu produktu pār­val­dī­bas sistēmu veikalam. Šādas ir prasības:

  • Mums ir vairāki produkti, un katra produkta krājumā ir noteikts daudzums.
  • Mūsu klientu lokā ir daudz klientu un pa­tē­rē­tā­ju.
  • Klientu veiktajos pa­sū­tī­ju­mos var būt vairāki produkti.
  • Par katru pa­sū­tī­ju­mu mēs uz­gla­bā­jam pa­sū­tī­ju­ma datumu un pa­sū­tī­tā­ja datus, kā arī pasūtītos produktus un pasūtīto daudzumu.

Šīs prasības tiek pār­vēr­stas abstraktā aprakstā un pēc tam SQL kodā:

  1. Izveidot modeli
  2. Definēt shēmu
  3. Ievadiet datu ierakstus
  4. Definēt vai­cā­ju­mus

Izveidot entītiju un attiecību modeli

Pirmais solis tiek veikts uz papīra vai ar speciālu mo­de­lē­ša­nas rīku palīdzību. Mēs apkopojam in­for­mā­ci­ju par mo­de­lē­ja­mo sistēmu, lai noteiktu objektus un to sav­star­pē­jās saiknes. Šis solis bieži tiek attēlots kā objektu-saikņu (ER) diagramma.

Kādas ir entītijas un kā tās ir saistītas? Entītijas ir objektu grupas. Mūsu produktu pār­val­dī­bas sistēmas piemērā entītijas ir produkti, klienti un pa­sū­tī­ju­mi. Katrai entītijai ir ne­pie­cie­ša­ma atsevišķa tabula. Re­la­cio­nā­lā modeļa īpatnību dēļ tiek pie­vie­no­tas papildu tabulas, lai modelētu sav­star­pē­jās saistības. Lai to saprastu un pareizi īstenotu, ir ne­pie­cie­ša­ma pieredze.

Galvenais jautājums, uz kuru jāatrod atbilde, ir tas, kā šīs vienības ir sav­star­pē­ji saistītas. Šeit mums jāņem vērā abas attiecību virzienu puses un jānošķir vien­skait­lis no daudz­skait­ļa. Lūk, piemērs, kurā iz­man­to­tas au­to­ma­šī­nas un to īpašnieki:

  1. Vienam īpaš­nie­kam var piederēt vairākas au­to­ma­šī­nas.
  2. Au­to­ma­šī­na var piederēt tikai vienam īpaš­nie­kam.

Starp abām vienībām iz­kris­ta­li­zē­jastrīs ie­spē­ja­mie attiecību modeļi:

Saistība Objekti No kreisās puses No labās puses
1:1 attiecība Auto:in­di­ka­tors Au­to­ma­šī­nai var būt tikai viens in­di­ka­tors. In­di­ka­tors var piederēt tikai vienai au­to­ma­šī­nai.
1:n attiecība Īpašnieks:au­to­mo­bi­lis Vienam īpaš­nie­kam var būt vairākas au­to­ma­šī­nas. Au­to­ma­šī­na var piederēt tikai vienam īpaš­nie­kam.
m:n attiecība Au­to­ma­šī­na:iela Au­to­ma­šī­na var braukt pa vairākiem ceļiem. Vienā ceļā var braukt vairākas au­to­ma­šī­nas.

Ieviest produktus

Vispirms iz­vei­do­sim produktu tabulu. Lai to izdarītu, mums jādefinē shēma, jāievada datu ieraksti un, lai pār­bau­dī­tu, jāizpilda daži vienkārši vaicājumi.

Definēt shēmu

Galvenā SQL komanda datu bāzes tabulu de­fi­nē­ša­nai ir CREATE TABLE. Šī komanda ļauj izveidot tabulu ar nosaukumu un norādīt kolonnu īpašības. Vien­lai­kus tiek definēti datu tipi un, ja ne­pie­cie­šams, ie­ro­be­žo­ju­mi attiecībā uz sa­gla­bā­ja­miem vērtībām:

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

Pirms tabulas de­fi­nē­ša­nas mēs iz­man­to­jam komandu DROP TABLE IF EXISTS. Tas noņem jebkuru esošo tabulu un ļauj vienu un to pašu SQL kodu izpildīt vairākas reizes, neradot kļūdu ziņojumus.

Pievienot datu kopas

Tagad iz­vei­do­sim dažus testa ierakstus. Lai aiz­pil­dī­tu laukus, iz­man­to­sim SQL komandu INSERT INTO, kā arī funkciju 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

Definēt vai­cā­ju­mus

Lai pār­bau­dī­tu tabulas „Products“ stāvokli, mēs iz­vei­do­sim vienkāršu vaicājumu. Mēs iz­man­to­sim komandu SELECT FROM un izvadīsim visu tabulu:

SELECT * FROM Products;
sql

Tagad mēs iz­vei­do­sim nedaudz sa­rež­ģī­tā­ku vaicājumu, kas aprēķina kopējo vērtību pro­duk­tiem, kas mums ir noliktavā:

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

Ieviest papildu tabulas

Tālāk iz­vei­do­sim pārējās ne­pie­cie­ša­mās tabulas. Rī­ko­si­mies tāpat kā iz­vei­do­jot tabulu „Products“. Vispirms iz­vei­do­sim tabulu „Customers“:

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

Tad mēs ievadām datu ierakstus par diviem pa­raugklien­tiem:

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

Lai pār­bau­dī­tu, vai tas ir izdevies, mēs izvadīsim klientu tabulu:

SELECT * FROM Customers;
sql

Nākamais solis ir izveidot tabulu „Orders“:

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

Tagad ievadīsim trīs parauga pirkuma pa­sū­tī­ju­mus. Ierakstu pirmajai vērtībai pie­šķir­sim ID kā primāro atslēgu. Otrā vērtība ir esošo klientu ID, kas darbojas kā ārējās atslēgas. Tad sa­gla­bā­sim pa­sū­tī­ju­ma datumu:

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

Lai to pār­bau­dī­tu, mēs iz­pil­dī­sim šādus rīkojumus:

SELECT * FROM Orders;
sql

Vis­bei­dzot, mums ir ne­pie­cie­ša­ma tabula, kurā būtu uz­skai­tī­ti pa­sū­tī­ju­mā iekļautie produkti kopā ar to daudzumu. Šī ir m:n attiecība, jo vienā pa­sū­tī­ju­mā var būt vairāki produkti, un viens produkts var būt iekļauts vairākos pa­sū­tī­ju­mos. Iz­vei­do­sim tabulu, kurā pa­sū­tī­ju­mu un produktu iden­ti­fi­ka­to­ri tiks izmantoti kā ārējās atslēgas:

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

Tagad ievadīsim dažus pasūtītos produktus. Iz­vē­lē­si­mies pa­sū­tī­ju­mu un produktu iden­ti­fi­ka­to­rus tā, lai būtu viens pa­sū­tī­jums ar diviem pro­duk­tiem un vēl viens pa­sū­tī­jums ar vienu produktu:

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

Lai to pār­bau­dī­tu, mēs iz­snieg­sim pasūtītos produktus:

SELECT * FROM OrderItems;
sql

Veidot sa­rež­ģī­tus vai­cā­ju­mus

Ja esat iz­pil­dī­ju­ši visus līdz šim parādītos koda frag­men­tus, jums vajadzētu saprast mūsu testa datu bāzes struktūru. Tagad pie­vēr­sī­si­mies sa­rež­ģī­tā­kiem vai­cā­ju­miem, kas parāda SQL iespējas. Vispirms iz­vei­do­sim vaicājumu, kas apvieno datus, kuri ir iz­klie­dē­ti pa vairākām tabulām. Mēs iz­man­to­sim SQL JOIN komandu, lai apvienotu tabulas, kurās ir klientu dati un pa­sū­tī­ju­mi. To darot, mēs nosauksim kolonnas un kā JOIN no­sa­cī­ju­mu ie­sta­tī­sim at­bil­sto­šu klienta ID. Ņemiet vērā, ka mēs iz­man­to­jam kva­li­fi­cē­tus iden­ti­fi­ka­to­rus, lai atšķirtu abu tabulu kolonnas:

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

Tagad iz­man­to­sim vēl vienu JOIN komandu, lai ap­rē­ķi­nā­tu pasūtīto preču kopējās izmaksas:

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