Išmokite SQL – pamoka su kodavimo pavyzdžiais
SQL sintaksė grindžiama reliacinės algebros principais, todėl ši programavimo kalba skiriasi nuo kitų kalbų. Susipažinimas su sintakse per praktinius pavyzdžius gali padėti jums veiksmingai išmokti SQL.
Kas yra SQL sintaksė?
Programavimo srityje sintaksė reiškia tai, kaip rašoma programavimo kalba. Sintaksė apibrėžia pagrindines kodo struktūras ir tai, kaip jas sujungti. Sintaksės supratimas yra pagrindinė sąlyga, norint skaityti ir rašyti kodą programavimo kalbomis.
Svarbiausios SQL sintaksės konstrukcijos yra SQL teiginiai, kurie taip pat gali apimti sąlygas. Abiejų šių elementų dažnai vadinama „SQL komandomis“, nors techniniu požiūriu tai nėra visiškai tikslu. Tačiau tai nėra vienintelės SQL sintaksės konstrukcijos. Toliau pateiktoje lentelėje rasite SQL sintaksės konstrukcijų apžvalgą.
| SQL terminas | Paaiškinimas | Pavyzdys |
|---|---|---|
| Teiginys | Nurodo DBVS atlikti veiksmą; baigiasi kabliataškiu | CREATE TABLE People;
|
| Sąlyga | Keičia teiginį; gali būti naudojama tik teiginiuose | WHERE, HAVING
|
| Išraiška | Vertinant grąžina reikšmę | 6 * 7
|
| Identifikatorius | Duomenų bazės objekto, kintamojo ar procedūros pavadinimas; gali būti kvalifikuotas arba nekvalifikuotas | dbname.tablename / tablename
|
| Predikatas | Išraiška, kurios vertė yra TRUE, FALSE arba UNKNOWN
|
Age < 42
|
| Užklausa | Specialusis 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'
|
| Komentaras | Naudojama SQL kodui komentuoti; RDBMS ignoruoja | -- Comment up to end of line / /*multiline comment if necessary*/
|
SQL komandos, pavyzdžiui, SELECT ir CREATE TABLE, paprastai rašomos didžiosiomis raidėmis. Tačiau SQL neatsižvelgia į didžiųjų ir mažųjų raidžių skirtumą. Komandų rašymas didžiosiomis raidėmis yra tik plačiai taikoma praktika.
Kaip vykdomas SQL kodas?
SQL kodas saugomas kaip šaltinio kodas tekstiniuose failuose. Kodas įgyja gyvybę tik tinkamoje vykdymo aplinkoje. Šaltinio kodą nuskaito SQL interpretatorius ir paverčia RDBVS veiksmais. Čia yra du pagrindiniai metodai:
1. Interaktyvus SQL kodo vykdymasŠiuo būdu SQL kodas įvedamas arba įklijuojamas tiesiai į teksto langą. SQL kodas yra vykdomas, o rezultatas rodomas ekrane. Galite pakoreguoti kodą ir vėl jį vykdyti. Dėl greitos kodų redagavimo ir rezultatų rodymo sekos šis būdas geriausiai 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, atsiliepimas vartotojui siunčiamas tik vykdymo pabaigoje. Šis metodas labiausiai tinka procesų automatizavimui ir MySQL duomenų bazių atsarginių kopijų importavimui naudojant MySQL dump.
| Sąsaja | Aprašymas | Pavyzdžiai |
|---|---|---|
| Komandinės eilutės sąsaja (CLI) | Tekstinė sąsaja; įvedamas ir vykdomas SQL kodas, rezultatas rodomas tekstu | mysql, psql, mysqlsh |
| Grafinė vartotojo sąsaja (GUI) | SQL kodas įvedamas teksto lange ir (arba) generuojamas reaguojant į vartotojo veiksmus; SQL kodas vykdomas, rezultatas rodomas lentelių pavidalu | phpMyAdmin, MySQL Workbench, HeidiSQL |
| Programavimo sąsaja (API) | Leidžia tiesiogiai bendrauti su RDBMS; SQL kodas įtraukiamas ir vykdomas kaip eilutė programavimo kalbos kode; rezultatai pateikiami kaip duomenų struktūros tolesniam naudojimui | PHP duomenų objektai (PDO), Connector/J (Java), Connector/Python, C API |
Kaip sukurti produktų valdymo sistemą naudojant SQL
Paprasčiausias būdas išmokti programavimo kalbą – pačiam rašyti ir vykdyti kodą. Šiame pamokiniame vadove sukursime mini duomenų bazę ir atliksime užklausas. Tam pasinaudosime internetiniu SQL interpretatoriumi, esančiu svetainėje sql.js. Norėdami atlikti užduotis, eikite į šią svetainę ir pakeiskite ten jau įvestą SQL kodą mūsų pavyzdžių kodu. Vykdykite kodą po vieną eilutę, kad būtų rodomi rezultatai.
Sukurti SQL duomenų bazę
Šiame pavyzdyje kursime komercinę prekių valdymo sistemą parduotuvei. Štai kokie yra reikalavimai:
- 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ų.
- Kiekvienam užsakymui mes saugome užsakymo datą ir užsakymą pateikusio asmens duomenis, taip pat užsakytus produktus ir užsakytą kiekį.
Šie reikalavimai paverčiami abstrakčiu aprašymu, o vėliau – SQL kodu:
- Sukurti modelį
- Apibrėžti schemą
- Įvesti duomenų įrašus
- Apibrėžti užklausas
Sukurti objektų ir ryšių modelį
Pirmasis etapas vyksta ant popieriaus arba naudojant specialias modeliavimo priemones. Renkame informaciją apie modeliuojamą sistemą , kad nustatytume objektus ir ryšius. Šis etapas dažnai įgyvendinamas 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. Kiekvienam objektui reikalinga atskira lentelė. Dėl reliacinio modelio ypatumų, siekiant modeliuoti ryšius, pridedamos papildomos lentelės. Norint tai suprasti ir tinkamai įgyvendinti, reikia patirties.
Pagrindinis klausimas, į kurį reikia atsakyti, yra tai, kaip šie objektai yra susiję tarpusavyje. Čia turime atsižvelgti į abiejų krypčių ryšį ir atskirti vienaskaitą nuo daugiskaitos. Štai pavyzdys, kuriame naudojami automobiliai ir jų savininkai:
- Vienas savininkas gali turėti kelis automobilius.
- Automobilis gali priklausyti tik vienam savininkui.
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:indikatorius | Automobilis gali turėti tik vieną indikatorių. | Posūkio signalas gali priklausyti tik vienam automobiliui. |
| 1:n santykis | Savininkas:automobilis | Savininkas gali turėti kelis automobilius. | Automobilis gali priklausyti tik vienam savininkui. |
| m:n santykis | Automobilis:gatvė | Automobilis gali važiuoti keliais keliais. | Vienu keliu gali važiuoti keli automobiliai. |
Įdiegti produktus
Pirmiausia sukursime produktų lentelę. Tam turime apibrėžti schemą, įvesti duomenų įrašus ir, bandymo tikslais, atlikti keletą paprastų užklausų.
Apibrėžti schemą
Pagrindinė SQL komanda, skirta duomenų bazių lentelių apibrėžimui, yra CREATE TABLE. Ši komanda leidžia sukurti lentelę su pavadinimu ir nurodyti stulpelių savybes. Tuo pačiu metu apibrėžiami duomenų tipai ir, jei reikia, saugotinų verčių apribojimai:
DROP TABLE IF EXISTS Products;
CREATE TABLE Products ( product_id int, product_name text, stocked int, price int );sqlPrieš apibrėždami 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šų. Laukeliams 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);sqlApibrėžti užklausas
Norėdami patikrinti lentelės „Products“ būseną, parašysime paprastą užklausą. Naudosime komandą SELECT FROM ir išvesime visą lentelę:
SELECT * FROM Products;sqlDabar parašysime šiek tiek sudėtingesnį užklausą, kuri apskaičiuos bendrą turimų prekių vertę:
SELECT product_name AS 'Name', (stocked * price) AS 'Value' FROM Products;sqlĮdiegti papildomas lenteles
Toliau sukursime likusias reikalingas lenteles. Atliksime tuos pačius veiksmus, kuriuos atlikome kurdami lentelę „Products“. Pirmiausia sukursime lentelę „Customers“:
DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers ( customer_id int, customer_name text, contact text );sqlTada įvedame dviejų pavyzdinių klientų duomenų įrašus:
INSERT INTO Customers VALUES (100, 'EDC Customer', 'ED@example.com');
INSERT INTO Customers VALUES (200, 'WVU Customer', 'WV@example.com');sqlNorėdami patikrinti, ar viskas pavyko, išvesime klientų lentelę:
SELECT * FROM Customers;sqlKitas žingsnis – sukurti lentelę „Užsakymai“:
DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders ( order_id int, customer_id int, order_date text );sqlDabar įvesime tris pavyzdinius pirkimo užsakymus. Pirmąjį įrašo lauką priskirsime 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');sqlNorėdami tai patikrinti, įvesime šiuos komandas:
SELECT * FROM Orders;sqlGaliausiai 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 );sqlDabar įvesime keletą užsakytų prekių. Pasirinksime užsakymų ir prekių identifikatorius 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);sqlNorėdami tai patikrinti, išduosime užsakytus produktus:
SELECT * FROM OrderItems;sqlRašyti sudėtingus užklausimus
Jei iki šiol įvykdėte visus pateiktus kodo fragmentus, turėtumėte suprasti mūsų bandomosios duomenų bazės struktūrą. Dabar pereikime prie sudėtingesnių užklausų, kurios parodo SQL galimybes. Pirmiausia parašykime užklausą, kuri sujungia keliose lentelėse išsibarsčiusius duomenis. Naudosime SQL JOIN komandą, kad sujungtume lenteles, kuriose yra klientų duomenys ir užsakymai. Tai darydami, pavadinsime stulpelius ir nustatysime atitinkamą kliento ID kaip JOIN sąlygą. Atminkite, kad naudojame kvalifikuotus identifikatorius, kad atskirtume dviejų lentelių stulpelius:
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;sqlDabar panaudosime kitą „JOIN“ komandą, kad apskaičiuotume 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