Iemācies SQL – apmācība ar programmēšanas piemēriem
SQL sintakse balstās uz relatīvo algebru, kas šo programmēšanas valodu atšķir no citām valodām. Iepazīstoties ar sintaksi, izmantojot praktiskus piemērus, jūs varat efektīvi apgūt SQL.
Kas ir SQL sintakse?
Programmēšanā sintakse attiecas uz to, kā tiek rakstīta programmēšanas valoda. Sintakse nosaka koda pamatelementus un to savienošanas veidu. Sintakses izpratne ir pamatprasība, lai varētu lasīt un rakstīt kodu programmēšanas valodās.
Svarīgākās sintakses konstrukcijas 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 konstrukcijas. Zemāk atrodas tabula, kas sniedz pārskatu par SQL sintakses konstrukcijām.
| SQL termins | Paskaidrojums | Piemērs |
|---|---|---|
| Teikums | Norāda DBMS veikt darbību; beidzas ar semikolu | CREATE TABLE People;
|
| Klausula | Modificē teikumu; var parādīties tikai teikumos | WHERE, HAVING
|
| Izteiksme | Atgriež vērtību, to izvērtējot | 6 * 7
|
| Identifikators | Datu bāzes objekta, mainīgā vai procedūras nosaukums; var būt kvalificēts vai nekvalificēts | dbname.tablename / tablename
|
| Predikāts | Izteiksme, kuras vērtība ir TRUE, FALSE vai UNKNOWN
|
Age < 42
|
| Vaicājums | Īpaša instrukcija; 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*/
|
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 rakstīšana 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 interpretators un pārvērš RDBMS darbībās. Šajā gadījumā ir divas pamatpieejas:
1. SQL koda interaktī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 parādīšana padara šo pieeju vispiemērotā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 nepieciešams, atgriezeniskā saite tiek nosūtīta lietotājam tikai izpildes beigās. Šī pieeja ir vispiemērotākā procesu automatizēšanai un MySQL datubāzes dublējumu importēšanai ar MySQL dump.
| Saskarnes | Apraksts | Piemēri |
|---|---|---|
| Komandrindas interfeiss (CLI) | Teksta interfeiss; 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ā | phpMyAdmin, MySQL Workbench, HeidiSQL |
| Lietojumprogrammu programmēšanas interfeiss (API) | Ļauj tieši sazināties ar RDBMS; SQL kods tiek iekļauts un izpildīts kā virkne programmēšanas valodas kodā; rezultāti ir pieejami kā datu struktūras turpmākai izmantošanai | PHP Data Objects (PDO), Connector/J (Java), Connector/Python, C API |
Kā izveidot produktu pārvaldības sistēmu, izmantojot SQL
Vienkāršākais veids, kā apgūt programmēšanas valodu, ir pašam rakstīt un izpildīt kodu. Šajā apmācībā mēs izveidosim nelielu datu bāzi un izpildīsim tajā vaicājumus. Lai to izdarītu, izmantosim tiešsaistes SQL interpretatoru no vietnes sql.js. Lai sekotu līdzi apmācībai, dodieties uz šo vietni un aizstājiet jau ievadīto SQL kodu ar kodu no mūsu piemēriem. Izpildiet kodu pa daļām, lai redzētu rezultātus.
Izveidot SQL datubāzi
Šajā piemērā mēs izveidosim komerciālu produktu pārvaldī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 patērētāju.
- Klientu veiktajos pasūtījumos var būt vairāki produkti.
- Par katru pasūtījumu mēs uzglabājam pasūtījuma datumu un pasūtītāja datus, kā arī pasūtītos produktus un pasūtīto daudzumu.
Šīs prasības tiek pārvērstas abstraktā aprakstā un pēc tam SQL kodā:
- Izveidot modeli
- Definēt shēmu
- Ievadiet datu ierakstus
- Definēt vaicājumus
Izveidot entītiju un attiecību modeli
Pirmais solis tiek veikts uz papīra vai ar speciālu modelēšanas rīku palīdzību. Mēs apkopojam informāciju par modelējamo sistēmu, lai noteiktu objektus un to savstarpē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ārvaldības sistēmas piemērā entītijas ir produkti, klienti un pasūtījumi. Katrai entītijai ir nepieciešama atsevišķa tabula. Relacionālā modeļa īpatnību dēļ tiek pievienotas papildu tabulas, lai modelētu savstarpējās saistības. Lai to saprastu un pareizi īstenotu, ir nepieciešama pieredze.
Galvenais jautājums, uz kuru jāatrod atbilde, ir tas, kā šīs vienības ir savstarpēji saistītas. Šeit mums jāņem vērā abas attiecību virzienu puses un jānošķir vienskaitlis no daudzskaitļa. Lūk, piemērs, kurā izmantotas automašīnas un to īpašnieki:
- Vienam īpašniekam var piederēt vairākas automašīnas.
- Automašīna var piederēt tikai vienam īpašniekam.
Starp abām vienībām izkristalizējastrīs iespējamie attiecību modeļi:
| Saistība | Objekti | No kreisās puses | No labās puses |
|---|---|---|---|
| 1:1 attiecība | Auto:indikators | Automašīnai var būt tikai viens indikators. | Indikators var piederēt tikai vienai automašīnai. |
| 1:n attiecība | Īpašnieks:automobilis | Vienam īpašniekam var būt vairākas automašīnas. | Automašīna var piederēt tikai vienam īpašniekam. |
| m:n attiecība | Automašīna:iela | Automašīna var braukt pa vairākiem ceļiem. | Vienā ceļā var braukt vairākas automašīnas. |
Ieviest produktus
Vispirms izveidosim produktu tabulu. Lai to izdarītu, mums jādefinē shēma, jāievada datu ieraksti un, lai pārbaudītu, jāizpilda daži vienkārši vaicājumi.
Definēt shēmu
Galvenā SQL komanda datu bāzes tabulu definēšanai ir CREATE TABLE. Šī komanda ļauj izveidot tabulu ar nosaukumu un norādīt kolonnu īpašības. Vienlaikus tiek definēti datu tipi un, ja nepieciešams, ierobežojumi attiecībā uz saglabājamiem vērtībām:
DROP TABLE IF EXISTS Products;
CREATE TABLE Products ( product_id int, product_name text, stocked int, price int );sqlPirms tabulas definēšanas mēs izmantojam 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 izveidosim dažus testa ierakstus. Lai aizpildītu laukus, izmantosim 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);sqlDefinēt vaicājumus
Lai pārbaudītu tabulas „Products“ stāvokli, mēs izveidosim vienkāršu vaicājumu. Mēs izmantosim komandu SELECT FROM un izvadīsim visu tabulu:
SELECT * FROM Products;sqlTagad mēs izveidosim nedaudz sarežģītāku vaicājumu, kas aprēķina kopējo vērtību produktiem, kas mums ir noliktavā:
SELECT product_name AS 'Name', (stocked * price) AS 'Value' FROM Products;sqlIeviest papildu tabulas
Tālāk izveidosim pārējās nepieciešamās tabulas. Rīkosimies tāpat kā izveidojot tabulu „Products“. Vispirms izveidosim tabulu „Customers“:
DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers ( customer_id int, customer_name text, contact text );sqlTad mēs ievadām datu ierakstus par diviem paraugklientiem:
INSERT INTO Customers VALUES (100, 'EDC Customer', 'ED@example.com');
INSERT INTO Customers VALUES (200, 'WVU Customer', 'WV@example.com');sqlLai pārbaudītu, vai tas ir izdevies, mēs izvadīsim klientu tabulu:
SELECT * FROM Customers;sqlNākamais solis ir izveidot tabulu „Orders“:
DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders ( order_id int, customer_id int, order_date text );sqlTagad ievadīsim trīs parauga pirkuma pasūtījumus. Ierakstu pirmajai vērtībai piešķirsim ID kā primāro atslēgu. Otrā vērtība ir esošo klientu ID, kas darbojas kā ārējās atslēgas. Tad saglabāsim pasūtījuma 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');sqlLai to pārbaudītu, mēs izpildīsim šādus rīkojumus:
SELECT * FROM Orders;sqlVisbeidzot, mums ir nepieciešama tabula, kurā būtu uzskaitīti pasūtījumā iekļautie produkti kopā ar to daudzumu. Šī ir m:n attiecība, jo vienā pasūtījumā var būt vairāki produkti, un viens produkts var būt iekļauts vairākos pasūtījumos. Izveidosim tabulu, kurā pasūtījumu un produktu identifikatori 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 );sqlTagad ievadīsim dažus pasūtītos produktus. Izvēlēsimies pasūtījumu un produktu identifikatorus tā, lai būtu viens pasūtījums ar diviem produktiem un vēl viens pasū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);sqlLai to pārbaudītu, mēs izsniegsim pasūtītos produktus:
SELECT * FROM OrderItems;sqlVeidot sarežģītus vaicājumus
Ja esat izpildījuši visus līdz šim parādītos koda fragmentus, jums vajadzētu saprast mūsu testa datu bāzes struktūru. Tagad pievērsīsimies sarežģītākiem vaicājumiem, kas parāda SQL iespējas. Vispirms izveidosim vaicājumu, kas apvieno datus, kuri ir izkliedēti pa vairākām tabulām. Mēs izmantosim SQL JOIN komandu, lai apvienotu tabulas, kurās ir klientu dati un pasūtījumi. To darot, mēs nosauksim kolonnas un kā JOIN nosacījumu iestatīsim atbilstošu klienta ID. Ņemiet vērā, ka mēs izmantojam kvalificētus identifikatorus, 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;sqlTagad izmantosim vēl vienu JOIN komandu, lai aprēķinā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