Kuća, dizajn, renoviranje, dekor.  Dvorište i vrt.  Svojim vlastitim rukama

Kuća, dizajn, renoviranje, dekor. Dvorište i vrt. Svojim vlastitim rukama

» Što je baza podataka i sbd? SQL Query Language Metode korištenja sql jezika.

Što je baza podataka i sbd? SQL Query Language Metode korištenja sql jezika.

Lekcija će razmotriti sql jezik upita: osnove sintakse sql jezika, rad u phpMyAdmin i uslugu za online provjeru sql upita

Baza podataka- centralizirano skladištenje podataka koje omogućuje pohranu, pristup, primarnu obradu i dohvat informacija.

Baze podataka podijeljene su na:

  • Hijerarhijski
  • Mreža
  • Relacijski
  • Objektno orijentirano

SQL (jezik strukturiranih upita)- je strukturirani jezik upita (preveden s engleskog). Jezik je usmjeren na rad s relacijskim (tabličnim) bazama podataka. Jezik je jednostavan i zapravo se sastoji od naredbi (interpretiranih) pomoću kojih možete raditi s velikim količinama podataka (bazama podataka), brisati, dodavati, mijenjati podatke u njima i obavljati prikladno pretraživanje.

Za rad sa SQL kodom potreban vam je sustav za upravljanje bazom podataka (DBMS) koji pruža funkcionalnost za rad s bazama podataka.

Sustav za upravljanje bazom podataka(DBMS) - skup jezičnih i softverskih alata dizajniranih za stvaranje, održavanje i dijeljenje baze podataka od strane mnogih korisnika.

Obično se koristi za trening Microsoft Access DBMS, ali koristit ćemo češći sustav u web sferi -. Radi praktičnosti, upotrijebit će web sučelje ili mrežnu uslugu za izradu sql upita, čije je načelo rada opisano u nastavku.

Važno: Prilikom rada s relacijskim ili tabličnim bazama podataka pozivat će se retci tablice zapise a kolone su margine.

Svaki stupac mora imati svoj tip podataka, tj. trebaju biti dizajnirane za unos podataka određene vrste. opisane su u jednoj od lekcija ovog tečaja.

Komponente jezika SQL

Jezik SQL sastoji se od sljedećih komponenti:

  1. jezik za manipulaciju podacima (DML);
  2. Jezik definicije podataka (DDL)
  3. Jezik kontrole podataka (DCL)

1.
Jezik za rukovanje podacima sastoji se od 4 glavne naredbe:

  • dohvaćanje podataka iz baze podataka -
  • umetanje podataka u tablicu baze podataka -
  • ažuriranje (mijenjanje) podataka u tablicama baze podataka -
  • brisanje podataka iz baze podataka -

Jezik definicije podataka koristi se za stvaranje i izmjenu strukture baze podataka i njezinih sastavnih dijelova - tablica, indeksa, prikaza (virtualnih tablica), kao i okidača i pohranjenih procedura.

Razmotrit ćemo samo neke od njih naredbe osnovnog jezika... Oni su:

  • stvaranje baze podataka - CREATE DATABASE
  • stvaranje tablice - CREATE TABLE
  • mijenjanje tablice (strukture) - ALTER TABLE
  • ispuštanje stola - DROP TABLE

Jezik za upravljanje podacima koristi se za upravljanje pravima pristupa podacima i izvršavanjem postupaka u okruženju s više korisnika.

Kako napraviti sql upit u phpmyadminu

  1. Pokrenite prečac start denwer.
  2. U adresnu traku preglednika upišite http: // localhost / tools / phpmyadmin.
  3. U lijevom dijelu prozora odaberite bazu podataka koja vas zanima ili je stvorite (ako već nije stvorena). Sada je obuhvaćeno stvaranje baze podataka u phpmyadminu.
  4. Ako znate tablicu s kojom će upit raditi, odaberite ovu tablicu u lijevom dijelu prozora.
  5. Odaberite karticu SQL i počnite upisivati ​​svoj upit.

Stvaranje baze podataka u phpmyadminu

Prvo morate dovršiti prve dvije točke od.
Zatim:

  • u otvorenom web sučelju odaberite karticu Baza podataka;
  • na terenu Stvorite bazu podataka unesite naziv baze;
  • kliknite na gumb Stvoriti;
  • sada možete otići do stvorene baze podataka za nastavak rada u phpMyAdmin.

Rad u sql fiddle servisu

Mrežna provjera sql upita moguća je pomoću usluge.
Najjednostavniji način organiziranja posla sastoji se od sljedećih koraka:


Još jedan primjer:


Sada ćemo razmotriti neke točke detaljnije.

Izrada tablica:

Primjer: stvoriti tri stola odjednom (učitelji, lekcije i tečajevi); svakoj tablici dodajte više vrijednosti.

* za one koji nisu upoznati sa sintaksom - samo kopirajte cijeli kôd i zalijepite ga u lijevi prozor usluge

* lekcija o stvaranju tablica u SQL -u

/ * učitelji * / CREATE TABLE `nastavnici` (` id` INT (11) NOT NULL, `name` VARCHAR (25) NOT NULL,` code` INT (11), `zarplata` INT (11),` premia` INT (11), PRIMARNI KLJUČ (`id`)); UMETNI VRIJEDNOSTI učitelja (1, "Ivanov", 1, 10000, 500), (2, "Petrov", 1, 15000, 1000), (3, "Sidorov", 1, 14000, 800), (4, " Bobrova ", 1, 11000, 800); / * lekcije * / CREATE TABLE `pouke` (` id` INT (11) NOT NULL, `tid` INT (11),` course` VARCHAR (25), `date` VARCHAR (25), PRIMARY KEY (` id `)); UMETAJTE VRIJEDNOSTI pouka (1, 1, "php", "2015-05-04"), (2, 1, "xml", "2016-13-12"); / * tečajevi * / CREATE TABLE `tečajevi '(` id` INT (11) NOT NULL, `tid` INT (11),` title` VARCHAR (25), `length` INT (11), PRIMARY KEY (` id `)); UMETAJTE VRIJEDNOSTI tečajeva (1, 1, "php", 54), (2, 1, "xml", 72), (3, 2, "sql", 25);

/ * učitelji * / CREATE TABLE `nastavnici` (` id` int (11) NOT NULL, `name` varchar (25) NOT NULL,` code` int (11), `zarplata` int (11),` premia` int (11), PRIMARNI KLJUČ (`id`)); umetnite u nastavničke vrijednosti (1, "Ivanov", 1,10000,500), (2, "Petrov", 1,15000,1000), (3, "Sidorov", 1,14000,800), (4 , "Bobrov", 1,11000,800); / * lekcije * / CREATE TABLE `pouke` (` id` int (11) NOT NULL, `tid` int (11),` course` varchar (25), `date` varchar (25), PRIMARY KEY (` id `)); umetnuti u lekcije vrijednosti (1,1, "php", "2015-05-04"), (2,1, "xml", "2016-13-12"); / * tečajevi * / CREATE TABLE `tečajevi '(` id` int (11) NOT NULL, `tid` int (11),` title` varchar (25), `length` int (11), PRIMARY KEY (` id `)); umetnite u tečajeve vrijednosti (1,1, "php", 54), (2,1, "xml", 72), (3,2, "sql", 25);

Kao rezultat toga dobivamo tablice s podacima:

Slanje zahtjeva:
Kako biste provjerili upotrebljivost, dodajte kod zahtjeva u desni prozor.

Primjer: upotrijebite upit za odabir svih podataka iz tablice učitelja za učitelja s prezimenom Ivanov

U daljnjim SQL lekcijama koristit će se ista shema, pa samo trebate kopirati shemu i zalijepiti je u lijevi prozor usluge.

Za online vizualizaciju sheme baze podataka možete koristiti uslugu https://dbdesigner.net/:

  1. Izradite svoj račun (prijavite se ako ga već imate).
  2. Pritisnite gumb Idite na aplikaciju.
  3. Jelovnik Shema -> Uvoz.
  4. Kopirajte i zalijepite kôd za stvaranje i popunjavanje tablica baze podataka u prozor koji se pojavi

Programiranje uključeno T- SQL

T-SQL sintaksa i konvencije

Pravila za formiranje identifikatora

Svi objekti u SQL Serveru imaju nazive (identifikatore). Primjeri objekata su tablice, prikazi, pohranjene procedure itd. Identifikatori mogu imati do 128 znakova, poput slova, simbola _ @ $ # i brojki.

Prvi znak uvijek mora biti abecedni. Za varijable i privremene tablice koriste se posebne sheme imenovanja. Naziv objekta ne može sadržavati razmake i ne može se podudarati s rezerviranom ključnom riječi SQL Servera, bez obzira na to koji se slučaj koristi. U nazivima objekata možete koristiti nedopuštene znakove stavljanjem identifikatora u uglate zagrade.

Dovršetak uputa

ANSI SQL zahtijeva točku -zarez na kraju svakog izraza. Međutim, pri programiranju u T-SQL-u točka-zarez nije obavezna.

Komentari (1)

T-SQL prihvaća dva stila komentara: ANCI i C. Prvi počinje s dvije crtice i završava na kraju retka:

Ovo je komentar u jednom retku u ANSI stilu

Također, komentari u stilu ANSI mogu se umetnuti na kraj retka izraza:

ODABERITE Ime grada - dohvaćeni stupci

IZ Grada - izvorna tablica

GDJE je IdCity = 1; - linijsko ograničenje

SQL uređivač može primijeniti i ukloniti komentare na sve odabrane retke. Da biste to učinili, u izborniku odaberite odgovarajuće naredbe Uredi ili na alatnoj traci.

Komentari u stilu C započinju kosom crtom prema naprijed i zvjezdicom (/ *), a završavaju istim znakovima obrnutim redoslijedom. Ova vrsta komentara najbolje se koristi za komentiranje blokova redaka poput zaglavlja ili velikih testnih upita.

višelinijski

komentar

Jedna od glavnih prednosti komentara u stilu C je da u njima možete izvoditi višelinijske upite čak i bez komentara.

T-SQL paketi

Upit je jedan T-SQL izraz, a serija je njihova zbirka. Cijeli slijed paketnih uputa šalje se poslužitelju iz klijentskih aplikacija kao jedna integralna jedinica.

SQL Server čitav paket tretira kao jedinicu rada. Prisutnost pogreške u barem jednoj instrukciji dovest će do nemogućnosti izvršavanja cijelog paketa. Istodobno, raščlanjivanjem se ne provjeravaju nazivi objekata i shema, budući da se sama shema može promijeniti tijekom izvršavanja izraza.

Datoteka skripte SQL i prozor Analiza upita mogu sadržavati više paketa. U tom slučaju svi paketi dijele terminator ključne riječi. Prema zadanim postavkama, ova je ključna riječ GO i mora biti jedina na liniji. Svi ostali znakovi (čak i komentari) negiraju separator paketa.

Otklanjanje pogrešaka u T-SQL-u

Kad SQL uređivač naiđe na pogrešku, prikazuje prirodu pogreške i broj retka u grupi. Dvostrukim klikom na pogrešku možete odmah skočiti na odgovarajući redak.

Pomoćni program SQL Server 2005 Management Studio ne uključuje T-SQL program za otklanjanje pogrešaka-uključen je u paket Visual Studio.

SQL Server nudi nekoliko naredbi koje će vam pomoći u otklanjanju pogrešaka u paketima. Konkretno, naredba PRINT šalje poruku bez generiranja skupa podataka rezultata. Naredba PRINT može se koristiti za praćenje napretka paketa. S Query Analyzerom u mrežnom načinu rada pokrenite sljedeću grupu:

ODABERITE Ime grada

IZ Grada

GDJE je IdCity = 1;

PRINT "Kontrolna točka";

Rezultirajući skup podataka bit će prikazan u mreži i bit će jedan red. Istodobno će se na kartici Poruke prikazati sljedeći rezultat:

(obrađeno linija: 1)

Kontrolna točka

Varijable

T-SQL varijable stvaraju se pomoću naredbe DECLARE koja ima sljedeću sintaksu:

DECLARE @ Variable_Name Data_type [,

@ Ime_promenljive_Dat.vrsta, ...]

Svi nazivi lokalnih varijabli moraju početi s @. Na primjer, za deklariranje lokalne varijable UStr koja pohranjuje do 16 Unicode znakova, možete koristiti sljedeću izjavu:

OGLASI @UStr varchar (16)

Vrste podataka koje se koriste za varijable potpuno su iste kao i one u tablicama. U jednoj naredbi DECLARE može se navesti nekoliko varijabli, odvojenih zarezima. Konkretno, sljedeći primjer stvara dvije cjelobrojne varijable a i b:

PROGLASITI

@int,

@b int

Varijable imaju opseg (tj. Njihov vijek trajanja) samo za trenutni paket. Prema zadanim postavkama, novostvorene varijable sadrže null NULL vrijednosti i moraju se inicijalizirati prije uključivanja u izraze.

Postavljanje promjenjivih vrijednosti

Trenutno SQL nudi dva načina za postavljanje vrijednosti varijable - u tu svrhu možete koristiti izraz SELECT ili SET. U smislu funkcija koje obavljaju, ti izrazi rade gotovo isto, osim što izraz SELECT dohvaća izvornu dodijeljenu vrijednost iz tablice navedene u izrazu SELECT.

Naredba SET obično se koristi za postavljanje vrijednosti varijabli u oblik koji je češći u proceduralnim jezicima. Tipični primjeri korištenja ovog operatora uključuju sljedeće:

SET @a = 1;

SET @b = @a * 1.5

Imajte na umu da svi ovi operatori izravno izvode dodjele koristeći eksplicitne vrijednosti ili druge varijable. Ne možete koristiti izraz SET za dodjeljivanje vrijednosti varijabli iz upita; upit se mora izvršiti zasebno i tek tada se rezultirajući rezultat može dodijeliti pomoću naredbe SET. Na primjer, pokušaj izvođenja takve izjave generira pogrešku:

PROGLASITE @c int

SET @c = COUNT (*) IZ GRADA

SELECT @c

i sljedeća izjava uspijeva:

PROGLASITE @c int

POSTAVI @c = (ODABERI BROJ (*) IZ GRADA)

SELECT @c

Naredba SELECT obično se koristi za dodjeljivanje vrijednosti varijablama kada je izvor podataka koji se pohranjuju u varijabli iz upita. Na primjer, radnje izvedene u gornjem kodu mnogo se češće provode pomoću izraza SELECT:

PROGLASITE @c int

SELECT @c = COUNT (*) FROM City

SELECT @c

Imajte na umu da je ovaj kôd malo jasniji (osobito sažetiji, iako radi istu stvar).

Stoga je moguće formulirati sljedeći općeprihvaćeni sporazum o korištenju oba operatora.

Naredba SET koristi se kada treba izvršiti jednostavno dodjeljivanje varijabli, tj. ako je dodijeljena vrijednost već eksplicitno postavljena u obliku određene vrijednosti ili u obliku neke druge varijable.

  • Naredba SELECT koristi se kada se dodjeljivanje vrijednosti varijabli temelji na upitu.

Korištenje varijabli u SQL upitima

Jedno od korisnih svojstava jezika T-SQL je da se varijable mogu koristiti u upitima bez potrebe za stvaranjem složenih dinamičkih nizova koji ugrađuju varijable u programski kod. Dinamički SQL i dalje postoji, ali jedna se vrijednost može lakše promijeniti pomoću varijable.

Gdje god se izraz može koristiti u upitu, može se koristiti i varijabla. Sljedeći primjer demonstrira upotrebu varijable u klauzuli WHERE:

PROGLASITE @IdProd int;

SET @IdProd = 1;

ODABERI

IZ proizvoda

GDJE je IdProd = @IdProd;

Varijable globalnog sustava

SQL Server ima više od trideset globalnih varijabli bez parametara koje definira i održava sustav. Sve globalne varijable imaju prefiks s dva simbola @. Vrijednost bilo koje od njih možete dohvatiti jednostavnim upitom SELECT, kao u sljedećem primjeru:

ODABERI @@ VEZE

On koristi globalnu varijablu @@ CONNECTIONS za dohvaćanje broja veza sa SQL Serverom od pokretanja programa.

Neke od najčešće korištenih sistemskih varijabli su:

  • @@ POGREŠKA - Sadrži broj pogreške koja se dogodila tijekom izvršavanja posljednjeg T -SQL izraza u trenutnoj vezi. Ako nije pronađena pogreška, sadrži 0. Vrijednost ove sistemske varijable se poništava nakon izvršavanja svake sljedeće naredbe. Ako želite spremiti vrijednost koju sadrži, tada bi se ta vrijednost trebala prenijeti u lokalnu varijablu odmah nakon izvršenja izraza za koji bi se trebao spremiti kod pogreške.
  • @@ IDENTITY - Sadrži zadnju identifikacijsku vrijednost umetnutu u bazu podataka kao posljednju naredbu INSERT. Ako u zadnjem izrazu INSERT nije generirana identifikacijska vrijednost, @@ IDENTITY sistemska varijabla je NULL. Ova izjava vrijedi čak i ako je nedostatak identifikacijske vrijednosti uzrokovan rušenjem tijekom izvođenja izraza. A ako se više umetanja izvodi pomoću jedne naredbe, samo se posljednja identifikacijska vrijednost dodjeljuje ovoj sistemskoj varijabli.
  • @@ ROWCOUNT - Jedna od najčešće korištenih sistemskih varijabli. Vraća informacije o broju redaka na koje posljednja naredba utječe. Obično se koristi za kontrolu pogrešaka osim onih koje spadaju u kategoriju pogrešaka u koraku izvođenja. Na primjer, ako program otkrije da je nakon pozivanja izraza DELETE s klauzulom WHERE broj pogođenih redaka nula, tada možemo zaključiti da se dogodilo nešto neočekivano. Poruka o pogrešci tada se može ručno aktivirati.

! Imajte na umu da se od SQL Servera 2000 globalne varijable nazivaju funkcijama. Naziv global zbunjuje korisnike, sugerirajući da je opseg takvih varijabli širi od opsega lokalnih varijabli. Sposobnost pohrane informacija, bez obzira jesu li uključene u paket ili ne, često se pogrešno pripisivala globalnim varijablama, što, naravno, nije odgovaralo stvarnosti.

Komande toka naredbi. Softverske konstrukcije

Jezik T-SQL pruža većinu klasičnih proceduralnih alata za kontrolu tijeka izvođenja programa, uklj. uvjetna konstrukcija i petlje.

OperaterAKO. ... ... DRUGO

IF izjave. ... .ELSE djeluje u T-SQL-u na isti način kao i u bilo kojem drugom programskom jeziku. Opća sintaksa za ovaj operator je sljedeća:

AKO je Booleov izraz

SQL izraz I BEGIN Blok SQL izraza END

SQL izraz | BEGIN SQL Blok END naredbi]

Gotovo svaki izraz može se navesti kao logički izraz, čiji se rezultat procjenjuje na logičku vrijednost.

Treba imati na umu da se samo uvjet koji slijedi neposredno iza naredbe IF (njemu najbliži) smatra izvršenim prema uvjetu. Umjesto jednog operatora, možete osigurati izvršavanje nekoliko operatora prema uvjetima, kombinirajući ih u blok koda pomoću konstrukcije BEGIN ... END.

U donjem primjeru uvjet IF nije ispunjen, što sprječava izvršavanje sljedeće naredbe.

AKO 1 = 0

TISAK "Prvi redak"

TISAK "Drugi red"

Opcijska naredba ELSE omogućuje vam da navedete izraz koji će se izvršiti ako uvjet IF nije zadovoljen. Kao i IF, naredba ELSE kontrolira samo naredbu ili blok koda koji slijedi između BEGIN ... END.

Iako izraz IF izgleda ograničeno, njegova klauzula stanja može uključivati ​​moćne značajke poput klauzule WHERE. Konkretno, to su izrazi IF EXISTS ().

Izraz IF EXISTS () koristi kao uvjet postojanje bilo kojeg retka vraćenog izrazom SELECT. Budući da se pretražuju bilo koji retci, popis stupaca u izrazu SELECT može se zamijeniti zvjezdicom. Ova metoda je brža od provjere uvjeta @@ ROWCOUNT> 0 jer nema potrebe za brojenjem ukupnog broja redaka. Čim barem jedan redak zadovolji uvjet IF EXISTS (), upit se može nastaviti s izvršavanjem.

Sljedeći primjer koristi izraz IF EXISTS za provjeru ima li šifra korisnika 1 neke narudžbe prije nego što ga izbriše iz baze podataka. Ako postoje informacije o barem jednoj narudžbi za ovog klijenta, brisanje se ne vrši.

AKO POSTOJI (SELECT * FROM WHERE IdCust = 1)

PRINT "Klijenta je nemoguće izbrisati jer u bazi podataka postoje zapisi povezani s njim"

DRUGO

GDJE je IdCust = 1

PRINT "Brisanje je uspješno dovršeno"

OperateriDOK, BREAK iNASTAVITI

Klauzula WHILE u SQL -u radi na isti način kao i u drugim jezicima s kojima programer obično mora raditi. Zapravo, u ovoj se izjavi određeni uvjet provjerava prije početka svakog prolaska kroz petlju. Ako, prije sljedećeg prolaska kroz petlju, provjera uvjeta rezultira TRUE vrijednošću, petlja se ponavlja, u suprotnom se izraz prekida.

Naredba WHILE ima sljedeću sintaksu:

DOK JE Booleov izraz

SQL izraz I

Blok SQL izraza

Naravno, pomoću naredbe WHILE možete osigurati da se samo jedna naredba izvršava u petlji (slično kao što se obično koristi naredba IF), ali u praksi, WHILE konstruira nakon čega ne slijedi blok BEGIN. ... .END u skladu s punim formatom operatora je rijetkost.

Naredba BREAK omogućuje vam da odmah izađete iz petlje, bez čekanja da se izvede prolaz do kraja petlje i da se uvjetni izraz ponovno provjeri.

Naredba CONTINUE omogućuje vam prekidanje jedne iteracije petlje. Možete ukratko opisati radnju naredbe CONTINUE tako da skoči na početak petlje WHILE. Čim se operator CONTINUE pronađe u petlji, bez obzira na to gdje se nalazi, petlja ide na početak petlje i uvjetni izraz se ponovno procjenjuje (i ako vrijednost ovog izraza više nije TRUE, petlja je napuštena).

Sljedeća kratka skripta prikazuje uporabu klauzule WHILE za stvaranje petlje:

PROGLASITE @Temp int;

SET @Temp = 0;

DOK @Temp< 3

POČETI

PRINT @Temp;

SET @Temp = @Temp + 1;

Ovdje, u petlji, cijela varijabla @Temp se povećava od 0 do 3, a pri svakoj iteraciji prikazuje se njezina vrijednost.

OperaterPOVRATAK

Naredba RETURN koristi se za zaustavljanje izvođenja paketa, a time i pohranjene procedure i okidača (obrađeno u sljedećem laboratoriju).

Jezik SQL koristi se za preuzimanje podataka iz baze podataka. SQL je programski jezik koji jako podsjeća na engleski, ali je namijenjen programima za upravljanje bazama podataka. SQL se koristi u svakom upitu u Accessu.

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

Ovaj je članak dio niza članaka 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 odnosima među njima. 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 priznat od strane odbora za standarde kao što su ISO i ANSI.

Skupovi podataka opisani su u SQL -u radi lakšeg odgovora na pitanja. Pri korištenju SQL -a mora se koristiti ispravna sintaksa. Sintaksa je skup pravila za pravilno kombiniranje elemenata jezika. SQL sintaksa temelji se na sintaksi na engleskom jeziku i dijeli mnoge elemente sa sintaksom Visual Basic for Applications (VBA).

Na primjer, jednostavna SQL naredba koja dohvaća popis prezimena kontakata po imenu Mary mogla bi izgledati ovako:

SELECT Last_Name
IZ kontakata
WHERE First_Name = "Marija";

Bilješka: Jezik SQL ne koristi se samo za izvođenje operacija nad podacima, već i za stvaranje i izmjenu strukture objekata baze podataka, poput tablica. Dio SQL -a koji se koristi za stvaranje i izmjenu objekata baze podataka naziva se DDL. DDL nije obuhvaćen u ovom članku. Više informacija potražite u članku Stvaranje i mijenjanje tablica ili indeksa pomoću upita za definiciju podataka.

SELECT izrazi

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

    tablice koje sadrže podatke;

    veze između podataka iz različitih izvora;

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

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

    potreba i način razvrstavanja.

SQL rečenice

SQL izraz sastoji se od nekoliko dijelova koji se nazivaju klauzule. Svaka klauzula u SQL izrazu ima drugačiju svrhu. Potrebni su neki prijedlozi. U sljedećoj tablici navedene su najčešće korištene SQL klauzule.

SQL klauzula

Opis

Obavezno

Definira polja koja sadrže željene podatke.

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

Određuje kriterije za odabir polja koja 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 sažetu 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 sastoji se od pojmova koji se mogu usporediti s dijelovima govora. U sljedećoj tablici navedene su vrste SQL pojmova.

SQL pojam

Usporediv dio govora

Definicija

Primjer

identifikator

imenica

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

Kupci. [Broj telefona]

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 izraza:

SELECT polje_1
IZ tablice_1
GDJE kriterij_1
;

Bilješke:

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

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

Primjer u Accessu

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

1. SELECT klauzula

2. IZ klauzule

3. WHERE klauzula

Analizirajmo primjer rečenice po rečenice kako bismo razumjeli kako funkcionira sintaksa SQL -a.

Klauzula SELECT

SELECT, Tvrtka

Ovo je klauzula SELECT. Sadrži izjavu (SELECT) iza koje slijede dva identifikatora ("[Adresa e -pošte]" i "Tvrtka").

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

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

U izrazu SELECT klauzula SELECT uvijek dolazi ispred klauzule FROM.

IZ klauzule

IZ kontakata

Ovo je klauzula FROM. Sadrži operator (FROM) iza kojeg slijedi identifikator (Contacts).

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 (City = "Rostov").

Mnogo je 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:

Sortiranje rezultata: ORDER BY

Kao i kod programa Microsoft Excel, Access može sortirati rezultate upita u tablicu. Pomoću klauzule ORDER BY možete odrediti i kako se rezultati sortiraju pri izvođenju 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 tvrtke u opadajućem redoslijedu, a zatim, ako postoje zapisi s istom vrijednošću polja tvrtke, sortirajte ih prema polju E -adresa u rastućem redoslijedu. Klauzula ORDER BY izgledala bi ovako:

NARUČITE PO DESC -u tvrtke,

Bilješka: Prema zadanim postavkama Access razvrstava vrijednosti uzlaznim redoslijedom (od A do Z, od najmanje do najveće). Da biste umjesto toga sortirali vrijednosti u opadajućem redoslijedu, morate navesti ključnu riječ DESC.

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

Rad s zaokretnim podacima: GROUP BY i HAVING klauzule

Ponekad morate raditi s zbirnim podacima, poput ukupne mjesečne prodaje ili najskupljih artikala na skladištu. Da biste to učinili, agregatna funkcija primjenjuje se na polje u klauzuli SELECT. Na primjer, ako se upit želi dohvatiti broj adresa e -pošte za svako poduzeće, klauzula SELECT može izgledati ovako:

Mogućnost korištenja određene skupne funkcije ovisi o vrsti podataka u polju i željenom izrazu. Više informacija o dostupnim skupnim funkcijama potražite u članku SQL skupne funkcije.

Navođenje polja koja se ne koriste u skupnoj funkciji: klauzula GROUP BY

Kada koristite agregatne funkcije, obično morate stvoriti klauzulu GROUP BY. Klauzula GROUP BY navodi sva polja koja nemaju primijenjenu skupnu funkciju. Ako se zbirne funkcije primjenjuju na sva polja u upitu, ne morate stvarati klauzulu GROUP BY.

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

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

GRUPA PO Tvrtki

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

Ograničavanje zbirnih vrijednosti pomoću uvjeta grupiranja: HAVING klauzula

Ako trebate navesti uvjete za ograničenje rezultata, ali polje na koje se želite primijeniti koristi se u združenoj funkciji, ne možete koristiti klauzulu WHERE. Umjesto toga upotrijebite klauzulu HAVING. Klauzula HAVING radi isto što i klauzula WHERE, ali se koristi za zbirne podatke.

Na primjer, pretpostavimo da je funkcija AVG (koja izračunava prosjek) primijenjena na prvo polje klauzule 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 vraća retke samo ako tvrtka ima više adresa e -pošte, možete upotrijebiti 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 skupnim funkcijama navedenim u klauzuli WHERE, te uvjetima za polja koja se koriste u skupnim funkcijama u klauzuli HAVING.

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

Kombiniranje rezultata upita: Operator UNION

Operator UNION koristi se za pregled svih podataka vraćenih s više, sličnih upita za odabir istovremeno s ujedinjenim skupom.

Operator UNION omogućuje vam kombiniranje dva SELECT izraza u jedan. Naredbe SELECT koje se spajaju moraju imati isti broj i redoslijed izlaznih polja s istim ili kompatibilnim vrstama podataka. Kad pokrenete upit, podaci iz svakog skupa polja koja se podudaraju kombiniraju se u jedno izlazno polje, tako da izlaz upita ima isti broj polja kao svaki izraz SELECT pojedinačno.

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

Pomoću operatora UNION možete odrediti trebaju li se dvostruki redovi, ako ih ima, uključiti u rezultate upita. Da biste to učinili, upotrijebite ključnu riječ ALL.

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

SELECT polje_1
IZ tablice_1
UNIJA
SELECT polje_a
OD tablice_a
;

Na primjer, pretpostavimo da imate dvije tablice pod nazivom "Proizvodi" i "Usluge". Obje tablice sadrže polja s nazivom proizvoda ili usluge, cijenom i jamstvenim podacima, kao i polje koje ukazuje na ekskluzivnost ponuđenog proizvoda ili usluge. Iako u tablicama Proizvodi i usluge postoje različite vrste jamstava, osnovni podaci su isti (postoji li jamstvo kvalitete za pojedine proizvode ili usluge). Pomoću sljedećeg upita za pridruživanje možete kombinirati četiri polja iz dvije tablice:

SELECT naziv, cijena, garancija_dostupna, ekskluzivna_ponuda
IZ Proizvoda
UNION ALL
SELECT naziv, cijena, garancija_dostupna, ekskluzivna_ponuda
IZ Usluga
;

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

Osnovne SQL naredbe koje bi svaki programer trebao znati

SQL ili Structured Query Language koristi se za manipulaciju podacima u sustavu relacijskih baza podataka (RDBMS). Ovaj će članak govoriti o često korištenim SQL naredbama s kojima bi se trebao upoznati svaki programer. Ovaj je materijal idealan za one koji žele usavršiti svoje znanje o SQL -u prije razgovora za posao. Da biste to učinili, analizirajte primjere navedene u članku i sjetite se što ste sve prošli u paru kroz baze podataka.

Imajte na umu da neki sustavi baza podataka zahtijevaju točku -zarez na kraju svakog izraza. Točka -zarez standardni je pokazivač na kraj svake naredbe u SQL -u. Primjeri koriste MySQL, pa je potrebna točka -zarez.

Primjeri postavljanja baze podataka

Izradite bazu podataka kako biste pokazali kako timovi rade. Za rad morate preuzeti dvije datoteke: DLL.sql i InsertStatements.sql. Nakon toga otvorite terminal i uđite u MySQL konzolu sa sljedećom naredbom (ovaj članak pretpostavlja da je MySQL već instaliran na sustavu):

Mysql -u korijen -p

Zatim unesite lozinku.

Pokrenite sljedeću naredbu. Nazovimo bazu podataka "sveučilište":

CREATE DATABASE sveučilište; USE sveučilište; IZVOR ; IZVOR

Naredbe baze podataka

1. Pregledajte dostupne baze podataka

PRIKAŽI BAZE PODATAKA;

2. Stvaranje nove baze podataka

IZRADI BAZU PODATAKA;

3. Odabir baze podataka za korištenje

KORISTITI ;

4. Uvoz SQL naredbi iz datoteke.sql

IZVOR ;

5. Uklanjanje baze podataka

BAZA PODATAKA ;

Rad sa stolovima

6. Pregled tablica dostupnih u bazi podataka

PRIKAŽI STOLOVE;

7. Izrada nove tablice

IZRADI TABLICU ( , , GLAVNI KLJUČ ( ), STRANI KLJUC ( ) REFERENCE ());

Ograničenja integriteta pomoću CREATE TABLE

Možda će biti potrebno stvoriti ograničenja za određene stupce u tablici. Prilikom izrade tablice možete postaviti sljedeća ograničenja:

  • ćelija tablice ne može biti NULL;
  • primarni ključ - PRIMARNI KLJUČ (col_name1, col_name2, ...);
  • strani ključ - STRANI KLJUČ (col_namex1,…, col_namexn) REFERENCE ime_tabele (col_namex1,…, col_namexn).

Može se navesti više od jednog primarnog ključa. U tom slučaju dobivate složeni primarni ključ.

Primjer

Izradite tablicu "instruktor":

CREATE TABLE instruktor (ID CHAR (5), naziv VARCHAR (20) NOT NULL, ime odjela VARCHAR (20), plaća BROJ (8,2), PRIMARNI KLJUČ (ID), STRANI KLJUČ (ime odjela) odjel (ime odjela));

8. Podaci tablice

Pomoću sljedeće naredbe možete vidjeti različite podatke (vrstu vrijednosti, ključ ili ne) o stupcima tablice:

OPISATI ;

9. Dodavanje podataka u tablicu

UMETNUTI U (, , , ...) VRIJEDNOSTI ( , , , …);

Prilikom dodavanja podataka u svaki stupac tablice, ne morate navesti nazive stupaca.

UMETNUTI U VRIJEDNOSTI ( , , , …);

10. Ažuriranje tabličnih podataka

AŽURIRANJE SET = , = , ... GDJE ;

11. Uklanjanje svih podataka iz tablice

IZBRIŠI IZ ;

12. Brisanje tablice

DROP TABLA ;

Naredbe za podnošenje zahtjeva

13. ODABERI

SELECT se koristi za dohvaćanje podataka iz određene tablice:

ODABERI , ,… OD ;

Sljedeća naredba može prikazati sve podatke iz tablice:

SELECT * FROM ;

14. ODABERITE RAZLIKU

Stupci tablice mogu sadržavati dvostruke podatke. Upotrijebite SELECT DISTINCT da biste dobili samo ne duplicirane podatke.

ODABERITE RAZLIKU , ,… OD ;

15. GDJE

Možete koristiti ključnu riječ WHERE u SELECT za navođenje uvjeta u upitu:

ODABERI , ,… OD GDJE ;

U zahtjevu se mogu navesti sljedeći uvjeti:

  • usporedba teksta;
  • usporedba brojčanih vrijednosti;
  • logičke operacije AND (i), OR (ili) i NOT (negacija).

Primjer

Isprobajte sljedeće naredbe. Obratite pažnju na uvjete navedene u WHERE:

SELECT * FROM course WHERE dept_name = 'Comp. Sci. '; SELECT * FROM course WHERE bodovi> 3; SELECT * FROM course WHERE dept_name = "Comp. Sci." I krediti> 3;

16. GRUPA PO

Odredba GROUP BY često se koristi s skupnim funkcijama kao što su COUNT, MAX, MIN, SUM i AVG za grupiranje izlaznih vrijednosti.

ODABERI , ,… OD GRUPA PO ;

Primjer

Prikažimo broj predmeta za svaki fakultet:

SELECT COUNT (course_id), dept_name FROM course GROUP BY dept_name;

17. IMATI

Ključna riječ HAVING dodana je u SQL jer se WHERE ne može koristiti sa skupnim funkcijama.

ODABERI , , ... OD GRUPA PO IMAJUĆI

Primjer

Navedimo fakultete s više predmeta:

SELECT COUNT (course_id), dept_name FROM course GROUP BY dept_name HAVING COUNT (course_id)> 1;

18. NARUČI PO

ORDER BY se koristi za sortiranje rezultata upita u silaznom ili rastućem redoslijedu. ORDER BY sortirat će uzlaznim redoslijedom ako nije navedena metoda razvrstavanja ASC ili DESC.

ODABERI , ,… OD NARUČI PO , ,… ASC | DESC;

Primjer

Prikažimo popis tečajeva uzlaznim i silaznim brojem bodova:

SELECT * FROM ORDER BY credits; SELECT * FROM ORDER BY credits DESC;

19. IZMEĐU

IZMEĐU se koristi za odabir vrijednosti podataka iz navedenog raspona. Mogu se koristiti numeričke i tekstualne vrijednosti, kao i datumi.

ODABERI , ,… OD GDJE IZMEĐU I ;

Primjer

Evo popisa instruktora čija je plaća veća od 50.000, ali manja od 100.000:

ODABERITE * OD instruktora GDJE JE PLAĆA IZMEĐU 50000 I 100000;

20. SLIČNO

Operator LIKE koristi se u WHERE za određivanje uzorka pretraživanja za sličnu vrijednost.

Postoje dva besplatna operatora koji se koriste LIKE:

  • % (nema, jedan ili više znakova);
  • _ (jedan znak).
ODABERI , ,… OD GDJE KAO ;

Primjer

Prikažimo popis tečajeva čiji naziv sadrži "do" i popis tečajeva čiji naziv počinje s "CS-":

SELECT * FROM course WHERE title LIKE '% to%'; SELECT * FROM course WHERE course_id LIKE "CS -___";

21. IN

Možete koristiti IN za navođenje više vrijednosti za klauzulu WHERE:

ODABERI , ,… OD GDJE IN ( , , …);

Primjer

Prikažimo popis učenika iz Comp. Znanstvena fizika i elektrotehnika. Eng.:

SELECT * FROM student WHERE dept_name IN ('Comp. Sci.', 'Physics', 'Elec. Eng.');

22. PRIDRUŽITE SE

JOIN se koristi za povezivanje dvije ili više tablica pomoću zajedničkih atributa unutar njih. Donja slika prikazuje različite načine kombiniranja u SQL -u. Obratite pozornost na razliku između lijevog vanjskog spoja i desnog vanjskog spoja:

ODABERI , ,… OD PRIDRUŽITI NA = ;

Primjer 1

Prikazat ćemo popis svih kolegija i odgovarajuće podatke o fakultetima:

SELECT * FROM course JOIN department ON ON course.dept_name = department.dept_name;

Primjer 2

Navedimo sve potrebne tečajeve i pojedinosti o njima:

SELECT prereq.course_id, title, dept_name, credits, prereq_id IZ prereq LIJEVO OUTER JOIN tečaj ON na prereq.course_id = course.course_id;

Primjer 3

Prikažimo popis svih tečajeva, bez obzira jesu li potrebni ili ne:

SELECT course.course_id, title, dept_name, credits, prereq_id IZ prereq PRAVO OUTER PRIDRUŽITE se naravno ON prereq.course_id = course.course_id;

23. Pogled

View je virtualna SQL tablica stvorena izvršavanjem izraza. Sadrži retke i stupce i vrlo je sličan običnoj SQL tablici. View uvijek prikazuje najnovije podatke iz baze podataka.

Stvaranje

IZRADI POGLED KAO ODABIR , ,… OD GDJE ;

Brisanje

KAPNI POGLED ;

Primjer

Izradimo prikaz koji se sastoji od tečajeva s 3 kredita:

24. Zbirne funkcije

Ove se funkcije koriste za dobivanje zbirnog rezultata koji se odnosi na dotične podatke. Sljedeće se uobičajeno koriste skupne funkcije:

  • COUNT (col_name) - vraća broj redaka;
  • SUM (col_name) - vraća zbroj vrijednosti u danom stupcu;
  • AVG (col_name) - Vraća prosječnu vrijednost danog stupca;
  • MIN (col_name) - Vraća najmanju vrijednost za dati stupac;
  • MAX (col_name) - Vraća najveću vrijednost za dati stupac.

25. Ugniježđeni podupiti

Ugniježđeni podupiti su SQL upiti koji uključuju klauzule SELECT, FROM i WHERE ugniježđene unutar drugog upita.

Primjer

Pronađimo tečajeve koji su se predavali u jesen 2009. i proljeće 2010.:

SELECT DISTINCT course_id FROM section WHERE semester = 'Fall' AND year = 2009 AND course_id IN (SELECT course_id FROM section WHERE semester = 'Spring' AND year = 2010);

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 proguglati svaki jednostavan upit da biste pronašli ispravnu sintaksu.


A onda se pridružuju, agregiraju, započinju podupiti i ispada potpuno besmisleno. Čini se ovako:


ODABERI članove.ime || "" || članovi.prezime KAO "Puni naziv" IZ posudbe UNUTRAŠNJE PRIDRUŽITE se članovima NA članove.memberid = posudbe.membid UNUTRAŠNJE PRIDRUŽITE se knjigama na knjigama.bookid = posudbe.knjiga GDJE posudbe.knjižica U (ODABERITE knjižicu IZ knjiga GDJE zaliha> (ODABERITE prosj. (dionice ) IZ knjiga)) GROUP BY members.firstname, members.lastname;

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


Lako je zapamtiti što je intuitivno, a uz pomoć ovog vodiča nadam se da ću sniziti prag ulaska u SQL za početnike, a onima koji su već iskusni ponuditi novi način gledanja na SQL.


Iako je sintaksa SQL -a gotovo ista u različitim bazama podataka, ovaj članak koristi PostgreSQL za upite. Neki će primjeri 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 najtemeljnije aspekte izgradnje upita baze podataka, a drugi, složeniji upiti samo su dodaci povrh njih.

2. Naša baza

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







Imamo knjižnicu knjiga i ljude. Postoji i posebna tablica za računovodstvo izdanih knjiga.

  • Tablica s knjigama sadrži podatke o naslovu, autoru, datumu objavljivanja i dostupnosti knjige. Jednostavno je.
  • Tablica "članovi" sadrži imena i prezimena svih ljudi koji su se registrirali u knjižnici.
  • U tablici "posuđenice" pohranjeni su podaci o knjigama posuđenim iz knjižnice. Stupac bookid odnosi se na identifikator odabrane knjige u tablici "knjige", a stupac sa članovima 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 sljedeći:


SELECT bookid AS "id", title FROM books WHERE author = "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 OD će biti jako važno kasnije kad dođemo do pridruživanja i podupita.


FROM pokazuje na tablicu za upit prema. 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

GDJE se samo ponaša kao filter žice koje želimo ispisati. 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 ćemo prikazati te podatke. U našem slučaju potrebni su samo naslovi i identifikatori knjiga, pa to je ono što mi i izabrati pomoću SELECT. Istodobno možete preimenovati stupac pomoću AS -a.


Cijeli upit može se vizualizirati jednostavnim dijagramom:


4. Veze (spojevi)

Sada želimo vidjeti naslove (ne nužno jedinstvene) svih knjiga Dana Browna koje su uzete iz knjižnice i kada je potrebno vratiti te knjige:


ODABERITE knjige.naslov KAO "Naslov", posudbe.returndate KAO "Datum povrata" IZ posudbe PRIDRUŽITE se knjigama O posudbama.bookid = books.bookid GDJE 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 podatke tražimo iz druge tablice... Ne pristupamo ni tablici knjiga ni tablici posuđivanja. Umjesto toga, pozivamo se na novi stol koja je nastala spajanjem dviju tablica.


posuđivanja PRIDRUŽITE se knjigama o posudbama.bookid = books.bookid je nova tablica koja je nastala kombiniranjem svih zapisa iz tablica "knjige" i "posuđivanja" u kojima su knjigovodstvene vrijednosti iste. Rezultat takvog spajanja bit će:



Zatim ispitujemo ovu tablicu na isti način kao u gornjem primjeru. To znači da pri pridruživanju tablicama trebate samo brinuti o tome kako to spojiti. Tada zahtjev postaje jasan kao u slučaju „jednostavnog zahtjeva“ iz točke 3.


Pokušajmo s malo složenijim spajanjem na dva stola.


Sada želimo dobiti imena ljudi koji su iz biblioteke uzeli autorsku knjigu "Dan Brown".


Ovaj put idemo odozdo prema gore:


Korak Korak 1- odakle nam podaci? Da bismo dobili željeni rezultat, moramo se pridružiti tablicama "član" i "knjige" tablici "posuđivanja". Odjeljak JOIN će izgledati ovako:


posudbe PRIDRUŽITE se knjigama na posudbama.bookid = books.bookid PRIDRUŽITE se članovima NA članovima.memberid = posudbe.membid

Rezultat povezivanja možete vidjeti na poveznici.


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


WHERE books.author = "Dan Brown"

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


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

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


SELECT members.firstname AS "First Name", members.lastname AS "Prezime" IZ posudbe PRIDRUŽITE se knjigama NA posudbama.bookid = books.bookid PRIDRUŽITE se članovima NA članovima.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 ovo popraviti.

5. Agregacija

Grubo rečeno, agregacije su potrebne za pretvaranje više redaka u jedan... Istodobno, tijekom agregacije, za različite stupce koristi se drugačija logika.


Nastavimo s našim primjerom gdje se pojavljuju duplicirani nazivi. Može se vidjeti da je Ellen Horton posudila više od jedne knjige, ali to nije najbolji način za prikaz ovih podataka. Može se podnijeti još jedan zahtjev:


SELECT members.firstname AS "First Name", members.lastname AS "Prezime", count (*) AS "Broj posuđenih knjiga" IZ posudbe PRIDRUŽITE se knjigama NA posuđenicama.bookid = books.bookid PRIDRUŽITE se članovima NA članovima.memberid = posudbe .memberid WHERE books.author = "Dan Brown" GROUP BY members.firstname, members.lastname;

Š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 koju je upit moguće dohvatiti u skupine tablica. Svaka grupa odgovara jedinstvenoj vrijednosti (ili grupi vrijednosti) za stupac koji smo naveli u GROUP BY. U našem primjeru rezultat iz prethodne vježbe pretvaramo u grupu redaka. Također agregiramo s count, koji pretvara više redaka u cjelobrojnu vrijednost (u našem slučaju, ovo je broj redaka). Tada se ova vrijednost dodjeljuje svakoj skupini.


Svaki red u rezultatu rezultat je agregacije 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 trebalo izvršiti agregacija. Budući da se sva druga polja mogu međusobno razlikovati u različitim redovima, a ako ih odaberete s SELECT, nije jasno koju od mogućih vrijednosti treba uzeti.


U gornjem primjeru, funkcija count je obradila sve retke (budući da smo brojali broj redaka). Ostale funkcije poput zbroja ili maks. Obrađuju samo navedene nizove. Na primjer, ako želimo saznati broj knjiga koje je napisao svaki autor, potreban nam je ovakav upit:


ODABERI autora, zbroj (zalihe) IZ KNJIGA GRUPE PO autoru;

Proizlaziti:


Autor iznos
Robin sharma 4
Dan Brown 6
John green 3
Amiški tripati 2

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

6. Podupiti


Podupiti su redovni SQL upiti ugrađeni u veće upite. Podijeljeni su u tri vrste prema vrsti vraćenog rezultata.

6.1 Dvodimenzionalni stol

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 postavljati novi upiti. Nastavljajući prethodnu vježbu, ako želimo saznati broj knjiga koje je napisao autor "Robin Sharma", onda je jedan od mogućih načina korištenje podupita:


SELECT * FROM (SELECT author, sum (stock) FROM books GROUP BY author) AS results WHERE author = "Robin Sharma";

Proizlaziti:



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


2. Koristimo sada ovaj rezultat u novom upitu:


SELECT title, bookid IZ KNJIGA autor IN (ODABERI autora FROM (ODABERI autora, zbroj (zaliha) FROM knjige GRUPA PO autoru) KAO rezultati GDJE zbroj> 3);

Proizlaziti:


titula knjiški
Izgubljeni simbol 2
Tko će plakati kad umrete? 3
Pakao 4

Ovo je isto kao:


ODABERI naslov, knjižna knjiga IZ GDJE je autor IN ("Robin Sharma", "Dan Brown");

6.3 Pojedinačne vrijednosti

Postoje upiti koji rezultiraju samo jednim retkom i jednim stupcem. Oni se mogu tretirati kao konstantne vrijednosti i mogu se koristiti gdje god se vrijednosti koriste, na primjer u operatorima usporedbe. Također se mogu koristiti kao dvodimenzionalne tablice ili nizovi s jednim elementom.


Uzmimo, na primjer, podatke o svim knjigama u knjižnici čiji je broj trenutno iznad prosjeka.


Prosjek se može dobiti na ovaj način:


odaberite prosjek (zalihe) iz knjiga;

Što nam daje:


7. Operacije pisanja

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

7.1 Ažuriranje

Sintaksa za UPDATE upit 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, tada morate vratiti vrijednost količine. Zahtjev za to bit će sljedeći:


UPDATE knjige SET zalihe = 0 WHERE autor = "Dan Brown";

GDJE radi isto što i prije: odabire retke. Umjesto SELECT koji je korišten pri čitanju, sada koristimo SET. Međutim, sada morate navesti ne samo naziv stupca, već i novu vrijednost za ovaj stupac u odabranim redovima.


7.2 Brisanje

DELETE upit je samo SELECT ili UPDATE upit bez naziva stupaca. Ozbiljno. Kao i kod SELECT i UPDATE, klauzula WHERE ostaje ista: odabire redove za brisanje. Operacija brisanja uništava cijeli red pa nema smisla navesti zasebne stupce. Dakle, ako odlučimo ne poništiti broj knjiga Dana Browna, već potpuno izbrisati sve zapise, tada možemo podnijeti sljedeći zahtjev:


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

7.3 Umetnuti

Možda se jedino razlikuje od drugih vrsta upita 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 treba umetnuti u te stupce, istim redoslijedom. To je u osnovi to.


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


INSERT INTO books (bookid, title, author, published, stock) VRIJEDNOSTI (1, "Scion of Ikshvaku", "Amish Tripathi", "22.06.2015", 2), (2, "The Lost Symbol", " Dan Brown "," 22.07.2010. ", 3), (3," Tko će plakati kad umreš? "," Robin Sharma "," 15.-15. 2006. ", 4), (4," Pakao " , "Dan Brown", "05-05-2014", 3), (5, "Greška u našim zvijezdama", "John Green", "03-03-2015", 3);

8. Provjera

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


Evo ga u čitljivijem obliku:


ODABERI članove.ime || "" || članovi.prezime KAO "Puni naziv" IZ posudbe UNUTRAŠNJE PRIDRUŽITE se članovima NA članove.memberid = posudbe.membid UNUTRAŠNJE PRIDRUŽITE se knjigama na knjigama.bookid = posudbe.knjiga GDJE posudbe.knjižica U (ODABERITE knjižicu IZ knjiga GDJE zaliha> (ODABERITE prosj. (dionice ) IZ knjiga)) GROUP BY members.firstname, members.lastname;

Ovaj upit vraća popis ljudi koji su odjavili knjigu iz biblioteke koja ima natprosječan ukupan broj.


Proizlaziti:


Puno ime
Lida Tyler

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