Ms sql upiti poslužitelja. Primjer kreiranja upita (Query) u MS SQL Server bazi podataka

Zadnja izmjena: 05.07.2017

U prethodnoj temi je napravljena jednostavna baza podataka s jednom tablicom u SQL Management Studio. Sada definirajmo i izvršimo prvi SQL upit. Da biste to učinili, otvorite SQL Management Studio, desnom tipkom miša kliknite element najviše razine u Object Exploreru (naziv poslužitelja) i odaberite New Query iz kontekstnog izbornika koji se pojavi:

Nakon toga će se u središnjem dijelu programa otvoriti prozor za unos SQL naredbi.

Pokrenimo upit na tablici koja je stvorena u prethodnoj temi, konkretno, iz nje ćemo dobiti sve podatke. Naša baza podataka zove se sveučilišna, a tablica dbo.Studenti, pa da bismo dobili podatke iz tablice upisujemo sljedeći upit:

SELECT * FROM sveučilište.dbo.Studenti

Naredba SELECT omogućuje odabir podataka. FROM navodi izvor iz kojeg se preuzimaju podaci. Zapravo, ovim upitom kažemo "SELECT all FROM the university.dbo.Students table". Vrijedno je napomenuti da naziv tablice koristi punu putanju koja označava bazu podataka i shemu.

Nakon unosa zahtjeva kliknite na gumb Izvrši na alatnoj traci ili možete pritisnuti tipku F5.

Kao rezultat izvršenja upita, na dnu programa pojavit će se mala tablica koja će prikazati rezultate upita – odnosno sve podatke iz tablice Učenici.

Ako trebamo napraviti više upita prema istoj bazi podataka, tada možemo koristiti naredbu USE da predamo bazu podataka. U ovom slučaju, prilikom upita za tablice, dovoljno je navesti njihov naziv bez naziva baze podataka i sheme:

KORISTITI sveučilište SELECT * FROM Studenti

U ovom slučaju izvršavamo upit kao cjelinu za poslužitelj; možemo pristupiti bilo kojoj bazi podataka na poslužitelju. Ali također možemo vršiti upite samo unutar određene baze podataka. Da biste to učinili, desnom tipkom miša kliknite željenu bazu podataka i odaberite Novi upit iz kontekstnog izbornika:

Ako bismo u ovom slučaju htjeli postaviti upit tablici Studenti korištenoj gore, ne bismo morali navesti naziv baze podataka i shemu u upitu, budući da bi te vrijednosti već bile jasne.

SQL Server Management Studio pruža kompletan alat za kreiranje svih vrsta upita. Uz njegovu pomoć možete stvarati, spremati, učitavati i uređivati ​​upite. Osim toga, možete raditi na upitima bez povezivanja s bilo kojim poslužiteljem. Ovaj alat također pruža mogućnost razvoja upita za različite projekte.

S upitima možete raditi pomoću Uređivača upita ili Istraživača rješenja. Ovaj članak pokriva oba ova alata. Uz ove dvije komponente SQL Server Management Studija, pogledat ćemo ispravljanje pogrešaka SQL koda pomoću ugrađenog programa za ispravljanje pogrešaka.

Uređivač upita

Za otvaranje ploče uređivača upita Uređivač upita, na alatnoj traci SQL Server Management Studio kliknite gumb Novi upit. Ova se ploča može proširiti za prikaz gumba za stvaranje svih mogućih upita, a ne samo upita Database Engine. Prema zadanim postavkama stvara se novi upit Database Engine, ali također možete stvoriti MDX, XMLA i druge upite klikom na odgovarajući gumb na alatnoj traci.

Statusna traka na dnu ploče uređivača upita označava status veze uređivača s poslužiteljem. Ako se na poslužitelj ne povežete automatski, kada pokrenete uređivač upita, pojavit će se dijaloški okvir Povezivanje s poslužiteljem koji vam omogućuje odabir poslužitelja na koji se želite povezati i načina provjere autentičnosti.

Uređivanje upita izvan mreže pruža veću fleksibilnost nego kada je spojen na poslužitelj. Za uređivanje upita nije potrebno spajanje na poslužitelj, a prozor uređivača upita se može odspojiti s jednog poslužitelja (koristeći naredbu izbornika Upit --> Veza --> Prekini vezu) i spojiti na drugi bez otvaranja drugog prozora uređivača. Za odabir izvanmrežnog načina uređivanja, u dijaloškom okviru veze s poslužiteljem koji se otvara kada pokrenete uređivač za određenu vrstu upita, jednostavno kliknite gumb Odustani.

Uređivač upita možete koristiti za izvođenje sljedećih zadataka:

    stvaranje i izvršavanje Transact-SQL naredbi;

    spremanje kreiranih Transact-SQL jezičnih iskaza u datoteku;

    stvaranje i analiziranje planova izvršenja za uobičajene upite;

    grafički ilustrirajući plan izvršenja odabranog upita.

Uređivač upita sadrži ugrađeni uređivač teksta i alatnu traku sa skupom gumba za različite akcije. Glavni prozor uređivača upita vodoravno je podijeljen na ploču upita (na vrhu) i ploču s rezultatima (na dnu). Transact-SQL izjave (odnosno upiti) koje treba izvršiti unose se u gornjem oknu, a rezultati sistemske obrade tih upita prikazuju se u donjem oknu. Slika ispod prikazuje primjer unosa upita u uređivač upita i rezultate izvršavanja tog upita:

Prva izjava USE zahtjeva navodi upotrebu baze podataka SampleDb kao trenutne baze podataka. Druga naredba, SELECT, dohvaća sve retke iz tablice Employee. Za pokretanje ovog upita i prikaz rezultata, na alatnoj traci uređivača upita kliknite gumb Izvrši ili pritisnite F5.

Možete otvoriti nekoliko prozora uređivača upita, tj. napraviti višestruke veze s jednom ili više instanci Database Engine. Nova se veza stvara klikom na gumb New Query na alatnoj traci SQL Server Management Studio.

Statusna traka na dnu prozora uređivača upita prikazuje sljedeće informacije vezane uz izvršavanje naredbi upita:

    status trenutne operacije (na primjer, "Zahtjev uspješno dovršen");

    naziv poslužitelja baze podataka;

    trenutno korisničko ime i ID procesa poslužitelja;

    trenutni naziv baze podataka;

    vrijeme potrošeno na izvršenje posljednjeg zahtjeva;

    broj pronađenih linija.

Jedna od glavnih prednosti SQL Server Management Studija je jednostavnost korištenja, što se također odnosi i na Query Editor. Uređivač upita pruža mnoge značajke koje olakšavaju kodiranje Transact-SQL izjava. Konkretno, koristi isticanje sintakse za poboljšanje čitljivosti Transact-SQL izjava. Sve rezervirane riječi prikazane su plavom bojom, varijable crnom, nizovi crvenom, a komentari zelenom.

Osim toga, uređivač upita opremljen je kontekstualno osjetljivom pomoći tzv Dinamička pomoć, putem kojeg se možete informirati o određenoj uputi. Ako ne znate sintaksu instrukcije, odaberite je u uređivaču, a zatim pritisnite tipku F1. Također možete istaknuti parametre različitih Transact-SQL iskaza da biste dobili pomoć o njima od Books Online.

SQL Management Studio podržava SQL Intellisense, koji je vrsta alata za automatsko dovršavanje. Drugim riječima, ovaj modul predlaže najvjerojatnije dovršavanje djelomično unesenih elemenata iskaza Transact-SQL.

Istraživač objekata također vam može pomoći u uređivanju upita. Na primjer, ako želite znati kako stvoriti naredbu CREATE TABLE za tablicu Employee, desnom tipkom miša kliknite tablicu u Object Exploreru i odaberite Script Table As --> CREATE to --> New Query Editor Window iz kontekstnog izbornika koji pojavljuju se tablice --> pomoću CREATE --> New Query Editor Window). Prozor uređivača upita koji sadrži naredbu CREATE TABLE kreiranu na ovaj način prikazan je na slici ispod. Ova značajka također se odnosi na druge objekte, kao što su pohranjene procedure i funkcije.

Object Browser vrlo je koristan za grafički prikaz plana izvršenja određenog upita. Plan izvršenja upita je opcija izvršenja koju je odabrao optimizator upita među nekoliko mogućih opcija za izvršavanje određenog upita. Unesite traženi upit u gornju ploču uređivača, odaberite niz naredbi iz izbornika Upit --> Prikaži procijenjeni plan izvršenja i plan izvršenja za ovaj upit bit će prikazan na donjoj ploči prozora uređivača.

Istraživač rješenja

Uređivanje upita u SQL Server Management Studio temelji se na metodi rješenja. Ako kreirate prazan upit pomoću gumba Novi upit, on će se temeljiti na praznom rješenju. To možete vidjeti pokretanjem niza naredbi iz izbornika View --> Solution Explorer odmah nakon otvaranja praznog upita.

Odluka se može odnositi niti na jedan, jedan ili više projekata. Prazno rješenje, koje nije povezano ni s jednim projektom. Da biste pridružili projekt rješenju, zatvorite prazno rješenje, Solution Explorer i Query Editor te izradite novi projekt pokretanjem File --> New --> Project. U prozoru Novi projekt koji se otvori odaberite opciju Skripte SQL Servera u srednjem oknu. Projekt je način organiziranja datoteka na određenom mjestu. Možete dodijeliti naziv projektu i odabrati mjesto za njegovu lokaciju na disku. Kada izradite novi projekt, automatski se pokreće novo rješenje. Možete dodati projekt postojećem rješenju koristeći Solution Explorer.

Za svaki kreirani projekt, Solution Explorer prikazuje mape Connections, Queries i Miscellaneous. Da biste otvorili novi prozor uređivača upita za određeni projekt, desnom tipkom miša kliknite njegovu mapu Upiti i odaberite Novi upit iz kontekstnog izbornika.

Otklanjanje pogrešaka SQL Servera

SQL Server, počevši od SQL Servera 2008, ima ugrađen program za ispravljanje pogrešaka koda. Za početak sesije otklanjanja pogrešaka odaberite Debug --> Start Debugging iz glavnog izbornika SQL Server Management Studio. Pogledat ćemo kako program za ispravljanje pogrešaka radi na primjeru s nizom naredbi. Paket je logičan slijed SQL naredbi i proceduralnih proširenja koji se šalje Database Engineu kako bi izvršio sve naredbe koje sadrži.

Slika ispod prikazuje paket koji broji broj zaposlenika koji rade na projektu p1. Ako je taj broj 4 ili više, prikazuje se odgovarajuća poruka. Inače se prikazuju imena i prezimena zaposlenika.

Kako biste zaustavili izvršavanje paketa na određenoj instrukciji, možete postaviti točke prekida, kao što je prikazano na slici. Da biste to učinili, kliknite lijevo od linije na kojoj želite stati. Kada otklanjanje pogrešaka započne, izvršenje se zaustavlja na prvoj liniji koda, koja je označena žutom strelicom. Za nastavak izvođenja i otklanjanja pogrešaka odaberite naredbu izbornika Debug --> Continue. Skupne upute nastavit će se izvršavati do prve prijelomne točke, a žuta strelica zaustavit će se na toj točki.

Informacije koje se odnose na proces otklanjanja pogrešaka prikazane su na dvije ploče na dnu prozora uređivača upita. Informacije o različitim vrstama informacija o otklanjanju pogrešaka grupirane su u ovim pločama u nekoliko kartica. Lijevo okno sadrži karticu Autos, karticu Locals i do pet kartica Watch. Desno okno sadrži kartice Stog poziva, Niti, Prijelomne točke, Naredbeni prozor, Neposredni prozor i Izlaz. Kartica Locals prikazuje varijabilne vrijednosti, kartica Call Stack prikazuje vrijednosti poziva, a kartica Breakpoints prikazuje informacije o prijelomnoj točki.

Za završetak procesa ispravljanja pogrešaka, izvršite niz naredbi iz glavnog izbornika Debug --> Stop Debugging ili kliknite plavi gumb na alatnoj traci programa za ispravljanje pogrešaka.

SQL Server 2012 dodaje nekoliko novih značajki ugrađenom alatu za ispravljanje pogrešaka u SQL Server Management Studio. Sada u njemu možete izvršiti nekoliko sljedećih operacija:

    Navedite uvjet prijelomne točke. Prijelomno stanje je SQL izraz čija procijenjena vrijednost određuje hoće li se izvršavanje koda zaustaviti na danoj točki ili ne. Da biste odredili uvjet prijelomne točke, desnom tipkom miša kliknite crvenu ikonu prijelomne točke i odaberite Uvjet iz kontekstnog izbornika. Otvara se dijaloški okvir Breakpoint Condition koji vam omogućuje unos traženog Booleovog izraza. Osim toga, ako trebate zaustaviti izvršenje ako je izraz istinit, trebali biste postaviti prekidač Is True. Ako se izvođenje treba zaustaviti ako se izraz promijenio, tada morate postaviti prekidač When Changed.

    Navedite broj pogodaka na prijelomnoj točki. Broj pogodaka je uvjet za zaustavljanje izvršenja u određenoj točki na temelju broja puta kada je prijelomna točka pogođena tijekom izvršenja. Kada se postigne navedeni broj prolaza i bilo koji drugi uvjet naveden za danu prijelomnu točku, program za ispravljanje pogrešaka izvodi navedenu radnju. Uvjet prekida izvršenja na temelju broja pogodaka može biti jedan od sljedećeg:

    1. bezuvjetno (zadana radnja) (Prekini uvijek);

      ako je broj pogodaka jednak navedenoj vrijednosti (Prekini kada je njegov broj jednak navedenoj vrijednosti);

      ako je broj pogodaka višekratnik određene vrijednosti (Prekini kada je broj pogodaka jednak višekratniku navedene vrijednosti);

      Prekid kada je njegov broj veći ili jednak navedenoj vrijednosti.

    Za postavljanje broja pogodaka tijekom otklanjanja pogrešaka, desnom tipkom miša kliknite potrebnu ikonu prijelomne točke na kartici Prijelomne točke, odaberite Hit Count iz kontekstnog izbornika, zatim odaberite jedan od uvjeta u dijaloškom okviru Breakpoint Hit Count koji se otvara s prethodnog popisa. Za opcije koje zahtijevaju vrijednost, unesite je u tekstualni okvir s desne strane padajućeg popisa uvjeta. Za spremanje navedenih uvjeta kliknite OK.

    Navedite filtar prijelomne točke. Filtar prijelomne točke ograničava operaciju prijelomne točke samo na određena računala, procese ili niti. Da biste postavili filtar prijelomne točke, desnom tipkom miša kliknite željenu prijelomnu točku i odaberite Filtar iz kontekstnog izbornika. Zatim u dijaloškom okviru Filtri prijelomnih točaka koji se otvori navedite resurse na koje želite ograničiti izvršenje ove prijelomne točke. Za spremanje navedenih uvjeta kliknite OK.

    Odredite radnju na prijelomnoj točki. Uvjet When Hit specificira akciju koju treba poduzeti kada paketno izvođenje pogodi danu prijelomnu točku. Prema zadanim postavkama, kada su i uvjet brojanja pogodaka i uvjet zaustavljanja zadovoljeni, izvršenje se prekida. Alternativno, može se prikazati unaprijed određena poruka.

    Da biste odredili što učiniti kada je prijelomna točka pogođena, desnom tipkom miša kliknite crvenu ikonu za prijelomnu točku i odaberite When Hit iz kontekstnog izbornika. U dijaloškom okviru When Breakpoint is Hit koji se otvori odaberite radnju koju želite poduzeti. Za spremanje navedenih uvjeta kliknite OK.

    Koristite prozor Quick Watch. Možete vidjeti vrijednost Transact-SQL izraza u prozoru QuickWatch, a zatim spremiti izraz u prozoru Watch. Da biste otvorili prozor Quick Watch, odaberite Quick Watch iz izbornika Debug. Izraz u ovom prozoru može se odabrati s padajućeg popisa Izraz ili unijeti u ovo polje.

    Koristite savjet za brze informacije. Kada mišem prijeđete preko ID-a koda, alat za brze informacije prikazuje njegovu deklaraciju u skočnom prozoru.

Tablični izrazi nazivaju se podupiti koji se koriste tamo gdje se očekuje prisutnost tablice. Postoje dvije vrste tabličnih izraza:

    izvedene tablice;

    generalizirani tablični izrazi.

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

Izvedene tablice

Izvedena tablica je izraz tablice uključen u klauzulu FROM upita. Izvedene tablice mogu se koristiti u slučajevima kada korištenje pseudonima stupca nije moguće jer SQL prevoditelj obrađuje drugu naredbu prije nego što pseudonim postane poznat. Primjer u nastavku prikazuje pokušaj korištenja pseudonima stupca u situaciji u kojoj se druga klauzula obrađuje prije nego što je pseudonim poznat:

USE SampleDb; SELECT MONTH(EnterDate) kao enter_month FROM Works_on GROUP BY enter_month;

Pokušaj pokretanja ovog upita proizvest će sljedeću poruku 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)

Razlog pogreške je što se klauzula GROUP BY obrađuje prije obrade odgovarajućeg popisa naredbe SELECT, a alias za stupac enter_month je nepoznat kada se grupa obrađuje.

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

USE SampleDb; SELECT enter_month FROM (SELECT MONTH(EnterDate) as enter_month FROM Works_on) AS m GROUP BY enter_month;

Rezultat ovog upita bit će ovakav:

Obično se izraz tablice može postaviti bilo gdje u naredbi SELECT gdje se može pojaviti naziv tablice. (Rezultat tabličnog izraza uvijek je tablica ili, u posebnim slučajevima, izraz.) Primjer ispod prikazuje upotrebu tabličnog izraza na popisu odabira izjave SELECT:

Rezultat ovog upita:

Generički tablični izrazi

Uobičajeni tablični izraz (OTB) je imenovani tablični izraz koji podržava Transact-SQL jezik. Uobičajeni tablični izrazi koriste se u sljedeće dvije vrste upita:

    nerekurzivan;

    ponavljajući.

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

OTB i nerekurzivni upiti

Nerekurzivni oblik OTB-a može se koristiti kao alternativa izvedenim tablicama i prikazima. Obično se OTB određuje prema S klauzulama i dodatni upit koji upućuje na ime korišteno u klauzuli WITH. U Transact-SQL, značenje ključne riječi WITH je dvosmisleno. Kako bi se izbjegla dvosmislenost, naredbu koja prethodi naredbi WITH treba završiti točkom i zarezom.

KORISTITE AdventureWorks2012; Odaberite SalesOrderId iz Sales.SaleSorderHeaders gdje je TotalDue> (odaberite AVG (TotalDue) iz Sales.SaleSorderHeader -a gdje je godina (OrderDate) = "2005") i Freight> (odaberite AVG (TotalDue) iz prodaje.SALESORDERHERESER gdje je godina (OrderDate) = "2005 ")/2,5;

Upit u ovom primjeru odabire narudžbe čiji su ukupni porezi (TotalDue) veći od prosjeka svih poreza i čiji su troškovi prijevoza (Freight) veći od 40% prosječnih poreza. Glavno svojstvo ovog upita je njegova duljina, jer podupit treba napisati dva puta. Jedan od mogućih načina za smanjenje veličine konstrukcije upita je stvaranje pogleda koji sadrži podupit. Ali ovo je rješenje malo komplicirano jer zahtijeva stvaranje prikaza i njegovo brisanje nakon što se upit završi. Bolji pristup bio bi stvoriti OTB. Primjer ispod prikazuje upotrebu nerekurzivnog OTB-a, koji skraćuje gornju definiciju upita:

KORISTITE 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 year_2005 FROM price_calc) AND Freight > (SELECT year_2005 FROM price_ kalk ) /2,5;

Sintaksa WITH klauzule u nerekurzivnim upitima je sljedeća:

Parametar cte_name predstavlja OTB naziv koji definira rezultirajuću tablicu, a parametar column_list predstavlja popis stupaca izraza tablice. (U gornjem primjeru, OTB se zove price_calc i ima jedan stupac, year_2005.) Parametar inner_query predstavlja SELECT naredbu koja navodi skup rezultata odgovarajućeg izraza tablice. Definirani izraz tablice tada se može koristiti u outer_query. (Vanjski upit u gornjem primjeru koristi OTB price_calc i njegov stupac year_2005 za pojednostavljenje dvostruko ugniježđenog upita.)

OTB i rekurzivni upiti

Ovaj odjeljak predstavlja materijal povećane složenosti. Stoga je preporučljivo preskočiti ga pri prvom čitanju i vratiti mu se kasnije. OTB-ovi se mogu koristiti za implementaciju rekurzija jer 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 za nerekurzivne upite. Tijelo klauzule WITH sastoji se od dva upita spojena operatorom UNIJA SVE. Prvi upit se poziva samo jednom i počinje akumulirati rezultat rekurzije. Prvi operand operatora UNION ALL ne referira na OTB. Taj se upit naziva referentni upit ili izvor.

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

Operator UNION ALL spaja trenutno akumulirane retke, kao i dodatne retke dodane trenutnim pozivom rekurzivnom članu. (Prisustvo operatora UNION ALL znači da duplikati redaka neće biti uklonjeni iz rezultata.)

Konačno, parametar outer_query specificira vanjski upit koji OTB koristi za dohvaćanje svih poziva na spajanje oba člana.

Kako bismo demonstrirali rekurzivni oblik OTB-a, koristimo tablicu Airplane definiranu i popunjenu kodom prikazanim u primjeru u nastavku:

USE SampleDb; CREATE TABLE Airplane(ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL(6,2)); INSERT INTO Airplane VALUES ("Avion", "Fuselage", 1, 10); INSERT INTO VRIJEDNOSTI Zrakoplova ("Avion", "Krila", 1, 11); INSERT INTO VRIJEDNOSTI zrakoplova ("Avion", "Rep", 1, 12); UMETNUTI U VRIJEDNOSTI zrakoplova ("Trup", "Salon", 1, 13); INSERT INTO VRIJEDNOSTI zrakoplova ("Trup", "Kokpit", 1, 14); INSERT INTO VRIJEDNOSTI zrakoplova ("Trup", "Nos",1, 15); INSERT INTO Airplane VALUES ("Kabina", NULL, 1,13); INSERT INTO Airplane VALUES ("Kokpit", NULL, 1, 14); INSERT INTO Airplane VALUES ("Nos", NULL, 1, 15); INSERT INTO Airplane VALUES ("Krila", NULL,2, 11); INSERT INTO Airplane VALUES ("Rep", NULL, 1, 12);

Tablica Airplane ima četiri stupca. Stupac ContainingAssembly identificira sklop, a stupac ContainedAssembly identificira dijelove (jedan po jedan) koji čine odgovarajući sklop. Donja slika prikazuje grafički prikaz mogućeg tipa zrakoplova i njegovih sastavnih dijelova:

Tablica Airplane sastoji se od sljedećih 11 redaka:

Sljedeći primjer koristi klauzulu WITH za definiranje upita koji izračunava ukupnu cijenu svake izgradnje:

USE SampleDb; WITH list_of_parts(assembly1, quantity, cost) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST(l.quantity * l.cost AS DECIMAL(6,2) ) FROM list_of_parts l, Airplane a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Part", quantity "Quantity", cost "Price" FROM list_of_parts;

Klauzula WITH definira OTB popis pod nazivom list_of_parts, koji se sastoji od tri stupca: sklop1, količina i cijena. Prva SELECT izjava u primjeru poziva se samo jednom za pohranjivanje rezultata prvog koraka procesa rekurzije. Naredba SELECT u zadnjem retku primjera prikazuje sljedeći rezultat.

Svatko se od nas redovito susreće i koristi razne baze podataka. Kada odaberemo adresu e-pošte, radimo s bazom podataka. Baze podataka koriste usluge pretraživanja, banke za pohranu podataka o klijentima itd.

No unatoč stalnom korištenju baza podataka, čak i za mnoge programere softverskih sustava još uvijek postoje mnoge slijepe točke zbog različitih tumačenja istih pojmova. Dat ćemo kratku definiciju osnovnih pojmova baze podataka prije nego što pokrijemo SQL jezik. Tako.

Baza podataka - datoteka ili zbirka datoteka za pohranu uređenih struktura podataka i njihovih odnosa. Vrlo često se sustav upravljanja naziva bazom podataka - to je samo spremište informacija u određenom formatu i može raditi s različitim DBMS-ovima.

Stol - Zamislimo mapu u kojoj su pohranjeni dokumenti grupirani prema određenom obilježju, na primjer, popis narudžbi za prošli mjesec. Ovo je tablica u računalu. Posebna tablica ima svoje jedinstveno ime.

Tip podataka - vrstu informacija dopuštenu za pohranjivanje u zasebnom stupcu ili retku. To mogu biti brojevi ili tekst određenog formata.

Stupac i redak- Svi smo radili s proračunskim tablicama, koje također imaju retke i stupce. Svaka relacijska baza podataka radi s tablicama na sličan način. Redovi se ponekad nazivaju zapisima.

Glavni ključ- Svaki redak tablice može imati jedan ili više stupaca za jedinstvenu identifikaciju. Bez primarnog ključa vrlo je teško ažurirati, mijenjati i brisati željene retke.

Što je SQL?

SQL(engleski - strukturirani upitni jezik) razvijen je samo za rad s bazama podataka i trenutno je standard za sve popularne DBMS-ove. Sintaksa jezika sastoji se od malog broja operatora i lako se uči. No, unatoč prividnoj jednostavnosti, omogućuje stvaranje sql upita za složene operacije s bazom podataka bilo koje veličine.

Od 1992. godine postoji općeprihvaćeni standard pod nazivom ANSI SQL. Definira osnovnu sintaksu i funkcije operatora i podržavaju ga svi tržišni lideri DBMS-a, kao što je ORACLE. Nemoguće je razmotriti sve mogućnosti jezika u jednom kratkom članku, stoga ćemo ukratko razmotriti samo osnovne SQL upite. Primjeri jasno pokazuju jednostavnost i mogućnosti jezika:

  • izrada baza podataka i tablica;
  • uzorkovanje podataka;
  • dodavanje zapisa;
  • izmjena i brisanje informacija.

SQL tipovi podataka

Svi stupci u tablici baze podataka pohranjuju isti tip podataka. Tipovi podataka u SQL-u isti su kao i u drugim programskim jezicima.

Izrađujemo tablice i baze podataka

Postoje dva načina za stvaranje novih baza podataka, tablica i drugih upita u SQL-u:

  • putem DBMS konzole
  • Korištenje interaktivnih administrativnih alata uključenih u poslužitelj baze podataka.

Novu bazu podataka kreira operater STVARANJE BAZE PODATAKA<наименование базы данных>; . Kao što vidite, sintaksa je jednostavna i sažeta.

Tablice unutar baze podataka stvaramo pomoću naredbe CREATE TABLE sa sljedećim parametrima:

  • naziv tablice
  • imena stupaca i tipovi podataka

Kao primjer, stvorimo tablicu Roba sa sljedećim stupcima:

Napravi tablicu:

STVARANJE TABLICE Roba

(id_robe CHAR(15) NIJE NULL,

vendor_id CHAR(15) NOT NULL,

naziv_robe CHAR(254) NULL,

cijena_robe DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Tablica se sastoji od pet stupaca. Nakon imena dolazi tip podataka, stupci su odvojeni zarezima. Vrijednost stupca može prihvatiti prazne vrijednosti (NULL) ili mora biti popunjena (NOT NULL), a to se utvrđuje prilikom kreiranja tablice.

Dohvaćanje podataka iz tablice

Operator dohvaćanja podataka je najčešće korišteni SQL upit. Da bismo dobili informacije, moramo označiti što želimo odabrati iz takve tablice. Prvo jednostavan primjer:

SELECT commodity_name FROM Commodity

Nakon naredbe SELECT navodimo naziv stupca za dobivanje informacija, a FROM definira tablicu.

Rezultat upita bit će svi redovi tablice s vrijednostima Commodity_name onim redom kojim su unesene u bazu podataka, tj. bez ikakvog sortiranja. Dodatna klauzula ORDER BY koristi se za poredak rezultata.

Za upit za nekoliko polja, navedite ih odvojene zarezima, kao u sljedećem primjeru:

SELECT commodity_id, commodity_name, commodity_price FROM Commodity

Moguće je dobiti vrijednost svih stupaca retka kao rezultat upita. Da biste to učinili, upotrijebite znak "*":

ODABIR * IZ robe

  • Dodatno SELECT podržava:
  • Razvrstavanje podataka (operator ORDER BY)
  • Odabir prema uvjetima (GDJE)
  • Pojam grupiranja (GROUP BY)

Dodajte liniju

Za dodavanje reda u tablicu koriste se SQL upiti s operatorom INSERT. Dodavanje se može izvršiti na tri načina:

  • dodati novi cijeli redak;
  • dio niza;
  • rezultati upita.

Da biste dodali cijeli redak, morate navesti naziv tablice i vrijednosti stupaca (polja) novog retka. Evo primjera:

INSERT INTO Commodity VALUES("106 ", "50", "Coca-Cola", "1,68", "Bez alkohola ,)

Primjer dodaje novi proizvod u tablicu. Vrijednosti su navedene nakon VALUES za svaki stupac. Ako ne postoji odgovarajuća vrijednost za stupac, mora se navesti NULL. Stupci se popunjavaju vrijednostima redoslijedom koji je naveden prilikom izrade tablice.

Ako dodate samo dio retka, morate eksplicitno navesti nazive stupaca, kao u primjeru:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALUES("106 ", ‘50", "Coca-Cola")

Unijeli smo samo identifikatore proizvoda, dobavljača i njegov naziv, a ostala polja ostavili prazna.

Dodavanje rezultata upita

INSERT se prvenstveno koristi za dodavanje redaka, ali se također može koristiti za dodavanje rezultata naredbe SELECT.

Promjena podataka

Za promjenu informacija u poljima tablice baze podataka, morate koristiti naredbu UPDATE. Operator se može koristiti na dva načina:

  • Svi redovi u tablici su ažurirani.
  • Samo za određenu liniju.

AŽURIRANJE se sastoji od tri glavna elementa:

  • tablica u koju je potrebno unijeti izmjene;
  • imena polja i njihove nove vrijednosti;
  • uvjeti za odabir redaka za promjenu.

Pogledajmo primjer. Recimo da se cijena proizvoda s ID=106 promijenila, pa ovaj redak treba ažurirati. Napišemo sljedeći operator:

AŽURIRAJ Roba SET commodity_price = "3.2" WHERE commodity_id = "106"

Naveli smo naziv tablice, u našem slučaju Commodity, gdje će se izvršiti ažuriranje, zatim nakon SET - novu vrijednost stupca i pronašli željeni zapis navodeći potrebnu ID vrijednost u WHERE.

Da biste promijenili više stupaca, nakon naredbe SET slijedi više parova vrijednosti stupaca odvojenih zarezima. Pogledajmo primjer u kojem se naziv i cijena proizvoda ažuriraju:

AŽURIRAJTE Commodity SET commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106"

Za uklanjanje informacija u stupcu, možete mu dodijeliti vrijednost NULL ako struktura tablice to dopušta. Mora se imati na umu da je NULL upravo "nikakva" vrijednost, a ne nula u obliku teksta ili broja. Uklonimo opis proizvoda:

UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

Uklanjanje redaka

SQL upiti za brisanje redaka u tablici izvršavaju se pomoću naredbe DELETE. Postoje dva slučaja upotrebe:

  • Određeni redovi u tablici se brišu;
  • Svi redovi u tablici se brišu.

Primjer brisanja jednog reda iz tablice:

DELETE FROM Commodity WHERE commodity_id = "106"

Nakon DELETE FROM označavamo naziv tablice u kojoj će se retci brisati. WHERE klauzula sadrži uvjet prema kojem će retci biti odabrani za brisanje. U primjeru brišemo liniju proizvoda s ID=106. Određivanje GDJE je vrlo važno jer izostavljanje ove izjave izbrisat će sve retke u tablici. Ovo se također odnosi na promjenu vrijednosti polja.

Naredba DELETE ne specificira imena stupaca ili metaznakove. Potpuno briše retke, ali ne može izbrisati niti jedan stupac.

Korištenje SQL-a u Microsoft Accessu

Obično se koristi interaktivno za stvaranje tablica, baza podataka, za upravljanje, izmjenu, analizu podataka u bazi podataka i implementaciju SQL Access upita putem prikladnog interaktivnog dizajnera upita (Query Designer), pomoću kojeg možete izgraditi i odmah izvršiti SQL izjave bilo koje složenosti.

Također je podržan način pristupa poslužitelju, u kojem se Access DBMS može koristiti kao generator SQL upita za bilo koji ODBC izvor podataka. Ova značajka omogućuje interakciju aplikacija Access s bilo kojim formatom.

SQL proširenja

Budući da SQL upiti nemaju sve mogućnosti proceduralnih programskih jezika, kao što su petlje, grananje itd., proizvođači DBMS-a razvijaju vlastitu verziju SQL-a s naprednim mogućnostima. Prije svega, ovo je podrška za pohranjene procedure i standardne operatore proceduralnih jezika.

Najčešći dijalekti jezika:

  • Oracle baza podataka - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL na internetu

MySQL DBMS se distribuira pod besplatnom GNU General Public License. Postoji komercijalna licenca s mogućnošću razvoja prilagođenih modula. Kao komponenta uključen je u najpopularnije sklopove internetskih poslužitelja kao što su XAMPP, WAMP i LAMP te je najpopularniji DBMS za razvoj aplikacija na internetu.

Razvio ga je Sun Microsystems, a trenutno ga podržava Oracle Corporation. Podržane su baze podataka veličine do 64 terabajta, standard sintakse SQL:2003, replikacija baza podataka i usluge u oblaku.

SQL - Structured Query Language.
U ovom ćemo pregledu pogledati najčešće vrste SQL upita.
SQL standard je definiran ANSI(Američki nacionalni institut za standarde).
SQL je jezik posebno usmjeren na relacijske baze podataka.

SQL particioniranje:


DDL
(Jezik za definiranje podataka) - takozvani Schema Description Language u ANSI-ju, sastoji se od naredbi koje stvaraju objekte (tablice, indekse, preglede i tako dalje) u bazi podataka.
DML(Jezik za manipulaciju podacima) je skup naredbi koje određuju koje su vrijednosti predstavljene u tablicama u bilo kojem trenutku.
DCD(Jezik za upravljanje podacima) sastoji se od mogućnosti koje određuju hoće li korisniku dopustiti izvršavanje određenih radnji ili ne. Oni su dio ANSI DDL. Ne zaboravite ova imena. To nisu različiti jezici, već dijelovi SQL naredbi grupirani prema njihovim funkcijama.

Vrste podataka:

SQL Server - Vrste podataka

Opis

bigint (int 8)

bigint (int 8)

binarni(n)

binarni(n) ili slika

lik
(sinonim char)

nacionalni lik ili ntext

lik varira(sinonim char koji varira varchar)

nacionalni karakter varira ili ntext

Datum vrijeme

Datum vrijeme

decimal

aka numerički

dvostruka preciznost

dvostruka preciznost

cijeli broj (int 4) (sinonim: int)

cijeli broj (int 4)

nacionalni karakter(sinonim: nacionalni karakter, nchar)

nacionalni karakter

Numerički(sinonimi: decimal, dec)

nacionalni karakter varira(sinonimi: nacionalni char varirajući, nvarchar)

Nacionalni karakter je različit

Mali datumvrijeme

Datum vrijeme

smallint (int 2)

smallint (int 2)

Smallmoney

sql_varijanta

Više nije podržano

Ntext
Počevši od SQL Servera 2005, ne preporučuje se za korištenje.

Vremenska oznaka

Nije podržano

tinyint (int 1)

tinyint (int 1)

Jedinstveni identifikator

jedinstveni identifikator

varbinarni(n)

varbinarni(n) ili slika

mali datumvrijeme

Datum vrijeme

smallint (int 2)

smallint (int 2)

mali novac

sql_varijanta

Nije podržano

vremenska oznaka

Nije podržano

tinyint (int 1)

tinyint (int 1)

jedinstveni identifikator

jedinstveni identifikator

varbinarni(n)

varbinarni(n) ili slika

Tablica tipova podataka u SQL Serveru 2000

ŠTO JE ZAHTJEV?

Zahtjev je naredba koju dajete svom programu baze podataka. Upiti su dio DML jezika. Svi SQL upiti sastoje se od jedne naredbe. Struktura ove naredbe varljivo je jednostavna jer je morate proširiti za izvođenje vrlo složenih procjena i manipulacija podacima.

SELECT naredba:

IZABERI“Select” je najčešće korištena naredba; koristi se za odabir podataka iz tablice.
Vrsta upita pomoću SELECT-a:

SELECT id, user_name, city, birth_day FROM users_base;

Takav će upit iz tablice users_base prikazati sve vrijednosti navedenih stupaca odvojene zarezima nakon naredbe SELECT. Također, sve stupce možete prikazati jednim znakom, * tj. SELECT * FROM korisnička_baza; - takav će upit prikazati sve podatke iz tablice.

Struktura naredbe SELECT:

SELECT (Nazivi stupaca odvojeni zarezima koji trebaju biti prikazani u upitu) FROM (naziv tablice u bazi podataka)
- Ovo je najjednostavniji tip zahtjeva. Postoje dodatne naredbe za praktično pronalaženje podataka (pogledajte dolje "Funkcije")

DML naredbe:

Vrijednosti se mogu postavljati i uklanjati iz polja pomoću tri DML (Data Manipulation Language) naredbe:
UMETNUTI(Umetnuti)
AŽURIRAJ(ažuriranje, izmjena),
IZBRISATI(Izbrisati)

INSERT naredba:

INSERT INTO users_base (user_name, city, birth_day) VALUES ('Alexander', 'Rostov', '06/20/1991');

Naredba INSERT dolazi s prefiksom INTO (u do), zatim u zagradama su nazivi stupaca u koje moramo unijeti podatke, zatim dolazi naredba VALUES (vrijednosti) i u zagradama redom dolaze vrijednosti (to je potrebno promatrati redoslijed vrijednosti sa stupcima, vrijednosti moraju biti u istom redoslijedu kao i stupci koje ste naveli).

UPDATE naredba:

UPDATE users_base SET user_name = 'Alexey';

Naredba UPDATE ažurira vrijednosti u tablici. Prvo dolazi sama naredba UPDATE, zatim naziv tablice, nakon naredbe SET (set), zatim naziv stupca i njegova vrijednost pod navodnicima (navodnici se stavljaju ako je vrijednost u string formatu, ako je numerička vrijednost i stupac nije vezan za tip podataka vchar ili bilo koji drugi tip niza, navodnici nemaju značenje.)

DELETE naredba:

DELETE FROM users_base WHERE user_name = 'Vasily';

Naredba DELETE briše cijeli red i identificira red pomoću kriterija WHERE. U ovom bi slučaju ovaj upit izbrisao sve retke u kojima je vrijednost stupca user_name bila Vasily. O kriteriju WHERE i ostalima ćemo nešto kasnije.

Kriteriji, funkcije, uvjeti itd. što nam pomaže u SQL-u:

WHERE klauzula je klauzula SELECT naredbe i drugih DML naredbi koja vam omogućuje postavljanje predikata čiji uvjet može biti istinit ili netočan za bilo koji red u tablici. Naredba dohvaća samo one retke iz tablice za koje je ova izjava istinita.
Primjer:
SELECT id, city, birth_day FROM users_base WHERE user_name = ‘Alexey’;- takav će upit prikazati samo one retke koji odgovaraju uvjetu WHERE, odnosno sve retke u kojima stupac user_name ima vrijednost Alexey.

ORDER BY - uvjet za sortiranje odabranih redaka. Ima 2 kriterija ASC i DESC. ASC (razvrstavanje od A do Z ili od 0 do 9)

DESC (suprotno od ASC).
Primjer:
SELECT id, city, birth_day FROM users_base ORDER BY user_name ASC; - takav će upit prikazati vrijednosti sortirane prema stupcu user_name od A do Z (A-Z; 0-9)

Ovaj se uvjet također može koristiti u kombinaciji s WHERE klauzulom.
Primjer:
SELECT id, city, birth_day FROM users_base WHERE user_name = ‘Alexey’ ORDER BY id ASC;

DISTINCT je argument koji vam daje način da eliminirate dvostruke vrijednosti iz vaše SELECT klauzule. Oni. ako imate duplicirane vrijednosti u stupcu, recimo user_name, tada će vam DISTINCT pokazati samo jednu vrijednost, na primjer, imate 2 osobe po imenu Alexey u vašoj bazi podataka, tada će vam upit pomoću funkcije DISTINCT pokazati samo 1 vrijednost koja se prva susreće...
Primjer:
SELECT DISTINCT user_name FROM users_base;- takav upit će nam pokazati vrijednosti svih zapisa u stupcu user_name, ali se one neće ponavljati, tj. ako ste imali beskonačan broj ponavljajućih vrijednosti, onda se one neće prikazati...

I - uzima dva Booleova (u obliku A I B) kao argumente i procjenjuje ih u odnosu na istinu jesu li oba istinita.
Primjer:
SELECT * FROM users_base WHERE city = 'Rostov' AND user_name = 'Alexander';- prikazat će sve vrijednosti iz tablice u kojoj se pojavljuje ime grada u jednom retku (u ovom slučaju Rostov i korisničko ime Alexander.

ILI - uzima dva Booleova (u obliku A ILI B) kao argumente i procjenjuje je li jedan od njih točan.

SELECT * FROM users_base WHERE city = 'Rostov' OR user_name = 'Alexander';- prikazat će sve vrijednosti iz tablice u kojoj se u retku pojavljuje ime grada Rostov ili korisničko ime Alexander.

NOT - uzima jedan Booleov (u obliku NOT A) kao argument i mijenja njegovu vrijednost iz false u true ili true u false.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Alexander';- prikazat će sve vrijednosti iz tablice gdje se ime grada Rostov pojavljuje u jednom retku ili korisničko ime nije točno Alexander.

IN - definira skup vrijednosti u koje određena vrijednost može, ali ne mora biti uključena.
SELECT * FROM users_base WHERE grad IN ('Vladivostok', 'Rostov');- takav upit će prikazati sve vrijednosti iz tablice koje sadrže nazive navedenih gradova u stupcu grada

Between je sličan operatoru IN. Za razliku od definiranja brojevima iz skupa, kao što to čini IN, BETWEEN definira raspon čije se vrijednosti moraju smanjiti kako bi predikat bio istinit.
SELECT * FROM users_base WHERE id BETWEEN 1 AND 10;- prikazuje sve vrijednosti iz tablice koje će biti u rasponu od 1 do 10 u id stupcu

COUNT - proizvodi brojeve redaka ili vrijednosti koje nisu NULL polja koja je upit odabrao.
SELECT COUNT (*) FROM users_base ;- prikazat će broj redaka u ovoj tablici.
SELECT COUNT (DISTINCT user_name) FROM users_base ;- prikazat će broj redaka s korisničkim imenima (ne ponavljaju se)

SUM - proizvodi aritmetički zbroj svih odabranih vrijednosti za određeno polje.
SELECT SUM (id) FROM users_base ;- prikazat će zbroj vrijednosti svih redaka id stupca.

AVG - izračunava prosjek svih odabranih vrijednosti ovog polja.
SELECT AVG (id) FROM users_base ;- prikazat će prosjek svih odabranih vrijednosti u stupcu id

MAX - proizvodi najveću od svih odabranih vrijednosti za ovo polje.

MIN - proizvodi najmanju od svih odabranih vrijednosti za ovo polje.

Izrada tablica:

CREATE TABLE users_base (id integer, user_name text, city text, birth_day datetime);- izvršavanje takve naredbe će dovesti do kreiranja tablice za koju sam dao primjere... Ovdje je sve jednostavno, napišemo naredbu CREATE TABLE, zatim naziv tablice koju želimo kreirati, zatim u zagradi, odvojeni zarezima, nazivi stupaca i njihova vrsta podataka. Ovo je standardni način za stvaranje tablice u SQL-u. Sada ću dati primjer stvaranja tablica u SQL Serveru 2005:

POSTAVITE ANSI_NULLS ON
IĆI
UKLJUČI QUOTED_IDENTIFIER
IĆI
AKO NE POSTOJI (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N."") I upišite (N"U"))
POČETI
STVARAJ TABLICU .(

NIJE NULL,
NIJE NULL,
NIJE NULL,
PRIMARNI KLJUČ GRUPIRAN
A.S.C.


KRAJ
IĆI
POSTAVITE ANSI_NULLS ON
IĆI
UKLJUČI QUOTED_IDENTIFIER
IĆI
AKO NE POSTOJI (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N."") I upišite (N"U"))
POČETI
STVARAJ TABLICU .(
IDENTITET(1,1) NIJE NULL,
NULL,
NULL,
PRIMARNI KLJUČ GRUPIRAN
A.S.C.
)S UKLJUČENOM (IGNORE_DUP_KEY = OFF).
) NA TEXTIMAGE_ON
KRAJ
IĆI
POSTAVITE ANSI_NULLS ON
IĆI
UKLJUČI QUOTED_IDENTIFIER
IĆI
AKO NE POSTOJI (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N."") I upišite (N"U"))
POČETI
STVARAJ TABLICU .(
IDENTITET(1,1) NIJE NULL,
NULL,
NULL,
PRIMARNI KLJUČ GRUPIRAN
A.S.C.
)S UKLJUČENOM (IGNORE_DUP_KEY = OFF).
) UKLJUČENO
KRAJ

Sintaksa u SQL Serveru 2005 je druga tema, samo sam htio pokazati da sam opisao osnove SQL programiranja, možete doći do vrha sami poznavajući osnove.

Ako imate pitanja o ovoj temi, pišite mi