Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Pogreške
  • Primjeri SQL upita u MariaDB (MySQL). Dodatak D

Primjeri SQL upita u MariaDB (MySQL). Dodatak D

  • Prijevod
  • Vodič
Trebate li “SELECT * WHERE a = b FROM c” ili “SELECT WHERE a = b FROM c ON *”?

Ako ste poput mene, složit ćete se: SQL je jedna od onih stvari koje se na prvi pogled čine lakim (čita se kao na engleskom!), ali iz nekog razloga morate guglati svaki jednostavan upit da biste pronašli ispravnu sintaksu.


A onda počinju spajanja, združivanja, potupiti i ispadne potpuna glupost. izgleda ovako:


ODABIR članova.ime || "" || članovi.prezime KAO "Puno ime" FROM posudbe INNER JOIN members ON members.memberid = borrowings.memberid INNER JOIN knjige ON books.bookid = borrowings.bookid WHERE borrowings.bookid IN (ODABIR bookid FROM books WHERE stock> (ODABIR prosj. ) IZ knjiga)) GROUP BY članovi.ime, članovi.prezime;

Bue! To će uplašiti svakog početnika, pa čak i srednjeg programera, ako prvi put vidi SQL. Ali nije sve tako loše.


Lako je zapamtiti što je intuitivno, a uz pomoć ovog vodiča nadam se da ću sniziti prag za ulazak u SQL za početnike, a za one s iskustvom ponuditi novi način gledanja na SQL.


Iako je SQL sintaksa gotovo ista u različitim bazama podataka, ovaj članak koristi PostgreSQL za upite. Neki primjeri će raditi u MySQL-u i drugim bazama podataka.

1. Tri čarobne riječi

U SQL-u postoji mnogo ključnih riječi, ali SELECT, FROM i WHERE pojavljuju se u gotovo svakom upitu. Malo kasnije, shvatit ćete da ove tri riječi predstavljaju najosnovnije aspekte izgradnje upita baze podataka, a drugi, složeniji upiti su samo dodaci uz njih.

2. Naša baza

Pogledajmo bazu podataka koju ćemo koristiti kao primjer u ovom članku:







Imamo knjižnicu i ljude. Postoji i posebna tablica za obračun izdanih knjiga.

  • Tablica knjiga pohranjuje informacije o naslovu, autoru, datumu izdavanja i dostupnosti knjige. Jednostavno je.
  • Tablica “članovi” sadrži imena i prezimena svih osoba koje su se prijavile u knjižnicu.
  • Tablica "posudbe" pohranjuje podatke o posuđenim knjigama iz knjižnice. Stupac bookid odnosi se na ID provjerene knjige u tablici "knjige", a stupac memberid odnosi se na odgovarajuću osobu iz tablice "članovi". Također imamo datum izdavanja i datum kada se knjiga mora vratiti.

3. Jednostavan zahtjev

Počnimo s jednostavnim upitom: trebamo imena i identifikatori(id) svih knjiga koje je napisao autor "Dan Brown"


Zahtjev će biti ovakav:


SELECT bookid AS "id", naslov IZ knjiga WHERE autor = "Dan Brown";

A rezultat je ovakav:


iskaznica titula
2 Izgubljeni simbol
4 Pakao

Prilično jednostavno. Pogledajmo zahtjev kako bismo razumjeli što se događa.

3.1 OD - odakle dobivamo podatke

Ovo se sada može činiti očitim, ali FROM će biti vrlo važno kasnije kada dođemo do spajanja i podupita.


FROM pokazuje na tablicu za upit. To može biti postojeća tablica (kao u gornjem primjeru) ili tablica stvorena u hodu putem spajanja ili podupita.

3.2 GDJE - koje podatke prikazati

WHERE se samo ponaša kao filter žice koje želimo proizvesti. U našem slučaju želimo vidjeti samo one retke u kojima je vrijednost u stupcu autora "Dan Brown".

3.3 SELECT - kako prikazati podatke

Sada kada imamo sve potrebne stupce iz tablice koja nam je potrebna, moramo odlučiti kako prikazati ove podatke. U našem slučaju su potrebni samo naslovi i identifikatori knjiga, pa smo upravo to mi i birati pomoću SELECT. Istodobno, možete preimenovati stupac pomoću AS.


Cijeli se upit može vizualizirati jednostavnim dijagramom:


4. Veze (spojevi)

Sada želimo vidjeti naslove (ne nužno jedinstvene) svih knjiga Dana Browna koje su izvučene iz knjižnice i kada te knjige treba vratiti:


SELECT books.title KAO "Naslov", borrowings.returndate KAO "Datum povrata" IZ posudbi PRIDRUŽITE se knjigama NA borrowings.bookid = books.bookid WHERE books.author = "Dan Brown";

Proizlaziti:


Titula Datum povratka
Izgubljeni simbol 2016-03-23 00:00:00
Pakao 2016-04-13 00:00:00
Izgubljeni simbol 2016-04-19 00:00:00

Zahtjev je uglavnom sličan prethodnom. uz iznimku IZ odjeljaka. Znači da tražimo podatke iz druge tablice... Ne pristupamo ni tablici knjiga ni tablici posudbe. Umjesto toga, pozivamo se na novi stol koji je nastao spajanjem dviju tablica.


posudbe JOIN books ON borrowings.bookid = books.bookid je nova tablica koja je nastala kombiniranjem svih zapisa iz tablica "knjige" i "posudbe" u kojima su vrijednosti bookid-a iste. Rezultat takvog spajanja bit će:



Zatim postavljamo upit za ovu tablicu na isti način kao u gornjem primjeru. To znači da kada spajate tablice, trebate samo brinuti o tome kako to spojiti. I tada zahtjev postaje jasan kao u slučaju „jednostavnog zahtjeva“ iz točke 3.


Pokušajmo s malo složenijim spajanjem dvije tablice.


Sada želimo dobiti imena i prezimena ljudi koji su preuzeli iz knjižnice autorove knjige "Dan Brown".


Ovaj put idemo odozdo prema gore:


Korak Korak 1- odakle dobivamo podatke? Da bismo dobili rezultat koji želimo, trebamo spojiti tablice "član" i "knjige" s tablicom "posuđenice". Odjeljak JOIN izgledat će ovako:


posudbe PRIDRUŽITE se knjigama NA posudbama.bookid = books.bookid PRIDRUŽITE članovima ON members.memberid = borrowings.memberid

Rezultat povezivanja možete vidjeti na poveznici.


Korak 2- koje podatke prikazujemo? Zanimaju nas samo podaci gdje je autor knjige “Dan Brown”


WHERE books.author = "Dan Brown"

Korak 3- kako prikazujemo podatke? Sada kada su podaci zaprimljeni, samo trebate prikazati ime i prezime onih koji su uzeli knjige:


SELECT members.firstname AS "Ime", members.prezime AS "Prezime"

Super! Ostaje samo kombinirati tri komponente i napraviti zahtjev koji nam je potreban:


SELECT members.firstname AS "Ime", members.prezime AS "Prezime" FROM posudbe PRIDRUŽITE knjige NA borrowings.bookid = books.bookid PRIDRUŽITE članove ON members.memberid = borrowings.memberid WHERE books.author = "Dan Brown";

Što će nam dati:


Ime Prezime
Mikrofon Willis
Ellen Horton
Ellen Horton

Fino! Ali imena se ponavljaju (nisu jedinstvena). Uskoro ćemo to popraviti.

5. Agregacija

grubo govoreći, agregacije su potrebne za pretvaranje više redaka u jedan... Istodobno, tijekom agregiranja, različita logika se koristi za različite stupce.


Nastavimo s našim primjerom u kojem se pojavljuju dupli nazivi. Vidi se da je Ellen Horton posudila više od jedne knjige, ali ovo nije najbolji način da prikaže ovu informaciju. Drugi zahtjev se može postaviti:


SELECT members.firstname AS "Ime", members.prezime AS "Prezime", count (*) KAO "Broj posuđenih knjiga" IZ posudbi PRIDRUŽITE knjige NA posudbama.bookid = books.bookid PRIDRUŽITE članovima NA members.memberid = posudbama .memberid WHERE books.author = "Dan Brown" GROUP BY members.firstname, members.prezime;

Što će nam dati željeni rezultat:


Ime Prezime Broj posuđenih knjiga
Mikrofon Willis 1
Ellen Horton 2

Gotovo sve agregacije dolaze s klauzulom GROUP BY. Ova stvar pretvara tablicu koja se može dohvatiti upitom u grupe tablica. Svaka grupa odgovara jedinstvenoj vrijednosti (ili grupi vrijednosti) za stupac koji smo naveli u GROUP BY. U našem primjeru pretvaramo rezultat iz prethodne vježbe u grupu redaka. Također radimo agregaciju s count, koja pretvara više redaka u cjelobrojnu vrijednost (u našem slučaju to je broj redaka). Zatim se ova vrijednost dodjeljuje svakoj grupi.


Svaki redak u rezultatu rezultat je združivanja svake grupe.



Možete doći do logičnog zaključka da bi sva polja u rezultatu trebala biti navedena u GROUP BY ili bi se na njima trebala izvršiti agregacija. Budući da se sva ostala polja mogu međusobno razlikovati u različitim redovima, a ako ih odaberete pomoću SELECT, nije jasno koju od mogućih vrijednosti treba uzeti.


U gornjem primjeru, funkcija brojanja obrađivala je sve retke (budući da smo brojali broj redaka). Druge funkcije poput zbroja ili max obrađuju samo navedene nizove. Na primjer, ako želimo saznati broj knjiga koje je napisao svaki autor, onda nam je potreban upit poput ovog:


ODABERI autora, zbroj (zaliha) IZ knjiga GRUPA PO autora;

Proizlaziti:


Autor iznos
Robin Sharma 4
Dan Brown 6
Ivan zeleni 3
amiški tripati 2

Ovdje funkcija zbroja obrađuje samo stupac zaliha i izračunava zbroj svih vrijednosti u svakoj grupi.

6. Potupiti


Potupiti su redoviti SQL upiti ugrađeni u veće upite. Dijele se u tri vrste prema vrsti vraćenog rezultata.

6.1 Dvodimenzionalna tablica

Postoje upiti koji vraćaju više stupaca. Dobar primjer je upit iz posljednje vježbe združivanja. Kao podupit, jednostavno će vratiti drugu tablicu prema kojoj se mogu postaviti novi upiti. Nastavljajući s prethodne vježbe, ako želimo saznati broj knjiga koje je napisao autor “Robin Sharma”, onda je jedan od mogućih načina korištenje podupita:


SELECT * FROM (ODABIR autora, zbroj (zaliha) IZ knjiga GRUPA PO autora) AS rezultati WHERE autor = "Robin Sharma";

Proizlaziti:



Može se napisati kao: ["Robin Sharma", "Dan Brown"]


2. Iskoristimo sada ovaj rezultat u novom upitu:


SELECT naslov, bookid FROM knjiga GDJE autora IN (ODABIR autora IZ (ODABIR autora, zbroj (zaliha) FROM knjiga GRUPA PO autoru) AS rezultati WHERE zbroj> 3);

Proizlaziti:


titula bookid
Izgubljeni simbol 2
Tko će plakati kad umreš? 3
Pakao 4

Ovo je isto kao:


ODABERITE naslov, knjižicu IZ knjiga GDJE autor IN ("Robin Sharma", "Dan Brown");

6.3 Individualne vrijednosti

Postoje upiti koji rezultiraju samo jednim redom i jednim stupcem. Mogu se tretirati kao konstantne vrijednosti i mogu se koristiti gdje god se koriste vrijednosti, kao što su operatori za usporedbu. Također se mogu koristiti kao dvodimenzionalne tablice ili nizovi s jednim elementom.


Informirajmo se, primjerice, o svim knjigama koje su trenutno iznad prosjeka u knjižnici.


Prosječan iznos se može dobiti na sljedeći način:


odaberite prosječno (zaliha) iz knjiga;

Što nam daje:


7. Napišite operacije

Većina upisa u bazu podataka prilično je jednostavan u usporedbi sa složenijim čitanjem.

7.1 Ažuriranje

Sintaksa za upit UPDATE semantički je ista kao i za upit za čitanje. Jedina razlika je u tome što umjesto odabira stupaca SELECT postavljamo vrijednosti SET.


Ako su sve knjige Dana Browna izgubljene, morate poništiti vrijednost količine. Zahtjev za to će biti ovakav:


AŽURIRANJE knjiga SET zaliha = 0 WHERE autor = "Dan Brown";

WHERE radi isto kao i prije: odabire retke. Umjesto SELECT koji smo koristili prilikom čitanja, sada koristimo SET. Međutim, sada morate navesti ne samo naziv stupca, već i novu vrijednost za ovaj stupac u odabranim recima.


7.2 Izbrisati

DELETE upit je samo upit SELECT ili UPDATE bez naziva stupaca. Ozbiljno. Kao i kod SELECT i UPDATE, klauzula WHERE ostaje ista: odabire retke za brisanje. Operacija brisanja uništava cijeli red, tako da nema smisla specificirati zasebne stupce. Dakle, ako odlučimo da ne poništimo broj knjiga Dana Browna, već da u potpunosti izbrišemo sve zapise, možemo uputiti sljedeći zahtjev:


IZBRIŠI IZ knjiga GDJE autor = "Dan Brown";

7.3 Umetak

Možda jedina stvar koja se razlikuje od ostalih vrsta upita je INSERT. Format je:


UMETNI U x (a, b, c) VRIJEDNOSTI (x, y, z);

Gdje su a, b, c nazivi stupaca, a x, y i z vrijednosti koje će se umetnuti u te stupce, istim redoslijedom. To je u osnovi to.


Pogledajmo konkretan primjer. Ovdje je INSERT upit koji ispunjava cijelu tablicu "knjige":


UMETNI U knjige (knjižnik, naslov, autor, objavljeno, dionica) VRIJEDNOSTI (1, "Potomak Ikšvakua", "Amiš Tripathi", "22.06.2015", 2), (2, "Izgubljeni simbol", " Dan Brown "," 22-07-2010 ", 3), (3, "Tko će plakati kad umreš?"," Robin Sharma "," 15-06-2006 ", 4), (4," Inferno " , "Dan Brown", "05-05-2014", 3), (5, "The Fault in our Stars", "John Green", "01-03-2015", 3);

8. Provjera

Došli smo do kraja, predlažem mali test. Taj zahtjev pogledajte na samom početku članka. Možete li to shvatiti? Pokušajte ga rastaviti na klauzule SELECT, FROM, WHERE, GROUP BY i razmotrite pojedinačne komponente potupita.


Evo ga, u čitljivijem obliku:


ODABIR članova.ime || "" || članovi.prezime KAO "Puno ime" FROM posudbe INNER JOIN members ON members.memberid = borrowings.memberid INNER JOIN knjige ON books.bookid = borrowings.bookid WHERE borrowings.bookid IN (ODABIR bookid FROM books WHERE stock> (ODABIR prosj. ) IZ knjiga)) GROUP BY članovi.ime, članovi.prezime;

Ovaj upit vraća popis ljudi koji su kupili knjigu iz knjižnice koja ima natprosječan ukupni iznos.


Proizlaziti:


Puno ime
Lida Tyler

Nadam se da ste uspjeli shvatiti bez problema. Ali ako ne, bio bih zahvalan na vašim komentarima i povratnim informacijama kako bih mogao poboljšati ovaj post.

Oznake: Dodaj oznake

Vrste podatakaSQL(Kako ustrkao u standardu)

Vrste nizova

Numerički tipovi podataka

Monetarni, karakterni, binarni tipovi podataka

Boolean tip. Nabrajanja

Primjeri najjednostavnijih SQL upita

Osnovni SELECT upiti

SQL SELECT izraz je najvažniji i najčešće korišten izraz. Dizajniran je za dohvaćanje informacija iz tablica baze podataka. Pojednostavljena sintaksa za SELECT izraz je sljedeća.

ODABIR [SVE | DISTINCT] select_item_commalist

FROM table_reference_commalist

[WHERE uvjetni_izraz]

[GROUP BY column_name_commalist]

[IMATI uvjetni_izraz]

[ORDER BY order_item_commalist]

U zahtjevu možda nedostaju stavke u uglastim zagradama.

Ključna riječ SELECT govori bazi podataka da je klauzula zahtjev za povlačenjem.

Nakon riječi SELECT navode se nazivi polja (popis atributa) čiji se sadržaj traži, odvojeni zarezima.

Potrebna ključna riječ u klauzuli SELECT je riječ FROM (od). Nakon ključne riječi FROM slijedi popis imena tablica odvojenih zarezima iz kojih se dohvaćaju informacije.

Na primjer, odaberite naslov, opis iz filma

Svaki SQL upit mora završiti s ";" (točka i zarez). Rezultat ovog upita bit će tablica...

Redoslijed stupaca u ovoj tablici odgovara redoslijedu polja navedenih u upitu

Ako trebate prikazati vrijednosti svih stupaca tablice, možete koristiti simbol "*" (zvjezdica) umjesto da navodite njihova imena.

ODABIR * IZ filma;

U ovom slučaju, rezultat izvršavanja upita bit će cijela filmska tablica.

Još jednom, obratimo pažnju na činjenicu da tablice dobivene kao rezultat SQL upita ne zadovoljavaju u potpunosti definiciju relacijskog odnosa. Konkretno, mogu sadržavati tuple (nizove) s istim vrijednostima atributa.

Na primjer, upit "popis imena glumaca" može se napisati na sljedeći način.

odaberite ime od glumca;

Njegov rezultat bit će tablica, tablica sadrži iste retke. Da biste izuzeli duple zapise iz rezultata upita SELECT, koristite ključnu riječ DISTINCT (drugačije).

Ako upit SELECT dohvaća više polja, tada DISTINCT eliminira duplicirane retke u kojima su vrijednosti svih odabranih polja identične.

Prethodni zahtjev može se napisati na sljedeći način.

odaberite različito ime od glumca;

Kao rezultat, dobivamo tablicu u kojoj su dupli retki isključeni.

Ključna riječ ALL, za razliku od DISTINCT, ima suprotan učinak, to jest, kada se koristi, dupli redovi se uključuju u izlaz. Način naveden ključnom riječi ALL je uključen prema zadanim postavkama, stoga se praktički ne koristi u tu svrhu u stvarnim upitima.

Korištenje klauzule definirane ključnom riječi WHERE (where) u naredbi SELECT omogućuje vam da navedete izraz uvjeta (predikat) koji prihvaća istinitu ili lažnu vrijednost za vrijednosti polja reda tablice na koja se izraz SELECT odnosi. Klauzula WHERE određuje koje retke navedenih tablica treba odabrati. Tablica, koja je rezultat upita, uključuje samo one retke za koje uvjet (predikat) naveden u klauzuli WHERE daje vrijednost istinitom.

Primjer: Napišite upit koji odabire prezimena svih glumaca po imenu PENELOPE

odaberite prezime od glumca

gdje je ime = "PENELOPA";

U uvjetima navedenim u klauzuli WHERE, operacije usporedbe definirane operatorima = (jednako),> (veće od),< (меньше), >= (veće ili jednako),<- (меньше или равно), <>(nije jednako), kao i logičke operatore AND, OR i NOT.

Na primjer, zahtjev za dobivanje naziva i opisa filmova - kratkih filmova (kraćih od 60 minuta), čiji najam košta manje od 3 dolara, izgledat će ovako:

odaberite naslov, opis iz filma

gdje dužina< 60 and rental_rate < 3

Rezultat ovog upita je:

najam - iznajmljivanje

inventar - inventar, zalihe

dućan- zaliha, trgovina

SQL jezik se koristi za dohvaćanje podataka iz baze podataka. SQL je programski jezik koji je vrlo sličan engleskom, ali dizajniran za programe upravljanja bazama podataka. SQL se koristi u svakom upitu u Accessu.

Razumijevanje kako SQL funkcionira pomaže vam u stvaranju točnijih upita i olakšava popravljanje upita koji vraćaju netočne rezultate.

Ovaj je članak dio serije o SQL-u za pristup. Opisuje osnove korištenja SQL-a za dohvaćanje podataka i daje primjere SQL sintakse.

U ovom članku

Što je SQL?

SQL je programski jezik za rad sa skupovima činjenica i međusobnim odnosima. Programi za upravljanje relacijskim bazama podataka kao što je Microsoft Office Access koriste SQL za manipulaciju podacima. Za razliku od mnogih programskih jezika, SQL je čitljiv i razumljiv čak i za početnike. Kao i mnogi programski jezici, SQL je međunarodni standard koji priznaju tijela za norme kao što su ISO i ANSI.

Skupovi podataka opisani su u SQL-u kako bi se odgovorilo na pitanja. Prilikom korištenja SQL-a mora se koristiti ispravna sintaksa. Sintaksa je skup pravila koja vam omogućuju da pravilno kombinirate elemente jezika. SQL sintaksa temelji se na engleskoj sintaksi i dijeli mnoge elemente sa sintaksom Visual Basica za aplikacije (VBA).

Na primjer, jednostavan SQL izraz koji dohvaća popis prezimena kontakata po imenu Mary mogao bi izgledati ovako:

ODABIR Prezime
IZ kontakata
WHERE Ime = "Marija";

Bilješka: SQL jezik se koristi ne samo za izvođenje operacija nad podacima, već i za stvaranje i modificiranje strukture objekata baze podataka, kao što su tablice. Dio SQL-a koji se koristi za stvaranje i modificiranje objekata baze podataka naziva se jezik opisa podataka DDL. DDL nije pokriven u ovom članku. Za više informacija pogledajte članak Stvaranje i izmjena tablica ili indeksa pomoću upita za definiciju podataka.

SELECT izjave

Naredba SELECT koristi se za opisivanje skupa podataka u SQL-u. Sadrži potpuni opis skupa podataka koji se može dohvatiti iz baze podataka, uključujući sljedeće:

    tablice koje sadrže podatke;

    veze između podataka iz različitih izvora;

    polja ili izračuni na temelju kojih se odabiru podaci;

    uvjeti odabira koje moraju zadovoljiti podaci uključeni u rezultat upita;

    potreba i način sortiranja.

SQL rečenice

SQL izraz se sastoji od nekoliko dijelova koji se nazivaju klauzule. Svaka klauzula u SQL naredbi ima drugačiju svrhu. Potrebni su neki prijedlozi. Sljedeća tablica navodi SQL izraze koji se najčešće koriste.

SQL klauzula

Opis

Obavezno

Definira polja koja sadrže podatke koje želite.

Definira tablice koje sadrže polja navedena u klauzuli SELECT.

Određuje kriterije za odabir polja koje moraju zadovoljiti svi zapisi uključeni u rezultate.

Određuje redoslijed sortiranja rezultata.

U SQL izrazu koji sadrži agregatne funkcije, identificira polja za koja klauzula SELECT ne izračunava zbirnu vrijednost.

Samo ako postoje takva polja

U SQL izrazu koji sadrži agregatne funkcije, definira uvjete koji se primjenjuju na polja za koja klauzula SELECT izračunava zbirnu vrijednost.

SQL pojmovi

Svaki SQL izraz sastavljen je od pojmova koji se mogu usporediti s dijelovima govora. Sljedeća tablica navodi vrste SQL pojmova.

SQL termin

Usporedivi dio govora

Definicija

Primjer

identifikator

imenica

Naziv koji se koristi za identifikaciju objekta baze podataka, kao što je naziv polja.

Kupci. [Telefonski broj]

operater

glagol ili prilog

Ključna riječ koja predstavlja ili mijenja radnju.

konstantno

imenica

Vrijednost koja se ne mijenja, kao što je broj ili NULL.

izraz

pridjev

Kombinacija identifikatora, operatora, konstanti i funkcija dizajniranih za izračunavanje jedne vrijednosti.

> = Roba. [Cijena]

Osnovne SQL klauzule: SELECT, FROM i WHERE

Opći format SQL naredbi:

ODABIR polje_1
IZ tablice_1
WHERE kriterij_1
;

Bilješke:

    Access ignorira prijelome redaka u SQL izrazima. Bez obzira na to, preporuča se da svaku rečenicu započnete u novom retku kako bi SQL izraz bio lak za čitanje, kako za osobu koja ju je napisala tako i za sve ostale.

    Svaki SELECT izraz završava točkom-zarezom (;). Točka-zarez se može pojaviti na kraju zadnje rečenice ili u zasebnom retku na kraju SQL izraza.

Primjer u Accessu

Sljedeći primjer pokazuje kako bi SQL izraz mogao izgledati u Accessu za jednostavan upit odabira.

1. klauzula SELECT

2. klauzula IZ

3. WHERE klauzula

Prođimo kroz primjer rečenicu po rečenicu kako bismo razumjeli kako funkcionira SQL sintaksa.

SELECT klauzula

SELECT, tvrtka

Ovo je SELECT klauzula. Sadrži izjavu (SELECT) iza koje slijede dva identifikatora ("[E-mail adresa]" i "Tvrtka").

Ako identifikator sadrži razmake ili posebne znakove (na primjer, "Adresa e-pošte"), mora biti stavljen u uglaste zagrade.

U klauzuli SELECT ne morate specificirati tablice koje sadrže polja i ne možete odrediti kriterije odabira koje moraju zadovoljiti podaci uključeni u rezultate.

U SELECT izrazu klauzula SELECT uvijek dolazi ispred klauzule FROM.

FROM klauzula

IZ kontakata

Ovo je klauzula FROM. Sadrži operator (FROM) nakon kojeg slijedi identifikator (Kontakti).

Polja za odabir nisu navedena u klauzuli FROM.

WHERE klauzula

WHERE City = "Seattle"

Ovo je klauzula WHERE. Sadrži operator (WHERE) iza kojeg slijedi izraz (Grad = "Rostov").

Postoji mnogo stvari koje možete učiniti s klauzulama SELECT, FROM i WHERE. Za više informacija o korištenju ovih prijedloga pogledajte sljedeće članke:

Rezultati sortiranja: ORDER BY

Kao i s Microsoft Excelom, Access može sortirati rezultate upita u tablici. Koristeći klauzulu ORDER BY, također možete odrediti kako se rezultati sortiraju prilikom pokretanja upita. Ako se koristi klauzula ORDER BY, ona se mora pojaviti na kraju SQL izraza.

Klauzula ORDER BY sadrži popis polja za sortiranje, istim redoslijedom kojim će se sortiranje primijeniti.

Na primjer, pretpostavimo da prvo želite sortirati rezultate prema polju Tvrtka u silaznom redoslijedu, a zatim, ako postoje zapisi s istom vrijednošću polja Tvrtka, sortirajte ih prema polju Adresa e-pošte uzlaznim redoslijedom. Klauzula ORDER BY izgledala bi ovako:

NARUDŽBA PREMA OPISU tvrtke,

Bilješka: Prema zadanim postavkama, Access razvrstava vrijednosti uzlaznim redoslijedom (od A do Z, od najmanjih do najvećih). Da biste umjesto toga sortirali vrijednosti silaznim redoslijedom, morate navesti ključnu riječ DESC.

Za više informacija o klauzuli ORDER BY pogledajte članak ORDER BY klauzula.

Rad sa zaokretnim podacima: klauzule GROUP BY i HAVING

Ponekad trebate raditi sa skupnim podacima, kao što su ukupna mjesečna prodaja ili najskuplji artikli na zalihama. Da biste to učinili, agregatna funkcija se primjenjuje na polje u klauzuli SELECT. Na primjer, ako upit rezultira brojem adresa e-pošte za svaku tvrtku, klauzula SELECT može izgledati ovako:

Mogućnost korištenja određene agregatne funkcije ovisi o vrsti podataka u polju i željenom izrazu. Za više informacija o dostupnim agregatnim funkcijama pogledajte članak SQL agregatne funkcije.

Određivanje polja koja se ne koriste u agregatnoj funkciji: klauzula GROUP BY

Kada koristite agregatne funkcije, obično trebate stvoriti klauzulu GROUP BY. Klauzula GROUP BY specificira sva polja koja nemaju primijenjenu agregatnu funkciju. Ako se agregatne funkcije primjenjuju na sva polja u upitu, tada ne morate kreirati klauzulu GROUP BY.

Klauzula GROUP BY mora odmah slijediti klauzulu WHERE ili FROM ako nema klauzule WHERE. U klauzuli GROUP BY polja su navedena istim redoslijedom kao u klauzuli SELECT.

Nastavimo s prethodnim primjerom. Ako klauzula SELECT primjenjuje agregatnu funkciju samo na polje [Adresa e-pošte], tada će klauzula GROUP BY izgledati ovako:

GRUPA PO Tvrtka

Za više informacija o klauzuli GROUP BY pogledajte članak GROUP BY klauzula.

Ograničavanje agregiranih vrijednosti korištenjem uvjeta grupiranja: klauzula HAVING

Ako trebate navesti uvjete za ograničavanje rezultata, ali polje na koje želite primijeniti se koristi u agregiranoj funkciji, ne možete koristiti klauzulu WHERE. Umjesto toga upotrijebite klauzulu HAVING. Klauzula HAVING funkcionira isto kao klauzula WHERE, ali se koristi za agregirane podatke.

Na primjer, pretpostavimo da primijenite AVG funkciju (koja izračunava prosjek) na prvo polje u klauzuli SELECT:

SELECT COUNT (), Tvrtka

Ako želite ograničiti rezultate upita na temelju vrijednosti funkcije COUNT, ne možete primijeniti uvjet filtra na to polje u klauzuli WHERE. Umjesto toga, uvjet treba staviti u klauzulu HAVING. Na primjer, ako želite da upit vrati retke samo ako tvrtka ima više adresa e-pošte, možete koristiti sljedeću klauzulu HAVING:

IMATI BROJ ()> 1

Bilješka: Upit može uključivati ​​i klauzulu WHERE i klauzulu HAVING, s kriterijima za polja koja se ne koriste u agregatnim funkcijama navedenim u klauzuli WHERE i uvjetima za polja koja se koriste u agregatnim funkcijama u klauzuli HAVING.

Za više informacija o klauzuli HAVING, pogledajte članak HAVING klauzula.

Kombiniranje rezultata upita: UNION operator

Operator UNION koristi se za pregled svih podataka koje vraća više, sličnih upita za odabir u isto vrijeme kao spojeni skup.

UNION operator vam omogućuje kombiniranje dvaju SELECT izraza u jedan. Izrazi SELECT koji se spajaju moraju imati isti broj i redoslijed izlaznih polja s istim ili kompatibilnim tipovima podataka. Kada pokrenete upit, podaci iz svakog skupa odgovarajućih polja kombiniraju se u jedno izlazno polje, tako da izlaz upita ima isti broj polja kao i svaki SELECT izraz pojedinačno.

Bilješka: U upitima unije, numerički i tekstualni tipovi podataka su kompatibilni.

Pomoću operatora UNION možete odrediti trebaju li se duplirani retki, ako ih ima, uključiti u rezultate upita. Da biste to učinili, koristite ključnu riječ SVE.

Upit za kombiniranje dvaju SELECT izraza ima sljedeću osnovnu sintaksu:

ODABIR polje_1
IZ tablice_1
UNIJA
ODABIR polje_a
IZ tablice_a
;

Na primjer, pretpostavimo da imate dvije tablice pod nazivom "Proizvodi" i "Usluge". Obje tablice sadrže polja s nazivom proizvoda ili usluge, podacima o cijeni i jamstvu, kao i polje koje označava ekskluzivnost ponuđenog proizvoda ili usluge. Iako postoje različite vrste jamstava u tablicama Proizvodi i usluge, osnovni podaci su isti (postoji li jamstvo kvalitete za pojedine proizvode ili usluge). Možete koristiti sljedeći upit za spajanje za kombiniranje četiri polja iz dvije tablice:

SELECT naziv, cijena, jamstvo_dostupno, ekskluzivna_ponuda
IZ proizvoda
UNIJA SVI
SELECT naziv, cijena, jamstvo_dostupno, ekskluzivna_ponuda
IZ usluga
;

Za više informacija o kombiniranju izraza SELECT pomoću UNION operatora, pogledajte članak

Zahtjevi se pišu bez izbjegavanja citata, budući da MySQL, MS SQL i PostGree oni su različiti.

SQL upit: dobivanje specificiranih (obaveznih) polja iz tablice

SELECT id, country_title, count_people FROM table_name

Dobivamo popis zapisa: SVE zemlje i njihovo stanovništvo. Nazivi obaveznih polja odvojeni su zarezima.

SELECT * FROM ime_tablice

* označava sva polja. Odnosno, bit će dojmova SVE podatkovna polja.

SQL upit: izlazni zapisi iz tablice isključujući duplikate

ODABIR DISTINCT naziv_države IZ naziv_tablice

Dobivamo popis zapisa: zemlje u kojima se nalaze naši korisnici. Može biti mnogo korisnika iz jedne zemlje. U ovom slučaju, ovo je vaš zahtjev.

SQL upit: prikaz zapisa iz tablice prema specificiranom uvjetu

SELECT id, country_title, city_title FROM table_name WHERE count_people> 100000000

Dobivamo popis zapisa: zemlje u kojima je broj ljudi veći od 100.000.000.

SQL upit: prikaz zapisa iz tablice s redoslijedom

SELECT id, city_title FROM table_name ORDER BY city_title

Dobivamo popis zapisa: gradovi po abecednom redu. Na početku A, na kraju I.

SELECT id, city_title FROM table_name ORDER BY city_title DESC

Dobivamo popis zapisa: gradovi u obrnutom smjeru ( DESC) u redu. Na početku ja, na kraju A.

SQL upit: brojenje broja zapisa

SELECT COUNT (*) FROM table_name

Dobivamo broj (broj) zapisa u tablici. U ovom slučaju NEMA popisa zapisa.

SQL upit: ispis potrebnog raspona zapisa

SELECT * FROM table_name LIMIT 2, 3

Dobivamo 2 (drugi) i 3 (treći) zapisa iz tablice. Zahtjev je koristan kod izrade navigacije na WEB stranicama.

SQL upiti s uvjetima

Izlaz zapisa iz tablice prema zadanom uvjetu pomoću logičkih operatora.

SQL upit: I konstrukcija

SELECT id, city_title FROM table_name WHERE zemlja = "Rusija" I nafta = 1

Dobivamo popis zapisa: gradovi iz Rusije I imati pristup ulju. Kada se koristi operator I, tada se oba uvjeta moraju podudarati.

SQL upit: OR konstrukcija

SELECT id, city_title FROM table_name WHERE zemlja = "Rusija" OR zemlja = "SAD"

Dobivamo popis zapisa: svi gradovi iz Rusije ILI SAD. Kada se koristi operator ILI, tada se barem jedan uvjet mora podudarati.

SQL upit: I NE konstruirajte

SELECT id, user_login FROM table_name WHERE zemlja = "Rusija" I NE count_comments<7

Dobivamo popis zapisa: svi korisnici iz Rusije I koji je napravio NE MANJE 7 komentara.

SQL upit: IN (B) konstrukcija

SELECT id, user_login FROM table_name WHERE country IN ("Rusija", "Bugarska", "Kina")

Dobivamo popis zapisa: svi korisnici koji žive u ( U) (Rusija, ili Bugarska, ili Kina)

SQL upit: NIJE U izgradnji

SELECT id, user_login FROM table_name WHERE country NOT IN ("Rusija", "Kina")

Dobivamo popis zapisa: svi korisnici koji ne žive u ( NE U) (Rusija ili Kina).

SQL upit: IS NULL konstrukcija (prazne ili NE prazne vrijednosti)

SELECT id, user_login FROM table_name WHERE status JE NULL

Dobivamo popis zapisa: svi korisnici kod kojih status nije definiran. NULL je zasebna tema i stoga se provjerava zasebno.

SELECT id, user_login FROM table_name WHERE stanje NIJE NULL

Dobivamo popis zapisa: svi korisnici kod kojih je definiran status (NE NULA).

SQL upit: LIKE konstrukcija

SELECT id, user_login FROM table_name GDJE prezime KAO "Ivan%"

Dobivamo popis zapisa: korisnika čije prezime počinje kombinacijom "Ivan". Znak % znači BILO KOJI broj BILO KOJI znakova. Da biste pronašli znak %, trebate upotrijebiti izlazni "Ivan \%".

SQL upit: BETWEEN konstrukcija

SELECT id, user_login FROM table_name GDJE plaća IZMEĐU 25000 I 50000

Dobivamo popis zapisa: korisnici koji primaju plaće od 25.000 do 50.000 uključujući.

Postoji PUNO logičkih operatora, stoga detaljno proučite dokumentaciju SQL poslužitelja.

Složeni SQL upiti

SQL upit: kombiniranje više upita

(ODABIR ID, user_login IZ table_name1) UNION (SELECT id, user_login FROM table_name2)

Dobivamo popis zapisa: korisnika koji su registrirani u sustavu, kao i onih korisnika koji su posebno registrirani na forumu. Više upita može se kombinirati s UNION operatorom. UNION djeluje kao SELECT DISTINCT, odnosno odbacuje duplicirane vrijednosti. Da biste dobili apsolutno sve zapise, trebate koristiti operator UNION ALL.

SQL upit: brojanje vrijednosti polja MAX, MIN, SUM, AVG, COUNT

Izlaz jedan, maksimalna vrijednost brojača u tablici:

SELECT MAX (brojač) FROM table_name

Izlaz jedan, minimalna vrijednost brojača u tablici:

SELECT MIN (brojač) FROM table_name

Prikaz zbroja svih vrijednosti brojača u tablici:

SELECT SUM (brojač) FROM table_name

Prikaz prosječne vrijednosti brojača u tablici:

SELECT AVG (brojač) IZ table_name

Prikaz broja brojača u tablici:

SELECT COUNT (brojac) FROM table_name

Prikaz broja brojača u radionici br. 1, u tablici:

SELECT COUNT (counter) FROM table_name WHERE office = "Trgovina br. 1"

Ovo su najpopularnije naredbe. Preporuča se, gdje je to moguće, koristiti SQL upite ove vrste za izračun, budući da se nijedno programsko okruženje ne može usporediti u brzini obrade podataka sa samim SQL poslužiteljem prilikom obrade vlastitih podataka.

SQL upit: grupiranje zapisa

SELECT kontinent, SUM (country_area) IZ zemlje GROUP BY kontinent

Dobivamo popis zapisa: s imenom kontinenta i sa zbrojem površina svih njihovih zemalja. Odnosno, ako postoji imenik zemalja u kojima svaka zemlja ima svoje područje, tada pomoću klauzule GROUP BY možete saznati veličinu svakog kontinenta (na temelju grupiranja po kontinentima).

SQL upit: korištenje više tablica putem aliasa

ODABERITE o.order_no, o.amount_paid, c.company IZ narudžbi KAO o, kupac KAO s GDJE o.custno = c.custno I c.city = "Tyumen"

Dobivamo popis zapisa: narudžbe kupaca koji žive samo u Tjumenu.

Naime, s pravilno dizajniranom bazom podataka ovog tipa, upit je najčešći, stoga je u MySQL uveden poseban operator koji radi višestruko brže od gore napisanog koda.

ODABERITE o.order_no, o.amount_paid, z.company IZ narudžbi KAO o LIJEVI PRIDRUŽITE se kupcu AS z ON (z.custno = o.custno)

Ugniježđeni podupiti

SELECT * FROM table_name WHERE plaća = (ODABIR MAX (plaća) FROM zaposlenika)

Dobivamo jedan zapis: podatke o korisniku s maksimalnom plaćom.

Pažnja! Ugniježđeni potupiti jedno su od uskih grla u SQL poslužiteljima. Zajedno sa svojom fleksibilnošću i snagom, također značajno povećavaju opterećenje poslužitelja. Što dovodi do katastrofalnog usporavanja rada ostalih korisnika. Slučajevi rekurzivnih poziva s ugniježđenim upitima vrlo su česti. Stoga toplo preporučam da NE koristite ugniježđene upite, već da ih razbijete na manje. Ili upotrijebite gornju kombinaciju LEFT JOIN. Osim ove vrste zahtjeva, zahtjevi su pojačano žarište sigurnosnih povreda. Ako se odlučite koristiti ugniježđene potupite, tada ih morate vrlo pažljivo dizajnirati i izvršiti početna izvođenja na kopijama baza podataka (testne baze podataka).

SQL upiti mijenjaju podatke

SQL upit: INSERT

Upute UMETNUTI omogućuju vam umetanje zapisa u tablicu. Jednostavnim riječima, stvorite redak s podacima u tablici.

Opcija broj 1. Uputa se često koristi:

INSERT INTO table_name (id, user_login) VRIJEDNOSTI (1, "ivanov"), (2, "petrov")

U stolu " naziv_tablice„Odjednom će biti umetnuta 2 (dva) korisnika.

Opcija broj 2. Prikladnije je koristiti stil:

INSERT table_name SET id = 1, user_login = "ivanov"; INSERT table_name SET id = 2, user_login = "petrov";

To ima svoje prednosti i nedostatke.

Glavni nedostaci:

  • Mnogi mali SQL upiti rade nešto sporije od jednog velikog SQL upita, ali ostali upiti bit će stavljeni u red za uslugu. Odnosno, ako se veliki SQL upit izvršava 30 minuta, tada će tijekom cijelog tog vremena ostali upiti dimiti bambus i čekati svoj red.
  • Pokazalo se da je zahtjev masivniji od prethodne verzije.

Glavne prednosti:

  • Tijekom malih SQL upita, drugi SQL upiti nisu blokirani.
  • Lakoća čitanja.
  • Fleksibilnost. U ovoj opciji ne možete pratiti strukturu, već dodati samo potrebne podatke.
  • Prilikom formiranja arhiva na ovaj način, možete jednostavno kopirati jedan redak i pokrenuti ga kroz naredbeni redak (konzolu), čime se ne vraća cijela ARHIVA.
  • Stil pisanja sličan je izjavi UPDATE, što olakšava pamćenje.

SQL upit: UPDATE

UPDATE table_name SET user_login = "ivanov", user_surname = "Ivanov" WHERE id = 1

U stolu " naziv_tablice"U zapisu s id = 1, vrijednosti polja user_login i user_surname bit će promijenjene na navedene vrijednosti.

SQL upit: DELETE

DELETE FROM table_name WHERE id = 3

Zapis s ID brojem 3 bit će obrisan u tablici table_name.

  1. Preporuča se pisati sva imena polja malim slovima i, ako je potrebno, odvojiti ih prisilnim razmakom "_" radi kompatibilnosti s različitim programskim jezicima kao što su Delphi, Perl, Python i Ruby.
  2. Napišite SQL naredbe VELIKIM slovima radi čitljivosti. Uvijek zapamtite da drugi ljudi mogu pročitati kod nakon vas, a najvjerojatnije i vi sami nakon N vremena.
  3. Imenujte polja s početka imenice, a zatim radnju. Na primjer: status_grad, prijava korisnika, korisničko ime.
  4. Pokušajte izbjeći zamjenske riječi na različitim jezicima koje mogu uzrokovati probleme u SQL-u, PHP-u ili Perlu, kao što su (ime, broj, veza). Na primjer: veza se može koristiti u MS SQL-u, ali je rezervirana u MySQL-u.

Ovaj materijal je kratka referenca za svakodnevni rad i ne tvrdi da je super mega mjerodavan izvor, koji je primarni izvor SQL upita za određenu bazu podataka.

Tablični izrazi potupiti su imenovani i koriste se tamo gdje se očekuje da tablica postoji. Postoje dvije vrste tabličnih izraza:

    izvedene tablice;

    generalizirani tablični izrazi.

Ova dva oblika tabličnih izraza razmatraju se u sljedećim pododjeljcima.

Izvedene tablice

Izvedena tablica je tablični izraz uključen u klauzulu FROM upita. Izvedene tablice mogu se koristiti kada pseudonimi stupaca nisu izvedivi jer SQL prevoditelj obrađuje drugi izraz prije nego što je alias poznat. Primjer u nastavku pokušava koristiti pseudonim stupca u situaciji u kojoj se druga klauzula obrađuje prije nego što je alias poznat:

KORISTITE SampleDb; ODABIR MJESEC (EnterDate) kao enter_month FROM Works_on GROUP BY enter_month;

Pokušaj izvršenja ovog upita rezultirat će sljedećom porukom o pogrešci:

Poruka 207, razina 16, stanje 1, redak 5 Nevažeći naziv stupca "enter_month". (Poruka 207: Razina 16, stanje 1, redak 5 Nevažeći naziv stupca enter_month)

Uzrok pogreške je taj što se klauzula GROUP BY obrađuje prije nego što se obradi pridruženi popis SELECT, a pseudonim stupca enter_month nije poznat prilikom obrade ove grupe.

Ovaj se problem može riješiti korištenjem izvedene tablice koja sadrži prethodni upit (bez klauzule GROUP BY), budući da se klauzula FROM izvršava prije klauzule GROUP BY:

KORISTITE SampleDb; SELECT enter_month FROM (ODABIR MJESEC (EnterDate) kao enter_month FROM Works_on) AS m GROUP BY enter_month;

Rezultat izvršavanja ovog upita bit će ovakav:

Obično se izraz tablice može postaviti bilo gdje u izrazu SELECT gdje se može pojaviti naziv tablice. (Rezultat izraza tablice uvijek je tablica ili, u posebnim slučajevima, izraz.) Sljedeći primjer pokazuje upotrebu tabličnog izraza na popisu odabira izraza SELECT:

Rezultat ovog upita:

Generalizirani tablični izrazi

Zajednički tablični izraz (CTE) je izraz imenovane tablice koji podržava Transact-SQL jezik. Generički tablični izrazi koriste se u sljedeće dvije vrste upita:

    nerekurzivni;

    ponavljajući.

Ove dvije vrste zahtjeva razmatraju se u sljedećim odjeljcima.

OTB i nerekurzivni upiti

Nerekurzivni OTB obrazac možete koristiti kao alternativu izvedenim tablicama i pogledima. Obično se OTB definira po SA klauzulama i izborni upit koji upućuje na ime korišteno u klauzuli WITH. Ključna riječ WITH je dvosmislena u Transact-SQL-u. Kako biste izbjegli dvosmislenost, završite izraz koji prethodi klauzuli WITH točkom i zarezom.

KORISTI AdventureWorks2012; ODABIR SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue> (ODABIR AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate) = "2005") AND Freight> (ODABIR PROSJEČNI (TotalDue) FROMOOr0rHeEARte2 Sales. 2,5;

Upit u ovom primjeru odabire narudžbe čiji su ukupni porezi (TotalDue) veći od prosjeka za sve poreze i čiji su troškovi prijevoza (Freight) veći od 40% prosjeka za poreze. Glavno svojstvo ovog upita je njegov volumen, budući da je potupit potrebno napisati dvaput. Jedan od mogućih načina za smanjenje veličine konstrukcije upita je stvaranje pogleda koji sadrži potupit. Ali ovo rješenje je donekle teško, jer zahtijeva kreiranje pogleda, a zatim njegovo brisanje nakon završetka izvršenja upita. Najbolji pristup bio bi stvoriti OTB. Primjer u nastavku pokazuje upotrebu nerekurzivnog OTB-a, koji skraćuje gornju definiciju upita:

KORISTI AdventureWorks2012; WITH price_calc (year_2005) AS (SELECT AVG (TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR (OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue> (SELECT FROM year_20cal)

Sintaksa za klauzulu WITH u nerekurzivnim upitima je:

Parametar cte_name predstavlja OTB ime koje identificira rezultirajuću tablicu, a parametar column_list predstavlja popis stupaca u izrazu tablice. (U gornjem primjeru, OTB je nazvan price_calc i ima jedan stupac, year_2005.) Parametar inner_query predstavlja izraz SELECT koji definira skup rezultata odgovarajućeg izraza tablice. Definirani tablični izraz se tada može koristiti u vanjskom upitu outer_query. (Vanjski upit u gornjem primjeru koristi OTB price_calc i njegov stupac year_2005 da pojednostavi dvostruko ugniježđeni upit.)

OTB i rekurzivni upiti

Ovaj dio predstavlja materijal povećane složenosti. Stoga se pri prvom čitanju preporuča preskočiti i vratiti se kasnije. OTB-ovi mogu implementirati rekurzije budući da OTB-ovi mogu sadržavati reference na sebe. Osnovna OTB sintaksa za rekurzivni upit izgleda ovako:

Parametri cte_name i column_list imaju isto značenje kao u OTB-u za nerekurzivne upite. Tijelo klauzule WITH sastoji se od dva upita koja kombinira operator UNIJA SVI... Prvi upit se poziva samo jednom i počinje akumulirati rezultat rekurzije. Prvi operand operatora UNION ALL ne odnosi se na OTB. Ovaj se upit naziva referentnim upitom ili izvorom.

Drugi zahtjev sadrži vezu na OTB i predstavlja njegov rekurzivni dio. Zbog toga se naziva rekurzivnim članom. U prvom pozivu rekurzivnom dijelu, OTB referenca predstavlja rezultat referentnog upita. Rekurzivni član koristi rezultat prvog poziva na upit. Nakon toga, sustav ponovno poziva rekurzivni dio. Poziv rekurzivnom članu se prekida kada mu prethodni poziv vrati prazan skup rezultata.

Operator UNION ALL spaja trenutno akumulirane nizove, kao i dodatne nizove dodane trenutnim pozivom rekurzivnom članu. (Prisutnost operatora UNION ALL znači da se duplikati redaka neće ukloniti iz rezultata.)

Konačno, parametar outer_query definira vanjski upit koji koristi OTB za dobivanje svih poziva u uniju oba člana.

Da bismo demonstrirali rekurzivni OTB obrazac, koristimo tablicu Airplane definiranu i popunjenu kodom prikazanim u primjeru ispod:

KORISTITE SampleDb; CREATE TABLE Zrakoplov (ContainingAssembly VARCHAR (10), ContainedAssembly VARCHAR (10), QuantityContained INT, UnitCost DECIMAL (6,2)); INSERT INTO Airplane VRIJEDNOSTI ("Airplane", "Fuselaž", 1, 10); INSERT INTO Airplane VRIJEDNOSTI ("Airplane", "Wings", 1, 11); INSERT INTO Airplane VALUES ("Airplane", "Rep", 1, 12); UMETNI U VRIJEDNOSTI ZRAKA ("Fuselage", "Salon", 1, 13); UMETNI U VRIJEDNOSTI ZRAKA ("Fuselaž", "Kabina", 1, 14); UMETNI U VRIJEDNOSTI ZRAKA ("Fuselage", "Nose", 1, 15); UMETNI U VRIJEDNOSTI ZRAKA ("Salon", NULL, 1.13); UMETNI U VRIJEDNOSTI ZRAKA ("Kabina", NULL, 1, 14); UMETNI U VRIJEDNOSTI ZRAKA ("Nos", NULL, 1, 15); UMETNI U VRIJEDNOSTI ZRAKA ("Krila", NULL, 2, 11); UMETNI U VRIJEDNOSTI ZRAKA ("Rep", NULL, 1, 12);

Tablica Airplane ima četiri stupca. Stupac ContainingAssembly identificira sklop, a stupac ContainedAssembly identificira dijelove (jedan za drugim) koji čine odgovarajući sklop. Slika ispod daje grafički prikaz mogućeg tipa zrakoplova i njegovih sastavnih dijelova:

Tablica Airplane sastoji se od sljedećih 11 redaka:

Primjer u nastavku prikazuje klauzulu WITH koja se koristi za definiranje upita koji izračunava ukupni trošak svakog sklopa:

KORISTITE SampleDb; WITH list_of_parts (assembly1, quantity, cost) AS (ODABIR ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly JE NULL UNION SVE SELECT a.ContainingAssembly, a.QuantityContained, CAST (l.QuantityContained, CAST,l.IM.c.) (l. ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Dio", količina "Qty", cijena "Cijena" FROM list_of_parts;

Klauzula WITH definira OTB listu pod nazivom list_of_parts s tri stupca: sklop1, količina i cijena. Prvi SELECT izraz u primjeru poziva se samo jednom kako bi se sačuvali rezultati prvog koraka procesa rekurzije. Naredba SELECT u zadnjem retku primjera prikazuje sljedeći rezultat.

Vrhunski povezani članci