Užklausos sql pasirinkimo užklausa. Transact-SQL – duomenų keitimas ir trynimas
Bet kuri lentelė turi savo loginę pradžią ir loginę pabaigą. Be to, bet kurią lentelę sudaro duomenys, kurie dažnai, o duomenų bazių atveju – didesniu mastu, yra išsklaidyti. Kaip pažymėta pirmame įraše apie SQL ir duomenų bazes, duomenis galima reguliariai pridėti per visą duomenų bazių gyvavimo ciklą. Per šį laiką galima įvesti daugiau nei vieną dešimtį duomenų. SQL, kaip ir visame kitur, ir visuose kompiuterines programas, galite rūšiuoti duomenis. Tai atliekama pagal komandą RŪŠIUOTI PAGAL. Yra du šios komandos argumentai.
- ASC nustato tvarką didėjančia tvarka (nuo mažiausio iki didžiausio)
- DESC – mažėjantis (nuo didžiausio iki mažiausio)
Pabandykime surikiuoti skolininkų lentelę pagal pavardę – stulpelį Vardas – mažėjimo tvarka
Skolininkai
Nr | mėnuo | metų | Vardas | miestas | Adresas | Bauda | Skola |
0001 | liepos mėn | 2012 | Ivanovas | Stavropolis | Stavropolskaja, 1 | 4891.00 | 50000 |
0002 | gruodį | 2019 | Kononovas | totorių | Zagorodnaya, 254 | 19565.00 | 684068 |
0003 | Gegužė | 2013 | Jamšinas | Michailovskas | Kaimas, 48 | 9868.00 | 165840 |
0004 | Rugpjūtis | 2012 | preny | Stavropolis | Centrinis, 16 | 4659.00 | 46580 |
... | ... | ... | ... | ... | ... | ... | ... |
9564 | Kovas | 2015 | Ulijevas | Demino | Tarptautinis, 156 | 6846.00 | 435089 |
9565 | Spalio mėn | 2012 | Pavlova | Stavropolis | Stotis, 37 | 685.00 | 68059 |
9566 | sausio mėn | 2012 | Uryupa | Michailovskas | Fontannaya, 19 m | 1235.00 | 51238 |
9567 | lapkritis | 2017 | Valetovas | totorių | Išeik, 65 | 13698.00 | 789654 |
Vykdyti prašymą
PASIRINKTI*
IŠ skolininkų
UŽSAKYTI PAGAL vardą DESC ;
Skolininkai
Nr | mėnuo | metų | Vardas | miestas | Adresas | Bauda | Skola |
0003 | Gegužė | 2013 | Jamšinas | Michailovskas | Kaimas, 48 | 9868.00 | 165840 |
9566 | sausio mėn | 2012 | Uryupa | Michailovskas | Fontannaya, 19 m | 1235.00 | 51238 |
9564 | Kovas | 2015 | Ulijevas | Demino | Tarptautinis, 156 | 6846.00 | 435089 |
0004 | Rugpjūtis | 2012 | preny | Stavropolis | Centrinis, 16 | 4659.00 | 46580 |
9565 | Spalio mėn | 2012 | Pavlova | Stavropolis | Stotis, 37 | 685.00 | 68059 |
0002 | gruodį | 2019 | Kononovas | totorių | Zagorodnaya, 254 | 19565.00 | 684068 |
0001 | liepos mėn | 2012 | Ivanovas | Stavropolis | Stavropolskaja, 1 | 4891.00 | 50000 |
9567 | lapkritis | 2017 | Valetovas | totorių | Išeik, 65 | 13698.00 | 789654 |
Užsakymas taip pat gali būti atliktas sugrupuotais duomenimis naudojant komandą . Tačiau šiuo atveju komanda ORDER BY užklausoje turėtų būti paskutinė, tai yra
PASIRINKTI*
IŠ skolininkų
GRUPĖ PAGAL vardą
UŽSAKYTI PAGAL vardą DESC ;
Jei užsakytuose laukuose yra langelių su tuščiomis reikšmėmis (NULL), tada, priklausomai nuo programų, dirbančių su duomenų baze, tokios ląstelės gali būti sąrašo pabaigoje arba pradžioje.
Yra dar vienas triukas, kaip atlikti duomenų tvarkymą. Apsvarstykite užklausą
PASIRINKITE numerį, metus, vardą
IŠ skolininkų
UŽSAKYTI IKI 2 DESC ;
Čia du reiškia stulpelio eilės numerį iš eilutės „SELECT Num, Year, Sname“ ir būtent šis stulpelis bus naudojamas reitinguojant mažėjančia tvarka.
Skolininkai
Kaip matote, reikšmės yra surūšiuotos pagal Metų stulpelį, sąrašo pradžioje nurodant naujausią datą.
Taigi, užsakymas SQL turi tokius pačius reitingavimo principus kaip ir bet kurioje kompiuterinėje programoje. Viskas priklauso nuo duomenų bazės administratoriaus ir jo poreikių šiai ar kitai informacijai, kurią jis nori gauti.
SQL – SELECT pareiškimas
Pavadinimas SQL (Structured Query Language) atspindi faktą, kad užklausos yra dažniausiai naudojamas SQL elementas. Užklausa yra sakinys, siunčiantis komandą duomenų bazių valdymo sistemai (DBVS), kad būtų galima manipuliuoti arba rodyti tam tikrą informaciją. Visos duomenų atrankos užklausos SQL yra sukurtos naudojant SELECT sakinį. Tai leidžia atlikti gana sudėtingus patikrinimus ir duomenų apdorojimą.
Užklausa gali rodyti duomenis iš konkretaus stulpelio arba iš visų lentelės stulpelių. Norėdami sukurti paprasčiausią SELECT užklausą, turite nurodyti stulpelio pavadinimą ir lentelės pavadinimą.
SELECT teiginio sintaksė
PASIRINKITE stulpelių_sąrašą FROM lentelės_pavadinimasPASIRINKTI Raktažodis, nurodantis duomenų bazei, kad teiginys yra užklausa. Visos užklausos prasideda šiuo žodžiu, po kurio seka tarpas.
Stulpelių_sąrašas Lentelės stulpelių, kuriuos pasirenka užklausa, sąrašas. Ataskaitoje nenurodyti stulpeliai į rezultatą nebus įtraukti. Jei reikia rodyti visų stulpelių duomenis, galite naudoti sutrumpintą žymėjimą. Žvaigždutė (*) reiškia visą stulpelių sąrašą.
FROM lentelės_pavadinimas Raktinis žodis, kuris turi būti kiekvienoje užklausoje. Po jo yra tarpas, atskirtas lentelės, kuri yra duomenų šaltinis, pavadinimu.
Kodas skliausteliuose yra neprivalomas sakinyje SELECT. Tai būtina norint tiksliau apibrėžti prašymą.
Taip pat būtina pasakyti, kad SQL kodas neskiria didžiųjų ir mažųjų raidžių. Tai reiškia, kad SELECT įrašas gali būti parašytas kaip Select. DBVS neatskirs šių dviejų įrašų, tačiau patariama visus SQL sakinius rašyti didžiosiomis raidėmis, kad būtų galima lengvai atskirti juos nuo kito kodo.
Pažvelkime į pardavėjų lentelę iš klasikinės Martino Graberio SQL mokymo programos pavyzdžių.
Štai MySQL kodas, skirtas sukurti bandymo lentelę:
KURTI LENTELĘ "pardavėjai" ("snum" INTEGER(11) NOT NULL AUTO_INCREMENT, "vardas" VARCHAR(20) COLLATE cp1251_general_ci DEFAULT NULL, "miestas" VARCHAR(20) COLLATE cp1251_DOLEULT,general ) NUMATYTOJI NULIS, PIRMINIS RAKTAS (`snum`))ENGINE=InnoDB CHARACTER SET "cp1251" COLLATE "cp1251_general_ci" COMMENT="InnoDB nemokama: 5120 kB"; ĮTERPITE Į „pardavėjai“ („snum“, „vardas“, „miestas“, „comm“) VERTES (1001 „Peel“, „London“, 0,120), (1002 „Serres“, „San Chosė“, 0,130 ), (1003 "Akselrodas", "Niujorkas", 0,100), (1004 "Motika", "Londonas", 0,110), (1007 "Rifkin", "Barselona", 0,150); ĮSIPAREIGOTI;
Lentelė atrodo taip:
SELECT pareiškimo pavyzdys
1. Būtina rodyti pardavėjų sąrašą ir jų pavadinimus (vardą)
PASIRINKITE vardą IŠ Pardavėjų
Rezultatas:
Čia, po SELECT sakinio, pateikiami rodytini stulpeliai. Stulpelių pavadinimai atskiriami kableliais.3. Būtina rodyti visą lentelę
Norėdami tai padaryti, užklausoms rašyti galite naudoti skirtingą sintaksę. Išvardijame kiekvieną stulpelį po SELECT teiginio:
PASIRINKITE snum , sname , miestą , comm FROM Pardavėjai
Arba galite pasiekti tą patį rezultatą naudodami sutrumpintą užrašą:
PASIRINKTI * IŠ Pardavėjų Rezultatas:
snum | pavardė | miestas | comm |
---|---|---|---|
1001 | Nulupkite | Londonas | 0,12 |
1002 | Serres | San Jose | 0,13 |
1003 | Akselrodas | Niujorkas | 0,1 |
1004 | Motika | Londonas | 0,11 |
1007 | Rifkinas | Barselona | 0,15 |
Bus rodomi 4 stulpeliai, tačiau su tokiu įrašu galite lengvai pakomentuoti nereikalingą stulpelį. Pavyzdžiui taip:
PASIRINKTI /* snum , */ vardas , miestas , komunikacija IŠ pardavėjų
Dabar snum stulpelis nebus rodomas, nes jis komentuojamas. Labai greita ir patogu. Kaip parašyti SQL kodą, žinoma, priklauso nuo jūsų, tačiau žinoti tokius dalykus kartais pravartu.
Išraiškų naudojimas SELECT teiginyje
Daugelis DBVS teikia specialias funkcijas, skirtas tvarkyti užklausų rezultatus. Tokių įrenginių rinkinys skirtingose DBVS skiriasi, tačiau yra keletas standartinių funkcijų, tokių kaip išraiškos. Pavyzdžiui, galbūt norėsite atlikti paprastas matematines operacijas su duomenimis, kad jie būtų patogesni, arba į užklausos rezultatą įterpti papildomo teksto. SQL leidžia tarp pasirinktų stulpelių sudėti skaliarines išraiškas ir konstantas, kurios gali papildyti arba pakeisti stulpelius SELECT sąlygose. Apsvarstykite pavyzdį.
4. Pardavėjų komisinius (comm) būtina rodyti procentais, o ne dešimtainiais skaičiais
PASIRINKITE snum, sname, miestą, comm * 100 FROM pardavėjų
Rezultatas:
snum | pavardė | miestas | comm |
---|---|---|---|
1001 | Nulupkite | Londonas | 12 |
1002 | Serres | San Jose | 13 |
1003 | Akselrodas | Niujorkas | 10 |
1004 | Motika | Londonas | 11 |
1007 | Rifkinas | Barselona | 15 |
Šis stulpelis neturi pavadinimo, nes jame nėra modifikuotų duomenų, todėl jis pavadintas DBVS nuožiūra (pavyzdžiui, MySQL stulpelį pavadina comm * 100, M. Grabberio pavyzdžiuose stulpelis turi pavadinimą 4, y. jos numerį).
Tokiais atvejais patogu naudoti stulpelio pavadinimo. Pavyzdžiui, galite pavadinti paskutinį stulpelį procentais. Norėdami tai padaryti, po stulpelio pavadinimo turite nurodyti raktinį žodį AS, o tada gautame puslapyje stulpelio pavadinimą.
PASIRINKITE snum, sname, miestą, comm * 100 AS "procentų" IŠ pardavėjų Rezultatas:
snum | pavardė | miestas | procentų |
---|---|---|---|
1001 | Nulupkite | Londonas | 12 |
1002 | Serres | San Jose | 13 |
1003 | Akselrodas | Niujorkas | 10 |
1004 | Motika | Londonas | 11 |
1007 | Rifkinas | Barselona | 15 |
Dėl užklausos paskutinis stulpelis pavadintas eilute „procentas“, todėl ją lengviau suprasti.
Kadangi skaičius rodomas procentais, būtų malonu tai nurodyti rezultate. Į pagalbą ateina SQL galimybė pridėti tekstą prie rezultato. Tai atrodo taip:
PASIRINKITE snum, sname, miestą, comm * 100 AS procentų , "%" IŠ pardavėjų Rezultatas:
snum | pavardė | miestas | procentų | % |
---|---|---|---|---|
1001 | Nulupkite | Londonas | 12 | % |
1002 | Serres | San Jose | 13 | % |
1003 | Akselrodas | Niujorkas | 10 | % |
1004 | Motika | Londonas | 11 | % |
1007 | Rifkinas | Barselona | 15 | % |
Matyti, kad po eilutės išvedimo iš duomenų bazės atsirado naujas stulpelis, užpildytas procento ženklu (%).
Jei nesate patenkinti duomenų ir papildomo teksto išvestimi skirtinguose stulpeliuose, galite naudoti specialias savo DBVS funkcijas, kad sujungtumėte į vieną stulpelį.
MySQL naudoja funkciją CONCAT . Štai jo apibrėžimas iš vadovo:
CONCAT(str1, str2,...)
Grąžina eilutę, gautą sujungus argumentus. Jei bent vienas iš argumentų yra NULL, grąžinamas NULL. Galima pateikti daugiau nei 2 argumentus. Skaitinis argumentas konvertuojamas į jam lygiavertę eilutės formą.
Pavyzdys: SELECT snum, sname, city , CONCAT(comm * 100, "%") AS "persent" IŠ pardavėjų Rezultatas:
snum | pavardė | miestas | nuolatinis |
---|---|---|---|
1001 | Nulupkite | Londonas | 12.000% |
1002 | Serres | San Jose | 13.000% |
1003 | Akselrodas | Niujorkas | 10.000% |
1004 | Motika | Londonas | 11.000% |
1007 | Rifkinas | Barselona | 15.000% |
Šioje užklausoje funkcija CONCAT naudoja 2 argumentus, tai yra comm * 100 ir procento ženklas („%“). Tada stulpelį pavadiname AS.
Svarbu žinoti, kad funkcijų naudojimas pablogina našumą. Tai ne vienintelis neigiamas, bet labai svarbus dalykas. Todėl, jei galite išsisukti nuo standartinio SQL kodo, geriau nenaudoti funkcijų. Juos reikėtų prisiminti tik kraštutiniais atvejais.
Perteklinių duomenų pašalinimas
Dažnai iš užklausos rezultatų reikia išskirti pasikartojančias vertes. Tam naudojamas raktinis žodis DISTINCT. Priešingas efektas gaunamas naudojant žodį ALL, kuris naudojamas pagal nutylėjimą (tai yra, jo nurodyti nereikia).
5. Būtina parodyti miestus (miestą), kuriuose yra pardavėjų
Prašymas be išimties:
PASIRINKTI miestą IŠ pardavėjų Rezultatas:
Jei reikia, pasikartojančios Londono vertės neįtraukiamos į rezultatą.
Rūšiuoti rezultatus pagal vertes pagal stulpelį
SELECT sakinys išveda duomenis savavališka seka. Norėdami surūšiuoti rezultatą pagal tam tikrą stulpelį, SQL naudoja operatorių ORDER BY (t. y. tvarka pagal...). Šis teiginys leidžia pakeisti duomenų išvedimo tvarką. ORDER BY sutvarko užklausos rezultatą pagal vieno ar kelių stulpelių, pasirinktų SELECT sąlygoje, reikšmes. Tokiu atveju kiekviename stulpelyje galite nustatyti rūšiavimą didėjančia tvarka – didėjančia (ASC) (šis parametras naudojamas pagal numatytuosius nustatymus) arba mažėjančia tvarka – mažėjančia tvarka (DESC).
Rūšiuokite rezultatą pagal vardo stulpelį. Po operatoriaus ORDER BY nurodome pagal kurį stulpelį rūšiuoti, tuomet reikia nurodyti rūšiavimo būdą
Pavyzdys – rūšiavimas didėjančia tvarka:
PASIRINKTI * IŠ Pardavėjų UŽSAKYTI PAGAL vardą ASC
Rezultatas:
Pavyzdys – rūšiavimas pagal kelis stulpelius:
PASIRINKTI snum, sname, miestą IŠ Pardavėjų UŽSAKYTI PAGAL vardą DESC, miestą DESC Rezultatas:
snum | pavardė | miestas |
---|---|---|
1002 | Serres | San Jose |
1007 | Rifkinas | Barselona |
1001 | Nulupkite | Londonas |
1004 | Motika | Londonas |
1003 | Akselrodas | Niujorkas |
Keletas svarbių pastabų:
- stulpelis, pagal kurį vyksta rūšiavimas, turi būti nurodytas SELECT (galite naudoti *)
- užklausos pabaigoje visada rašomas operatorius ORDER BY
Sveiki atvykę į mano tinklaraščio svetainę. Šiandien kalbėsime apie sql užklausas pradedantiesiems. Kai kuriems žiniatinklio valdytojams gali kilti klausimų. Kodėl mokytis sql? Negalite apsieiti?
Pasirodo, profesionaliam interneto projektui to nepakaks. Sql naudojamas darbui su duomenų baze ir „WordPress“ programoms kurti. Pažiūrėkime, kaip naudoti užklausas išsamiau.
Kas tai yra
SQL yra struktūrinių užklausų kalba. Sukurta siekiant nustatyti duomenų tipą, suteikti prieigą prie jų ir apdoroti informaciją per trumpą laiką. Jame aprašomi komponentai arba kai kurie rezultatai, kuriuos norite matyti interneto projekte.
Paprastai tariant, ši programavimo kalba leidžia pridėti, keisti, ieškoti ir rodyti informaciją duomenų bazėje. Mysql populiarumą lėmė tai, kad jis naudojamas kuriant dinamiškus interneto projektus, kurie yra pagrįsti duomenų baze. Todėl, norėdami sukurti funkcinį tinklaraštį, turite išmokti šią kalbą.
Ką gali padaryti
SQL kalba leidžia:
- kurti lenteles;
- keisti priimti ir saugoti skirtingus duomenis;
- sujungti informaciją į blokus;
- apsaugoti duomenis;
- sukurti prieigos užklausas.
Svarbu! Susidūrę su sql, galite rašyti bet kokio sudėtingumo „WordPress“ programas.
Kokia struktūra
Duomenų bazė susideda iš lentelių, kurios gali būti pavaizduotos kaip Excel failas.
Ji turi pavadinimą, stulpelius ir eilutę su tam tikra informacija. Tokias lenteles galite sukurti naudodami sql užklausas.
Ką tu turi žinoti
Pagrindiniai taškai mokantis SQL
Kaip minėta pirmiau, užklausos naudojamos apdoroti ir įvesti naują informaciją į duomenų bazę, kurią sudaro lentelės. Kiekviena eilutė yra atskiras įrašas. Taigi sukurkime duomenų bazę. Norėdami tai padaryti, parašykite komandą:
Sukurti duomenų bazę 'bazaname'
Duomenų bazės pavadinimą kabutėse rašome lotyniškai. Pabandykite sugalvoti jai prasmingą vardą. Nekurkite duomenų bazės, tokios kaip „111“, „www“ ir panašiai.
Sukūrę duomenų bazę, įdiekite:
NUSTATYTI PAVADINIMUS „utf-8“
Tai būtina, kad svetainės turinys būtų rodomas teisingai.
Dabar mes sukuriame lentelę:
KURTI LENTELĘ 'bazaname' . "stalas" (
ID INT(8) NOT NULL AUTO_INCREMENT PIRMINIS RAKTAS,
žurnalas VARCHAR(10),
išlaikyti VARCHAR (10),
data DATE
Antroje eilutėje parašėme tris atributus. Pažiūrėkime, ką jie reiškia:
- Atributas NOT NULL reiškia, kad langelis nebus tuščias (laukelis būtinas);
- AUTO_INCREMENT reikšmė yra automatinis užbaigimas;
- PIRMINIS RAKTAS yra pirminis raktas.
Kaip pridėti informaciją
Norėdami užpildyti sukurtos lentelės laukus reikšmėmis, naudojamas INSERT sakinys. Rašome šias kodo eilutes:
Įterpti į lentelę
(prisijungimas , leidimas , data) VERTYBĖS
('Vasa', '87654321', '2017-06-21 18:38:44');
Skliausteliuose nurodome stulpelių pavadinimus, o kitame – reikšmes.
Svarbu! Vadovaukitės stulpelių pavadinimų ir reikšmių seka.
Kaip atnaujinti informaciją
Tam naudojama komanda UPDATE. Pažiūrėkime, kaip pakeisti konkretaus vartotojo slaptažodį. Rašome šias kodo eilutes:
UPDATE „lentelė“ SET pass = „12345678“ WHERE id = „1“
Dabar pakeiskite slaptažodį į „12345678“. Pakeitimai įvyksta eilutėje su "id"=1. Jei neparašysite komandos WHERE, keisis visos eilutės, o ne konkreti.
Rekomenduoju įsigyti knygą SQL manekenams “. Jos pagalba galėsite profesionaliai dirbti su duomenų baze žingsnis po žingsnio. Visa informacija yra sukurta remiantis principu nuo paprastos iki sudėtingos ir bus gerai priimta.
Kaip ištrinti įrašą
Jei ką nors parašėte ne taip, pataisykite tai naudodami komandą DELETE. Veikia taip pat kaip UPDATE. Rašome šį kodą:
IŠTRINTI IŠ 'lentelės' WHERE id = '1'
Informacijos atranka
Komanda SELECT naudojama reikšmėms iš duomenų bazės nuskaityti. Rašome šį kodą:
SELECT * FROM 'lentelės' WHERE id = '1'
IN šis pavyzdys pasirinkite visus galimus lentelės laukus. Taip atsitinka, jei komandoje įrašote žvaigždutę „*“. Jei reikia pasirinkti pavyzdinę vertę, rašykite taip:
PASIRINKTI žurnalą , pereiti IŠ lentelės WHERE id = '1'
Pažymėtina, kad gebėjimo dirbti su duomenų bazėmis nepakaks. Norėdami sukurti profesionalų interneto projektą, turėsite išmokti į puslapius įtraukti duomenis iš duomenų bazės. Norėdami tai padaryti, susipažinkite su php žiniatinklio programavimo kalba. Tai jums padės Šaunus Michailo Rusakovo kursas .
Lentelės ištrynimas
Atsiranda pateikus DROP užklausą. Norėdami tai padaryti, parašykite šias eilutes:
DROP TABLE stalas;
Įrašo išvedimas iš lentelės pagal tam tikrą sąlygą
Apsvarstykite šį kodą:
PASIRINKITE ID, šalį, miestą IŠ lentelės KUR žmonių>150000000
Jame bus rodomi šalių, kuriose gyventojų yra daugiau nei šimtas penkiasdešimt milijonų, įrašai.
Asociacija
Susieti kelias lenteles galima naudojant Join. Žiūrėkite, kaip tai veikia šiame vaizdo įraše:
PHP ir MySQL
Dar kartą noriu pabrėžti, kad užklausos kuriant interneto projektą yra įprastas dalykas. Norėdami juos naudoti php dokumentuose, vadovaukitės šiuo veiksmų algoritmu:
- Prisijunkite prie duomenų bazės naudodami komandą mysql_connect();
- Naudodami mysql_select_db() pasirinkite norimą duomenų bazę;
- Užklausos apdorojimas mysql_fetch_array();
- Uždarome ryšį su mysql_close() komanda.
Svarbu! Dirbti su duomenų baze nėra sunku. Svarbiausia teisingai parašyti prašymą.
Pradedantys žiniatinklio valdytojai pagalvos. O ką skaityti šia tema? Norėčiau rekomenduoti Martino Graberio knygą " SQL paprastiems mirtingiesiems “. Parašyta taip, kad pradedantieji viską suprastų. Naudokite jį kaip žinyną.
Bet tai yra teorija. Kaip tai veikia praktikoje? Tiesą sakant, interneto projektas turi būti ne tik sukurtas, bet ir įtrauktas į „Google“ ir „Yandex“ TOP. Vaizdo įrašų kursai padės jums tai padaryti Svetainės kūrimas ir reklama ».
Vaizdo instrukcija
Vis dar turite klausimų? Žiūrėkite daugiau internetinio vaizdo įrašo.
Išvada
Taigi, SQL užklausų rašymas nėra toks sudėtingas, kaip atrodo, bet bet kuris žiniatinklio valdytojas turi tai padaryti. Aukščiau aprašyti vaizdo kursai padės tai padaryti. Prenumeruok mano VKontakte grupė kad pirmieji sužinotų apie naują įdomią informaciją.
Užklausos rašomos be pabėgimo kabučių, nes MySQL, MS SQL Ir PostGree jie skirtingi.
SQL užklausa: nurodytų (būtinų) laukų gavimas iš lentelės
SELECT id, country_title, count_people FROM table_nameGauname įrašų sąrašą: VISOS šalys ir jų gyventojai. Privalomų laukų pavadinimai atskiriami kableliais.
SELECT * FROM lentelės_pavadinimas
* žymi visus laukus. Tai yra, bus rodomi VISKAS duomenų laukus.
SQL užklausa: rodo įrašus iš lentelės, išskyrus dublikatus
PASIRINKITE ATSKIRTI šalies_pavadinimą NUO lentelės_pavadinimoGauname įrašų sąrašą: šalys, kuriose yra mūsų vartotojai. Vienoje šalyje gali būti daug vartotojų. Šiuo atveju tai yra jūsų prašymas.
SQL užklausa: rodo įrašus iš lentelės pagal tam tikrą sąlygą
SELECT ID, šalies_pavadinimas, miesto_pavadinimas FROM lentelės_pavadinimas WHERE skaičiai_žmonių>100000000Gauname įrašų sąrašą: šalys, kuriose žmonių skaičius viršija 100 000 000.
SQL užklausa: įrašų rodymas iš lentelės su tvarka
PASIRINKITE ID, miesto_pavadinimas FROM lentelės_pavadinimas ORDER BY miesto_pavadinimasGauname įrašų sąrašą: miestus abėcėlės tvarka. A pradžioje, Z pabaigoje.
PASIRINKITE ID, miesto_pavadinimas FROM lentelės_pavadinimas ORDER BY city_title DESC
Gauname įrašų sąrašą: miestai atvirkščiai ( DESC) yra gerai. Pradžioje aš, pabaigoje A.
SQL užklausa: įrašų skaičiaus skaičiavimas
PASIRINKITE SKAIČIUS(*) IŠ lentelės_pavadinimoLentelėje gauname įrašų skaičių (skaičius). Šiuo atveju įrašų sąrašo NĖRA.
SQL užklausa: rodomas norimas įrašų diapazonas
SELECT * FROM lentelės_pavadinimas LIMIT 2, 3Iš lentelės gauname 2 (antrą) ir 3 (trečią) įrašus. Užklausa naudinga kuriant naršymą WEB puslapiuose.
SQL užklausos su sąlygomis
Įrašų rodymas iš lentelės pagal tam tikrą sąlygą naudojant loginius operatorius.
SQL užklausa: IR konstrukcija (IR)
SELECT id, city_title FROM table_name WHERE country="Russia" AND nafta = 1Gauti įrašų sąrašą: miestai iš Rusijos IR turėti prieigą prie naftos. Kada naudojamas operatorius? IR, tada abi sąlygos turi atitikti.
SQL užklausa: ARBA konstrukcija (OR)
PASIRINKITE ID, miesto_pavadinimas FROM lentelės_pavadinimas WHERE country="Russia" OR country="USA"Gaukite įrašų sąrašą: visi miestai iš Rusijos ARBA JAV. Kada naudojamas operatorius? ARBA, tada turi atitikti BENT viena sąlyga.
SQL užklausa: AND NOT konstruoti (AND NOT)
SELECT id, user_login FROM lentelės_pavadinimas WHERE country="Russia" AND NOT count_comments<7Gaukite įrašų sąrašą: visi vartotojai iš Rusijos IR pagamintas NE MAŽIAU 7 komentarai.
SQL užklausa: IN konstrukcija (B)
SELECT id, user_login FROM table_name WHERE country IN („Rusija“, „Bulgarija“, „Kinija“)Gauname įrašų sąrašą: visi vartotojai, gyvenantys ( IN) (Rusija, Bulgarija arba Kinija)
SQL užklausa: NOT IN konstruktas (NOT IN)
SELECT id, user_login FROM lentelės_pavadinimas WHERE country NOT IN („Rusija“, „Kinija“)Gauname įrašų sąrašą: visi vartotojai, kurie negyvena ( NE Į) (Rusija arba Kinija).
SQL užklausa: IS NULL konstrukcija (tuščios arba NE tuščios reikšmės)
SELECT id, vartotojo_prisijungimas IŠ lentelės_pavadinimas WHERE būsena NULLGauname įrašų sąrašą: visi vartotojai, kurių būsena neapibrėžta. NULL yra atskira tema, todėl ji tikrinama atskirai.
SELECT id, vartotojo_prisijungimas IŠ lentelės_pavadinimas WHERE būsena NĖRA NULL
Gauname įrašų sąrašą: visi vartotojai, kurių būsena yra apibrėžta (NE NULIS).
SQL užklausa: LIKE konstrukcija
SELECT id, vartotojo_prisijungimas IŠ lentelės_pavadinimas WHERE pavardė LIKE "Jonas%"Gauname įrašų sąrašą: vartotojai, kurių pavardė prasideda kombinacija „Ivanas“. % ženklas reiškia BET KOKĮ simbolių skaičių. Norėdami rasti % ženklą, turite naudoti pabėgimo klavišą „Ivan\%“.
SQL užklausa: BETWEEN konstrukcija
SELECT id, user_login FROM lentelės_pavadinimas WHERE atlyginimas NUO 25000 IKI 50000Gauname įrašų sąrašą: vartotojai, kurie gauna atlyginimą nuo 25 000 iki 50 000 imtinai.
Yra LABAI daug loginių operatorių, todėl atidžiai išstudijuokite SQL serverio dokumentaciją.
Sudėtingos SQL užklausos
SQL užklausa: sujunkite kelias užklausas
(SELECT id, user_login FROM table_name1) UNION (SELECT id, user_login FROM table_name2)Gauname įrašų sąrašą: naudotojai, kurie yra užsiregistravę sistemoje, taip pat tie vartotojai, kurie yra registruoti forume atskirai. UNION operatorius gali sujungti kelias užklausas. UNION veikia kaip SELECT DISTINCT, tai yra, atmeta pasikartojančias vertes. Norėdami gauti absoliučiai visus įrašus, turite naudoti operatorių UNION ALL.
SQL užklausa: lauko verčių MAX, MIN, SUM, AVG, COUNT apskaičiavimas
Vieno išvestis, didžiausia skaitiklio vertė lentelėje:
SELECT MAX (skaitiklis) FROM lentelės_pavadinimasVieno išvestis, mažiausia skaitiklio vertė lentelėje:
PASIRINKITE MIN(skaitiklį) IŠ lentelės_pavadinimoLentelėje rodoma visų skaitiklių reikšmių suma:
PASIRINKITE SUMĄ (skaitiklį) IŠ lentelės_pavadinimoLentelėje rodoma vidutinė skaitiklio vertė:
PASIRINKITE AVG(skaitiklį) IŠ lentelės_pavadinimoRodomas skaitiklių skaičius lentelėje:
PASIRINKITE SKAIČIUS (skaitiklį) IŠ lentelės_pavadinimoIšvada apie skaitiklių skaičių parduotuvėje Nr. 1, lentelėje:
SELECT COUNT (skaitiklis) FROM lentelės_pavadinimas WHERE office="Seminaras Nr. 1"Tai yra populiariausios komandos. Jei įmanoma, skaičiuojant rekomenduojama naudoti tokio tipo SQL užklausas, nes jokia programavimo aplinka negali būti palyginta duomenų apdorojimo greičiu nei pats SQL serveris, apdorojant savo duomenis.
SQL užklausa: įrašų grupavimas
PASIRINKTI žemyną, SUM(šalies_sritis) FROM šalies GROUP BY žemynasGauname įrašų sąrašą: su žemyno pavadinimu ir su visų jų šalių plotų suma. Tai yra, jei yra šalių katalogas, kuriame yra įrašytas kiekvienos šalies plotas, tai naudojant GROUP BY konstrukciją, galite sužinoti kiekvieno žemyno dydį (remiantis grupavimu pagal žemynus).
SQL užklausa: kelių lentelių naudojimas per slapyvardį (alias)
SELECT o.order_no, o.suma_paid, c.company FROM orders AS o, klientas AS su WHERE o.custno=c.custno AND c.city="Tyumen"Gauname įrašų sąrašą: užsakymus iš pirkėjų, kurie gyvena tik Tiumenėje.
Tiesą sakant, turint tinkamai suprojektuotą tokio tipo duomenų bazę, užklausa yra pati dažniausia, todėl MySQL pristatė specialų operatorių, kuris veikia daug kartų greičiau nei aukščiau parašytas kodas.
PASIRINKITE o.užsakymo_ne, o.suma_mokėta, z.įmonė IŠ užsakymų AS o LEFT JOIN kliento AS z ĮJUNGTAS (z.custno=o.custno)
Įdėtos antrinės užklausos
SELECT * FROM lentelės_pavadinimas WHERE alga=(SELECT MAX(alga) FROM darbuotojo)Gauname vieną įrašą: informaciją apie vartotoją su maksimaliu atlyginimu.
Dėmesio!Įdėtos antrinės užklausos yra viena iš SQL serverių kliūčių. Kartu su savo lankstumu ir galia jie taip pat žymiai padidina serverio apkrovą. Dėl to kiti vartotojai katastrofiškai sulėtėja. Labai dažnai pasitaiko rekursinių skambučių su įdėtomis užklausomis. Todėl primygtinai rekomenduoju NEnaudoti įdėtųjų užklausų, o jas skaidyti į mažesnes. Arba naudokite aukščiau aprašytą LEFT JOIN derinį. Be tokio tipo užklausų, jos yra didesnis saugumo pažeidimų dėmesys. Jei nuspręsite naudoti įdėtas antrines užklausas, turite jas labai kruopščiai suprojektuoti ir atlikti pradines duomenų bazių kopijas (bandomąsias duomenų bazes).
SQL užklausos keičia duomenis
SQL užklausa: INSERT
Instrukcija ĮDĖTI leidžia įterpti įrašus į lentelę. Paprastais žodžiais tariant, sukurkite eilutę su duomenimis lentelėje.
1 variantas. Dažnai naudojama instrukcija:
INSERT INTO lentelės_pavadinimas (id, vartotojo_prisijungimas) VALUES (1, "ivanov"), (2, "petrov")Lentelėje" lentelės_pavadinimas» vienu metu įterps 2 (du) vartotojus.
2 variantas. Patogiau naudoti stilių:
INSERT lentelės_pavadinimas SET id=1, user_login="ivanov"; INSERT lentelės_pavadinimas SET id=2, vartotojo_prisijungimas="petrovas";Tai turi savo privalumų ir trūkumų.
Pagrindiniai trūkumai:
- Daugelis mažų SQL užklausų yra šiek tiek lėtesnės nei viena didelė SQL užklausa, tačiau kitos užklausos bus įtrauktos į aptarnavimo eilę. Tai yra, jei didelė SQL užklausa vykdoma 30 minučių, per visą šį laiką likusios užklausos rūks ir lauks savo eilės.
- Prašymas yra didesnis nei ankstesnė versija.
Pagrindiniai privalumai:
- Atliekant mažas SQL užklausas, kitos SQL užklausos nėra blokuojamos.
- Lengvas skaitymas.
- Lankstumas. Pasirinkę šią parinktį, negalite sekti struktūros, o pridėti tik reikiamus duomenis.
- Kurdami archyvus tokiu būdu, galite lengvai nukopijuoti vieną eilutę ir paleisti ją per komandinę eilutę (konsolę), taip neatkurdami viso ARCHYVO.
- Rašymo stilius panašus į UPDATE teiginį, kurį lengviau atsiminti.
SQL užklausa: UPDATE
UPDATE lentelės_pavadinimas SET user_login="ivanov", vartotojo_pavardė="Ivanovas" WHERE id=1Lentelėje" lentelės_pavadinimas» įraše su numeriu id=1 laukų user_login ir user_surname reikšmės bus pakeistos į nurodytas reikšmes.
SQL užklausa: DELETE
DELETE FROM lentelės_pavadinimas WHERE id=3Įrašas, kurio ID numeris 3, bus ištrintas lentelėje lentelės_pavadinimas.
- Visus laukų pavadinimus rekomenduojama rašyti mažomis raidėmis ir, jei reikia, atskirti priverstiniu tarpu "_", kad būtų suderinama su skirtingomis programavimo kalbomis, tokiomis kaip Delphi, Perl, Python ir Ruby.
- Kad būtų lengviau skaityti, SQL komandos rašomos didžiosiomis raidėmis. Visada atminkite, kad kiti žmonės gali perskaityti kodą po jūsų, bet greičiausiai jūs pats po N laiko.
- Pirmiausia pavadinkite laukus daiktavardžiu, o tada veiksmu. Pavyzdžiui: miesto_būsena, vartotojo_prisijungimas, vartotojo_vardas.
- Stenkitės vengti rezervinių žodžių skirtingomis kalbomis, kurie gali sukelti problemų SQL, PHP ar Perl, pvz., (vardas, skaičius, nuoroda). Pavyzdžiui: nuoroda gali būti naudojama MS SQL, bet rezervuota MySQL.
Ši medžiaga yra trumpa kasdienio darbo nuoroda ir nepretenduoja į itin didelį autoritetingą šaltinį, kuris yra pagrindinis konkrečios duomenų bazės SQL užklausų šaltinis.
- Vertimas
- pamoka
Ar tai turėtų būti " SELECT * WHERE a=b FROM c " arba " SELECT WHERE a=b FROM c ON * " ?
Jei esate panašus į mane, sutiksite: SQL yra vienas iš tų dalykų, kuris iš pirmo žvilgsnio atrodo paprastas (jis atrodo kaip angliškai!), bet kažkaip jūs turite ieškoti „Google“ kiekvienos paprastos užklausos, kad rastumėte tinkamą sintaksę.
Ir tada prasideda prisijungimai, agregavimas, antrinės užklausos ir tai pasirodo visiška šiukšlė. Kaip šitas:
PASIRINKITE narius.vardas || " " || nariai.pavardė AS "Visas vardas" IŠ skolinimų INNER JOIN nariai ON members.memberid=paskoliniai.memberid INNER JOIN books ON books.bookid=browings.bookid WHERE skolinimai.bookid IN (SELECT bookid FROM books WHERE stock>(SELECT avg(stock) ) IŠ knygų)) GROUP BY nariai.vardas, nariai.pavardė;
Bue! Tai išgąsdins bet kurį pradedantįjį ar net vidutinį kūrėją, jei jis pirmą kartą pamatys SQL. Bet ne viskas taip blogai.
Nesunku prisiminti, kas intuityvu, ir šiuo vadovu tikiuosi sumažinti kliūtis pradedantiesiems patekti į SQL, o labiau patyrusiems pasiūlyti naują SQL požiūrį.
Nors SQL sintaksė skirtingose duomenų bazėse yra beveik vienoda, šiame straipsnyje užklausoms naudojama PostgreSQL. Kai kurie pavyzdžiai veiks MySQL ir kitose duomenų bazėse.
1. Trys stebuklingi žodžiai
SQL yra daug raktinių žodžių, tačiau SELECT , FROM ir WHERE yra beveik kiekvienoje užklausoje. Šiek tiek vėliau suprasite, kad šie trys žodžiai atspindi svarbiausius duomenų bazės užklausų kūrimo aspektus, o kitos sudėtingesnės užklausos yra tik priedai.
2. Mūsų bazė
Pažvelkime į duomenų bazę, kurią naudosime kaip pavyzdį šiame straipsnyje:
Turime knygų biblioteką ir žmones. Taip pat yra speciali lentelė išduotų knygų apskaitai.
- Lentelėje „Knygos“ saugoma informacija apie knygos pavadinimą, autorių, išleidimo datą ir prieinamumą. Viskas paprasta.
- Lentelėje „nariai“ – visų į biblioteką užsiregistravusių žmonių vardai ir pavardės.
- Lentelėje „skolinimai“ saugoma informacija apie iš bibliotekos pasiskolintas knygas. Bookid stulpelis nurodo pasiskolintos knygos ID lentelėje „knygos“, o narių stulpelis – atitinkamą asmenį lentelėje „nariai“. Taip pat turime išleidimo datą ir datą, kada knyga turi būti grąžinta.
3. Paprastas prašymas
Pradėkime nuo paprasto prašymo: mums reikia vardai Ir identifikatoriai(id) visos knygos, parašytos autoriaus „Dan Brown“
Prašymas bus toks:
SELECT bookid AS "id", pavadinimas FROM books WHERE author="Dan Brown";
O rezultatas toks:
id | titulą |
---|---|
2 | Prarastas simbolis |
4 | Inferno |
Gana paprasta. Išskaidykime prašymą, kad suprastume, kas vyksta.
3.1 FROM – iš kur gauname duomenis
Dabar tai gali atrodyti akivaizdu, bet FROM bus labai svarbu vėliau, kai pereisime prie prisijungimų ir antrinių užklausų.
FROM taškų į lentelę ir užklausą. Tai gali būti jau esama lentelė (kaip aukščiau esančiame pavyzdyje) arba lentelė, sukurta greitai naudojant sujungimus arba antrines užklausas.
3.2 KUR – kokius duomenis rodyti
WHERE tiesiog elgiasi kaip filtras linijos kuriuos norime parodyti. Mūsų atveju norime matyti tik eilutes, kuriose autoriaus stulpelio reikšmė yra „Dan Brown“.
3.3 PASIRINKTI – kaip rodyti duomenis
Dabar, kai turime visus reikalingus lentelės stulpelius, turime nuspręsti, kaip tiksliai rodyti šiuos duomenis. Mūsų atveju mums reikia tik pavadinimų ir knygų ID, todėl tai ir darome. pasirinkti su SELECT. Tuo pačiu metu galite pervardyti stulpelį naudodami AS .
Visą užklausą galima vizualizuoti naudojant paprastą diagramą:
4. Jungtys (sujungimai)
Dabar norime pamatyti visų Dano Browno knygų, kurios buvo pasiskolintos iš bibliotekos, pavadinimus (nebūtinai unikalius) ir kada tas knygas reikia grąžinti:
PASIRINKITE books.title KAIP "Pavadinimas", skolinimosi.returndate AS "Grąžinimo data" IŠ skolintų PRISIJUNK knygų PRIE skolinimosi.bookid=books.bookid WHERE books.author="Dan Brown";
Rezultatas:
Pavadinimas | grįžimo data |
---|---|
Prarastas simbolis | 2016-03-23 00:00:00 |
Inferno | 2016-04-13 00:00:00 |
Prarastas simbolis | 2016-04-19 00:00:00 |
Daugeliu atvejų prašymas yra panašus į ankstesnį. su išimtimi IŠ skyriaus. Tai reiškia kad mes ieškome duomenų iš kitos lentelės. Mes neprieiname nei prie „knygų“ lentelės, nei „pasiskolinimų“ lentelės. Vietoj to, mes kreipiamės į naujas stalas, kuris buvo sukurtas sujungus šias dvi lenteles.
skolinimai PRISIJUNGTI prie knygų PRIE skolinimosi.bookid=knygos.knygos – tai nauja lentelė, suformuota sujungus visus įrašus iš lentelių „knygos“ ir „pasiskolinimai“, kuriuose sutampa buhalterinės apskaitos reikšmės. Tokio susijungimo rezultatas bus:
Tada pateikiame šios lentelės užklausą taip pat, kaip ir aukščiau pateiktame pavyzdyje. Tai reiškia, kad sujungiant lenteles jums tereikia rūpintis, kaip atlikti šį sujungimą. Ir tada prašymas tampa toks pat aiškus, kaip ir „paprasto prašymo“ atveju iš 3 punkto.
Išbandykime šiek tiek sudėtingesnį dviejų lentelių sujungimą.
Dabar norime gauti vardus ir pavardes žmonių, kurie iš bibliotekos paėmė autoriaus „Dano Brauno“ knygas.
Šį kartą eikime iš apačios į viršų:
1 žingsnis– iš kur gauname duomenis? Norėdami gauti norimą rezultatą, turime sujungti lenteles „nario“ ir „knygos“ su lentele „pasiskolinimai“. Skyrius JOIN atrodys taip:
skolinimai PRISIJUNGTI prie knygų PRIE skolinimosi.bookid=knygos.knygos PRISIJUNGTI prie narių PRIE narių.memberid=skolinimosi.memberid
Ryšio rezultatą galite pamatyti nuorodoje.
2 žingsnis Kokius duomenis rodome? Mus domina tik tie duomenys, kur knygos autorius yra „Danas Braunas“
KUR books.author="Dan Brown"
3 veiksmas Kaip rodome duomenis? Dabar, kai duomenys gauti, tereikia parodyti knygas paėmusių asmenų vardus ir pavardes:
PASIRINKITE narius.vardas AS "Vardas", nariai.pavardė AS "Pavardė"
Super! Belieka tik sujungti tris komponentus ir pateikti mums reikalingą užklausą:
PASIRINKITE narius.vardas AS "Vardas", nariai.pavardė AS "Pavardė" NUO pasiskolinimo PRISIJUNGTI prie knygų PRIE skolinimosi.bookid=knygos.knygos PRISIJUNGTI prie narių PRIE narių.memberid=skolinimosi.memberid WHERE books.author="Dan Brown";
Ką mums duos:
Pirmas vardas | pavardė |
---|---|
Maikas | Willis |
Ellen | Hortonas |
Ellen | Hortonas |
Puiku! Bet vardai kartojasi (jie nėra unikalūs). Greitai tai ištaisysime.
5. Sumavimas
Apytiksliai kalbant, agregacijos reikalingos norint paversti kelias eilutes į vieną. Tuo pačiu metu agregavimo metu skirtingiems stulpeliams naudojama skirtinga logika.
Tęskime savo pavyzdį, kur atsiranda pasikartojantys vardai. Matyti, kad Ellen Horton paėmė ne vieną knygą, bet tai ne pati daugiausia Geriausias būdas parodyti šią informaciją. Galite pateikti kitą prašymą:
PASIRINKITE narius.vardas AS "Vardas", nariai.pavardė AS "Pavardė", skaičius(*) AS "Paskolintų knygų skaičius" IŠ skolintų PRISIJUNGTI prie knygų PRIE skolinimų.bookid=knygos.knygos PRISIJUNGTI narius ON nariai.memberid=paskolintos .memberid WHERE books.author="Dan Brown" GROUP BY nariai.vardas, nariai.pavardė;
Kas duos mums norimą rezultatą:
Pirmas vardas | pavardė | Skolintų knygų skaičius |
---|---|---|
Maikas | Willis | 1 |
Ellen | Hortonas | 2 |
Beveik visose agregacijose yra GROUP BY sąlyga. Šis dalykas paverčia lentelę, kurią galima gauti pagal užklausą, lentelių grupėmis. Kiekviena grupė atitinka unikalią stulpelio reikšmę (arba reikšmių grupę), kurią nurodėme GROUP BY. Mūsų pavyzdyje mes konvertuojame ankstesnio pratimo rezultatą į eilučių grupę. Taip pat atliekame agregaciją su count , kuri kelias eilutes paverčia sveikuoju skaičiumi (mūsų atveju – eilučių skaičiumi). Tada ši vertė priskiriama kiekvienai grupei.
Kiekviena rezultato eilutė yra kiekvienos grupės apibendrinimo rezultatas.
Galite prieiti prie logiškos išvados, kad visi rezultato laukai turi būti nurodyti GROUP BY arba juose turi būti atliktas agregavimas. Kadangi visi kiti laukai gali skirtis vieni nuo kitų skirtingose eilutėse, o juos pasirinkus mygtuku SELECT “th, neaišku, kurią iš galimų reikšmių reikėtų pasirinkti.
Aukščiau pateiktame pavyzdyje skaičiavimo funkcija apdorojo visas eilutes (nes skaičiavome eilučių skaičių). Kitos funkcijos, pvz., suma arba max, apdoroja tik nurodytas eilutes. Pavyzdžiui, jei norime sužinoti kiekvieno autoriaus parašytų knygų skaičių, mums reikia šios užklausos:
PASIRINKTI autorių, suma(stock) IŠ knygų GROUP BY autorių;
Rezultatas:
autorius | suma |
---|---|
Robinas Šarma | 4 |
Danas Brownas | 6 |
Džonas Grynas | 3 |
Amišas Tripathi | 2 |
Čia sumos funkcija apdoroja tik atsargų stulpelį ir apskaičiuoja visų kiekvienos grupės verčių sumą.
6. Papildomos užklausos
Papildomos užklausos yra įprastos SQL užklausos, įterptos į didesnes užklausas. Jie skirstomi į tris tipus pagal grąžinamo rezultato tipą.
6.1 Dvimatė lentelė
Yra užklausų, kurios pateikia kelis stulpelius. Geras pavyzdys yra užklausa iš ankstesnio agregavimo pratimo. Būdama antrinė užklausa, ji tiesiog pateiks kitą lentelę, kurioje bus galima pateikti naujas užklausas. Tęsdami ankstesnį pratimą, jei norime sužinoti autoriaus „Robin Sharma“ parašytų knygų skaičių, vienas iš galimų būdų yra naudoti antrines užklausas:
SELECT * FROM (SELECT autorius, suma(stock) FROM books GROUP BY author) AS rezultatai WHERE author="Robin Sharma";
Rezultatas:
Galima parašyti kaip: ["Robin Sharma", "Dan Brown"]
2. Dabar naudokite šį rezultatą naujoje užklausoje:
SELECT pavadinimas, bookid FROM books WHERE author IN (SELECT author FROM (SELECT autorius, suma(stock) FROM books GROUP BY author)) AS rezultatai WHERE suma > 3);
Rezultatas:
titulą | bookid |
---|---|
Prarastas simbolis | 2 |
Kas verks, kai mirsi? | 3 |
Inferno | 4 |
Tai tas pats kaip:
PASIRINKITE pavadinimą, knygą IŠ knygų, KURIOJI autorius ("Robin Sharma", "Dan Brown");
6.3 Individualios vertės
Yra užklausų, kurių rezultatas yra tik viena eilutė ir vienas stulpelis. Jie gali būti traktuojami kaip pastovios vertės ir gali būti naudojami visur, kur naudojamos reikšmės, pavyzdžiui, palyginimo operatoriuose. Jie taip pat gali būti naudojami kaip dvimatės lentelės arba vieno elemento matricos.
Pavyzdžiui, gaukime informaciją apie visas knygas, kurių skaičius bibliotekoje viršija šiuo metu vidutinę vertę.
Vidurkį galima gauti tokiu būdu:
pasirinkti avg(stock) iš knygų;
Ką mums suteikia:
7. Rašyti operacijas
Dauguma duomenų bazės rašymo operacijų yra gana paprastos, palyginti su sudėtingesnėmis skaitymo operacijomis.
7.1 Atnaujinimas
UPDATE užklausos sintaksė semantiškai yra tokia pati kaip skaitymo užklausos. Vienintelis skirtumas yra tas, kad užuot pasirinkę stulpelius su SELECT "th, mes nustatome žinias su SET "th.
Jei visos Dano Browno knygos bus prarastos, turite iš naujo nustatyti kiekio vertę. Užklausa dėl to būtų tokia:
ATNAUJINTI knygas SET stock=0 WHERE author="Dan Brown";
WHERE atlieka tą patį, ką ir anksčiau: pasirenka eilutes. Vietoj SELECT , kuris buvo naudojamas skaitant, dabar naudojame SET . Tačiau dabar pasirinktose eilutėse reikia nurodyti ne tik stulpelio pavadinimą, bet ir naują šio stulpelio reikšmę.
7.2 Ištrinti
Užklausa DELETE yra tik SELECT arba UPDATE užklausa be stulpelių pavadinimų. Rimtai. Kaip ir SELECT ir UPDATE , WHERE sąlyga išlieka ta pati: ji parenka eilutes, kurias reikia ištrinti. Ištrynimo operacija sunaikina visą eilutę, todėl nėra prasmės nurodyti atskirų stulpelių. Taigi, jei nuspręsime ne iš naujo nustatyti Dano Browno knygų skaičiaus, o apskritai ištrinti visus įrašus, galime pateikti tokį prašymą:
IŠTRINTI IŠ knygų WHERE autorius="Danas Brownas";
7.3 Įdėkite
Galbūt vienintelis dalykas, kuris skiriasi nuo kitų tipų užklausų, yra INSERT . Formatas yra:
INSERT INTO x(a,b,c) VALUES(x, y, z);
Kur a , b , c yra stulpelių pavadinimai, o x , y ir z yra reikšmės, kurios turi būti įterptos į tuos stulpelius tokia tvarka. Iš esmės viskas.
Pažvelkime į konkretų pavyzdį. Čia yra INSERT užklausa, kuri užpildo visą „knygų“ lentelę:
INSERT Į knygas (knygos pavadinimas, pavadinimas, autorius, išleista, atsargos) VERTYBĖS (1 "Scion of Ikshvaku", "Amish Tripathi", "06-22-2015",2), (2 "The Lost Symbol"," Danas Brownas","2010-07-22",3), (3 "Kas verks, kai mirsi?","Robin Sharma","2006-06-15",4), (4 "Pragaras" "Danas Braunas", "2014-05-05",3), (5 "Mūsų žvaigždžių kaltė", "Džonas Greenas", "2015-03-01",3);
8. Patikrinimas
Atėjome į pabaigą, siūlau atlikti nedidelį testą. Pažvelkite į tą prašymą pačioje straipsnio pradžioje. Ar galite tai išsiaiškinti? Pabandykite suskirstyti jį į skyrius SELECT , FROM , WHERE , GROUP BY ir pažiūrėkite į atskirus antrinės užklausos komponentus.
Čia jis yra lengviau skaitomas:
PASIRINKITE narius.vardas || " " || nariai.pavardė AS "Visas vardas" IŠ skolinimų INNER JOIN nariai ON members.memberid=paskolos.memberid INNER JOIN books ON books.bookid=skolinimai.bookid WHERE borrowings.bookid IN (SELECT bookid FROM books WHERE stock> (SELECT avg(stock) ) IŠ knygų)) GROUP BY nariai.vardas, nariai.pavardė;
Ši užklausa pateikia sąrašą žmonių, kurie pasiskolino knygą iš bibliotekos, kurios bendra suma viršija vidurkį.
Rezultatas:
Pilnas vardas |
---|
Linda Tailer |
Tikiuosi, kad jums pavyko tai išsiaiškinti be jokių problemų. Bet jei ne, tada džiaugsiuosi jūsų komentarais ir atsiliepimais, kad galėčiau patobulinti šį įrašą.
Žymos: pridėti žymų
![mob_info](https://mapstr.ru/wp-content/themes/kuzov/pic/mob_info.png)