Kako podesiti pametne telefone i računare. Informativni portal

Tablični izrazi. Jednostavni SQL upiti - Brza referenca i primjeri

Ovaj dodatak sadrži sažetiji opis različitih SQL naredbi. Cilj je dati vam brzu i tačnu SQL referencu i definiciju. Prvi dio ovog dodatka definira elemente koji se koriste za kreiranje SQL naredbi; drugo, detalji sintakse i rečenice sa kratkim opisom samih naredbi. Slijede standardne konvencije (zvane BNF termini):

  • Ključne riječi se kucaju velikim slovima.
  • SQL i drugi posebni uslovi su zatvoreni u uglastim zagradama i kurzivom. (< i >)
  • Opcioni delovi naredbi su zatvoreni u uglastim zagradama ().
  • Trotočka (....) označava da se prethodni dio naredbe može ponoviti bilo koji broj puta.
  • Vertikalna crta (|) znači da ono što dolazi prije može biti zamijenjeno onim što slijedi.
  • Kovrčave zagrade ((i)) označavaju da se sve unutar njih mora tretirati kao cjelina kako bi se procijenili drugi znakovi (na primjer, okomite pruge ili elipse).
  • Dvotačke i jednako (:: =) znače - ono što slijedi je definicija onoga što dolazi prije njih.

    Osim toga, koristićemo sljedeći niz (., ..) da naznačimo da se prethodni može ponoviti bilo koji broj puta, s pojedinačnim događajima odvojenim zarezima. Atributi koji nisu dio zvaničnog standarda će biti označeni kao (* nestandardni *) u opisu.

    NAPOMENA: Terminologija koju ovdje koristimo nije zvanična ANSI terminologija. Zvanična terminologija može biti vrlo zbunjujuća, pa smo je malo pojednostavili.

    Iz tog razloga ponekad koristimo druge termine osim ANSI ili koristimo iste termine na malo drugačiji način. Na primjer, naša definicija je -< predicate >razlikuje se od kombinacije ANSI standardne definicije< predicate >With< search condition >.

    SQL ELEMENTI

    Ovaj odjeljak definira elemente SQL naredbi. Podijeljeni su u dvije kategorije: Osnovni elementi jezika, i Funkcionalni elementi jezika.

    Bitni elementi- ovo su blokovi jezika koji se kreiraju; kada SQL ispituje naredbu, prvo procjenjuje svaki znak u tekstu naredbe u smislu tih elemenata. Separatori< separator >odvojiti jedan dio tima od drugog; sve između graničnika< separator >obrađen kao modul. Na osnovu ovog razdvajanja, SQL tumači naredbu.

    Funkcionalni elementi su različite stvari osim ključnih riječi koje se mogu tumačiti kao moduli. Ovo su dijelovi komande, razdvojeni separatorima.< separator >koji imaju posebno značenje u SQL-u. Neke od njih su specifične za određene komande i biće opisane sa ovim komandama kasnije u ovom dodatku. Ovdje su navedeni zajednički elementi za sve opisane komande. Stavke se mogu definisati jedna u odnosu na drugu, pa čak i u terminima za sebe. Na primjer, predikat< predicate >, naš posljednji i najteži slučaj, sadrži predikat unutar vlastite definicije. To je zbog predikata< predicate >korištenje AND ili OR može sadržavati bilo koji broj predikata< predicate >koji mogu da rade autonomno. Predstavili smo vam predikat< predicate >u posebnom dijelu ovog dodatka, zbog raznolikosti i složenosti ovog funkcionalnog elementa jezika. On će biti stalno prisutan kada se raspravlja o drugim funkcionalnim dijelovima komandi.

    ELEMENTI OSNOVNOG JEZIKA

    DEFINICIJA STAVKE< separator > < comment > | < space > | < newline > < comment > --< string > < newline > < space >svemir< newline >kraj niza znakova definiran implementacijom< identifier > < letter >[{< letter or digit > | < underscore}... ] < ИМЕЙТЕ ВВИДУ: Следу строгому стандарту ANSI, символы должны быть набраны в верхнем регистра, а идентификатор < identifier >ne smije biti duži od 18 znakova. DEFINICIJA STAVKE< underscore > - < percent sign > % < delimiter >bilo šta od sljedećeg:, ()< > . : = + " - | <> > = < = или < string > < string >[bilo koji tekst za štampanje u jednostrukim navodnicima] Napomena: U< string >, dva uzastopna jednostruka navodnika ("") se tumače kao jedan (").< SQL term >završetak u zavisnosti od glavnog jezika. (* samo ugniježđeno *)

    FUNKCIONALNI ELEMENTI

    Sljedeća tablica prikazuje funkcionalne elemente SQL naredbi i njihove definicije: DEFINICIJA ITEM< query >SELECT klauzula< subquery >SELECT klauzula zatvorena u zagrade unutar druge klauzule, koja se, u stvari, procjenjuje zasebno za svaki kandidat red druge klauzule.< value expression > < primary > | < primary > < operator > < primary > | < primary > < operator > < value expression > < operator >bilo šta od sljedećeg: + - / *< primary > < column name > | < literal > | < aggregate function > | < built-in constant > | < nonstandard function > < literal > < string > | < mathematical expressio ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < built-in constant >KORISNIK |< implementation-dehned constant > < table name > < identifier > < column spec > [< table name > | < alias >.]< column name > < grouping column > < column spec > | < integer > < ordering column > < column spec > | < integer > < colconstraint >NOT NULL | UNIQUE | PROVJERI (< predicate >) | PRIMARNI KLJUČ | REFERENCE< table name >[(< column name >)] < tabconstraint >JEDINSTVENO (< column list >) | PROVJERI (< predicate >) | PRIMARNI KLJUČ (< column list >) | STRANI KLJUČ (< column list >) REFERENCE< table name >[(< column list >)] < defvalue >ZADANA VRIJEDNOST =< value expression > < data type >Valjani tip podataka (Pogledajte Dodatak B za opise tipova koje daje ANSI ili Dodatak C za druge generičke tipove.)< size >Vrijednost zavisi od< data type >(Vidi Dodatak B.)< cursor name > < identifier > < index name > < identifier > < synonym > < identifier >(* nestandardno *)< owner > < Authorization ID > < column list > < column spec > .,.. < value list > < value expression > .,.. < table reference > { < table name > [< alias >] } .,..

    PREDIKATI

    U nastavku je definirana lista različitih tipova predikata< predicate >opisano na sljedećim stranicama:

    < predicate > ::=

    { < comparison predicate > | < in predicate > | < null predicate > | < between predicate > | < like predicate > | < quantified predicate > | < exists predicate > } < predicate >je izraz koji može biti istinit, lažan ili nepoznat, osim< exists predicate >i< null predicate >to može biti samo tačno ili netačno.

    Neće se znati sprečavaju li NULL vrijednosti da se vraćeni odgovor prikaže. Ovo će se dogoditi svaki put kada se NULL vrijednost uporedi s bilo kojom vrijednošću. Standardni logički operatori AND, OR i NOT mogu se koristiti sa predikatom. NOT true = false, NOT false = istina, i NOT unknown = nepoznato. Rezultati AND i OR u kombinaciji s predikatima prikazani su u sljedećim tabelama:

    I I Tačno Netačno Nepoznato Tačno Tačno Netočno Nepoznato Netočno Netočno Netočno Nepoznato nepoznato nepoznato nepoznato nepoznato ILI Tačno Netačno Nepoznato Tačno istina Netočno Netočno nepoznato nepoznato točno nepoznato nepoznato

    Ove tablice se čitaju na način sličan tablici množenja: spajate istinite, netačne ili nepoznate vrijednosti iz redova s ​​njihovim stupcima da biste dobili rezultat na nišanu. U tabeli I, na primer, treća kolona (Nepoznato) i prvi red (Tačno) na raskrsnici u gornjem desnom uglu daju rezultat - nepoznato, drugim rečima: Tačno I Nepoznato = nepoznato. Redoslijed izračunavanja je naveden u zagradama. Ne predstavljaju se svaki put. Prvo se vrednuje NE, a zatim AND i OR. Različite vrste predikata< predicate >razmatraju se posebno u sljedećem odjeljku.

    < comparison predicate >(predikat za poređenje)

    Sintaksa

    < value expresslon > < relational op > < value expresslon > |
    < subquery >
    < relatlonal op > :: =
    =
    | <
    | >
    | <
    | >=
    | < >

    Ako bilo< value expression >= NULL, ili< comparison predicate >= nepoznato; drugim riječima, istinito je ako je poređenje istinito ili netačno ako je poređenje lažno.
    < relational op >ima standardna matematička značenja za numeričke vrijednosti; za druge tipove vrijednosti, ove vrijednosti su specifične za implementaciju.
    Oba< value expression >moraju imati uporedive tipove podataka. Ako je potupit< subquery >koristi, mora sadržavati jedan izraz< value expression >u SELECT klauzuli čija će vrijednost zamijeniti drugi izraz< value expression >u predikatu poređenja< comparision predicate >, svaki put kada< subquery >je zaista ispunjeno.

    < between predicate >

    Sintaksa

    < value expression >IZMEĐU< value expression >
    I< value expression >

    < between predicate >- A IZMEĐU B I C, ima isto značenje kao< predicate >- (A> = B I< = C). < between predicate >za koje A NE IZMEĐU B I C ima isto značenje kao NE (IZMEĐU B I C).< value expression >može se izvesti korištenjem nestandardnog upita< subquery >(* nestandardno *).

    < in prediicate >

    Sintaksa

    < value expression >IN< value list > | < subquery >

    Lista vrijednosti< value list >sastojat će se od jedne ili više navedenih vrijednosti u zagradama i odvojenih zarezima koji su uporedivi sa< value expression >tip podataka. Ako se koristi potupit< subquery >, trebalo bi da sadrži samo jedan izraz< value expression >u klauzuli SELECT (možda i više, ali ovo će biti izvan ANSI standarda). Potupit< subquery >u stvari, izvršava se odvojeno za svaku kandidatnu liniju glavnog upita, a vrijednosti koje izlazi formirat će listu vrijednosti< value list >za ovu liniju. U svakom slučaju, predikat< in predicate >bit će istinit ako izraz< value expression >predstavljeno u listi vrijednosti< value list >ako je navedeno NE. Fraza A NOT IN (B, C) je ekvivalentna frazi NOT (A IN (B, C)).

    < like predicate >

    Sintaksa

    < charvalue >LIKE< pattern >

    < charvalue >je bilo koji * nestandardni * izraz< value expression >alfanumerički tip.< charvalue >možda, prema standardu, samo određena kolona< column spec >... Uzorak< pattern >sastoji se od niza koji će se provjeravati< charvalue >... Simbol kraja< escapechar >je jedan alfanumerički znak. Podudaranje će se dogoditi ako su ispunjeni sljedeći uvjeti:

  • Za svaku donju crtu< underscore >u uzorku< pattern >kojem ne prethodi krajnji znak< escapechar >, postoji jedan odgovarajući simbol< charvalue >.
  • Za sve< percent sign >u uzorku< pattern >tome ne prethodi< escapechar >, ima nula ili više odgovarajućih znakova< charvalue >.
  • Za sve< escapechar >v< pattern >koji ne prethodi drugom< escapechar >, nema odgovarajućeg znaka u< charvalue >.
  • Za svaki drugi lik u< pattern >, isti simbol se postavlja na odgovarajuću oznaku u< charvalue >.

    Ako se desila utakmica,< like predicate >- istina ako NOT nije navedeno. Fraza NOT LIKE "tekst" je ekvivalentna NOT (A LIKE "text").

    < null predicate >

    Sintaksa

    < column spec >IS NULL

    < column spec >= IS NULL ako je NULL vrijednost prisutna u ovoj koloni. Ovo će biti dovoljno< null predicate >vrijedi ako NULL nije specificirano. Fraza< column spec >NIJE NULL, ima isti efekat kao NOT (< column spec >IS NULL).

    < quantified predicate >

    Sintaksa

    < value expression > < relational op >
    < quantifier > < subquery >
    < quantifier >:: = BILO KOJI | SVE | NEKI

    SELECT klauzula podupita< subquery >mora sadržavati jedan i samo jedan izraz vrijednosti< value expression >... Sve vrijednosti vraćene podupitom< subquery >sastaviti skup rezultata< result set >. < value expression >u poređenju sa korišćenjem nosača< relational operator >, sa svakim članom skupa rezultata< result set >... Ovo poređenje se vrednuje na sledeći način:

  • Ako< quantifier >= SVE, i svaki član skupa rezultata< result set >čini ovo poređenje istinitim,< quantified predicate >- tacno je.
  • Ako< quantifier >= BILO KOJI i postoji barem jedan član iz skupa rezultata< result set >što onda čini ovo poređenje istinitim< quantified predicate >tacno je.
  • Ako je rezultat skup< result set >prazno onda< quantified predicate >istina ako< quantifier >= SVE, i nevažeće osim ako nije drugačije.
  • Ako< quantifier >= NEKI, efekat je isti kao i za BILO KOJI.
  • Ako< quantified predicate >nije vjeran i nije netačan, nepoznat je.

    < exists predicate >

    sintaksa:

    POSTOJI (< subquery >)

    Ako je potupit< subquery >ispisuje jednu ili više linija izlaza,< exists predicate >- tacno je; i netačno ako je drugačije.

    SQL NAREDBE

    Ovaj odjeljak opisuje sintaksu različitih SQL naredbi. Ovo će vam dati mogućnost da brzo pretražujete naredbu, pronađete njenu sintaksu i kratak opis kako ona radi.

    BE INSIGHT Naredbe koje počinju riječima - EXEC SQL, i naredbe ili rečenice koje završavaju riječju - mogu se koristiti samo u ugniježđenom SQL-u.

    POČNI ODJELJAK DECLARE

    Sintaksa

    EXEC SQL BEGIN DECLARE SECTION< SQL term > < host-language variable declarations >EXEC SQL END DECLARE SECTION< SQL term >

    Ova naredba kreira dio programa glavnog jezika za deklariranje glavnih varijabli u njemu, koje će se koristiti u ugniježđenim SQL izrazima. Varijabla SQLCODE mora biti uključena kao jedna od deklariranih varijabli jezika domaćina.

    CLOSE CURSOR

    Sintaksa

    EXEC SQL CLOSE CURSOR< cursor name > < SQL term >;

    Ova naredba govori kursoru da se zatvori, nakon čega se iz njega ne može odabrati nijedna vrijednost dok se ponovo ne otvori.

    OBAVEZITI (RAD)

    Sintaksa

    Ova naredba ostavlja nepromijenjene sve promjene napravljene u bazi podataka dok se započeta transakcija ne dovrši i ne pokrene nova transakcija.

    CREATE INDEX

    (* NESTANDARDNO *) (NESTANDARDNO)

    Sintaksa

    CREATE INDEX< Index name >
    ON< table name > (< column list >);

    Ova komanda kreira efikasnu rutu brzog pristupa za pronalaženje redova koji sadrže naznačene kolone. Ako je specificirano UNIQUE, tabela ne može sadržavati duplikate (blizance) vrijednosti u ovim stupcima.

    STVORI SINONIM (* NESTANDARDNO *)
    (KREIRAJ SINONIM) (* NESTANDARDNO *)

    Sintaksa

    STVORI JAVNI SINONIM< synonym >ZA
    < owner >.< table name >;

    Ova komanda stvara alternativu (sinonim) za njih za tabelu. Sinonim pripada svom kreatoru, a sama tabela, obično drugom korisniku. Koristeći sinonim, njen vlasnik ne mora upućivati ​​na tablicu punim imenom (uključujući vlasnika). Ako je specificirano PUBLIC, sinonim pripada direktoriju SYSTEM i stoga je dostupan svim korisnicima.

    CREATE TABLE

    Sintaksa

    CREATE TABLE< table name >
    ({< column name > < data type >[< size >]
    [< colconstralnt > . . .]
    [< defvalue >]} . , . . < tabconstraint > . , . .);

    Naredba kreira tablicu u bazi podataka. Ova tabela će biti u vlasništvu njenog kreatora. Kolone će se razmatrati u redoslijedu roll-by-name.< data type >- definira tip podataka koje će kolona sadržavati. Standard< data type >opisano u Dodatku B; svi ostali tipovi podataka koji se koriste< data type >razmatrano u Dodatku C. Vrijednost veličine< size >zavisi od tipa podataka< data type >.
    < colconstraint >i< tabconstraint >nametnuti ograničenja na vrijednosti koje se mogu unijeti u kolonu.
    < defvalue >definira (podrazumevanu) vrijednost koja će se automatski umetnuti ako nije navedena druga vrijednost za ovaj red. (Pogledajte Poglavlje 17 za detalje o samoj naredbi CREATE TABLE i Poglavlje 18 I za detalje o ograničenjima i< defvalue >).

    CREATE VIEW

    Sintaksa

    CREATE VIEW< table name >
    AS< query >
    ;

    Skeniranje se tretira kao svaka tabela u SQL naredbama. Kada se naredba odnosi na ime tablice< table name >, upit< query >se izvršava, a njegov izlaz odgovara sadržaju tabele navedene u ovoj naredbi.
    Neki pogledi se mogu modificirati, što znači da se naredbe za modifikaciju mogu izvršiti u ovim pogledima i proslijediti tablici koja je referencirana u upitu< query >... Ako je WITH CHECK OPTION specificirana, ova modifikacija također mora zadovoljiti uslov predikata< predicate >na zahtjev< query >.

    DECLARE CURSOR

    Sintaksa

    EXEC SQL DECLARE< cursor name >CURSOR FOR
    < query >< SQL term >

    Ova komanda ih vezuje za kursor< cursor name >, sa zahtjevom< query >... Kada je kursor otvoren (pogledajte OPEN CURSOR), upit< query >se izvršava, a njegov rezultat se može odabrati (sa naredbom FETCH) za izlaz. Ako se kursor može mijenjati, tabela na koju upućuje upit< query >, može primiti promjenu sadržaja koristeći operaciju modifikacije na kursoru (pogledajte Poglavlje 25 za kursore koji se mogu mijenjati).

    IZBRIŠI

    Sintaksa

    IZBRIŠI IZ< table name >
    { ; }
    | GDJE TRENUTNO< cursorname >< SQL term >

    Ako ne postoji klauzula WHERE, SVI redovi u tabeli se brišu. Ako klauzula WHERE koristi predikat< predicate >, redovi koji zadovoljavaju uslov ovog predikata< predicate >uklonjeno. Ako klauzula WHERE ima argument CURRENT OF u imenu kursora< cursor name >, red iz tabele< table name >koji se trenutno poziva pomoću imena kursora< cursor name >će biti obrisan. Obrazac WHERE CURRENT može se koristiti samo u ugniježđenom SQL-u i samo s kursorima koji se mogu mijenjati.

    EXEC SQL

    Sintaksa

    EXEC SQL< embedded SQL command > < SQL term >

    EXEC SQL se koristi za označavanje početka svih SQL naredbi ugniježđenih na drugom jeziku.

    FETCH

    Sintaksa

    EXEC SQL FETCH< cursorname >
    INTO< host-varlable llst >< SQL term >

    FETCH uzima izlaz iz trenutnog niza upita< query >, umeće ga u listu glavnih varijabli< host-variable list >, i pomiče kursor na sljedeći red. Lista< host-variable list >može uključiti indikator varijable kao ciljnu varijablu (vidi Poglavlje 25.)

    GRANT

    sintaksa (standardna)

    GRANT ALL
    | (ODABIR
    | INSERT
    | IZBRIŠI
    | UPDATE [(< column llst >)]
    | REFERENCE [(< column llst >) l). ,. ...
    ON< table name > . , . .
    JAVNOSTI |< Authorization ID > . , . .
    ;

    Argument SVE, sa ili bez PRIVILEGIJA, uključuje svaku privilegiju na listi privilegija. JAVNO uključuje sve postojeće korisnike i sve buduće korisnike. Ova naredba omogućava prijenos prava za izvođenje radnji u tabeli sa navedenim imenom. REFERENCE vam omogućava da dodijelite prava za korištenje stupaca na listi kolona< column list >kao roditeljski ključ za strani ključ. Ostale privilegije se sastoje od prava na izvršavanje naredbi za koje su privilegije naznačene njihovim nazivima u tabeli. UPDATE je sličan REFERENCES i može nametnuti ograničenja na određene stupce. GRANT OPTION vam omogućava da prenesete ove privilegije na druge korisnike.

    Sintaksa (nestandardna)

    GRANT DBA
    | RESOURCE
    | POVEŽI ....
    TO< Authorization ID > . , . .
    | < privilege > . , . . }
    IZ (JAVNOG
    | < Authorization ID > . , . . };

    Privilegija< privelege >može biti bilo koji od onih navedenih u naredbi GRANT. Korisnik koji daje REVOKE mora imati iste privilegije kao korisnik koji je dao GRANT. ON klauzula se može koristiti ako se koristi posebna privilegija tipa za određeni objekt.

    ROLLBACK (POSLO)
    (VRANJE) (TRANSAKCIJE)

    Sintaksa

    Naredba poništava sve promjene napravljene u bazi podataka tokom trenutne transakcije. Također završava trenutnu i započinje novu transakciju.

    SELECT

    Sintaksa

    ODABIR (IDISTINCT | SVE)< value expression > . , . . } / *
    OD< table reference > . , . .

    . , . . ];

    Ova klauzula organizira upit i izlazi vrijednosti iz baze podataka (pogledajte Poglavlje 3 - Poglavlje 14). Primjenjuju se sljedeća pravila:

  • Ako nije navedeno ni SVE ni DISTINCT, prihvata se SVE.
  • Izraz< value expression >sastoji se od< column spec >, agregatna funkcija< aggregate funct >, prilagođena funkcija< nonstandard fu nction >konstantan< constant >, ili bilo koju njihovu kombinaciju s operatorima u važećim izrazima.
  • Referentna tabela< table reference >, sastoji se od naziva tablice, uključujući prefiks vlasnika ako trenutni korisnik nije vlasnik, ili sinonim (nestandardan) za tablicu. Tabela može biti ili osnovna tabela ili pogled. U osnovi, pseudonim može naznačiti koji se sinonim koristi za tabelu samo za vrijeme trajanja trenutne naredbe. Ime tabele ili sinonim moraju biti odvojeni od aliasa jednim ili više znakova za razdvajanje< separator >.
  • Ako se koristi GROUP BY, svi stupci< column spec >koja se koristi u klauzuli SELECT morat će se koristiti kao grupa stupaca< grouping column >ako nisu sadržani u agregatnoj funkciji< aggregate funct >... Cijela grupa kolona< grouping column >mora biti predstavljen među izrazima< value expressions >navedeno u SELECT klauzuli. Za svaku različitu kombinaciju vrijednosti grupe stupaca< grouping column >, postojaće jedna i samo jedna linija izlaza.
  • Ako se koristi HAVING, predikat< predicate >primjenjuje se na svaki red koji proizvodi GROUP BY klauzula, a oni redovi koji čine ovaj predikat istinitim bit će ispisani.
  • Ako se koristi ORDER BY, izlaz je u određenom nizu. Svaka kolona id< column identifer >se odnosi na navedeno< value expression >u klauzuli SELECT. Ako ovo< value expression >je navedena kolona< column spec >, < co lumn identifier >može biti isto kao< column spec >... Inače< co lumn identifier >može biti pozitivan cijeli broj koji označava lokaciju na kojoj je< value expression >u slijedu SELECT klauzule. Izlaz će biti formiran tako da odgovara vrijednostima sadržanim u< column identifier >u rastućem redoslijedu ako DESC nije specificiran. ID kolone naziv< column identifier >prvi u ORDER BY klauzuli će prethoditi kasnijim imenima u definiciji izlaznog niza.

    SELECT klauzula procjenjuje svaki kandidatski red tablice u kojoj se redovi prikazuju nezavisno. Kandidatni niz je definiran na sljedeći način:

  • Ako postoji samo jedna referentna tabela< table reference >omogućeno, svaki red ove tabele je red kandidata.
  • Ako je više od jedne referentne tablice< table reference >ako je omogućeno, svaki red svake tabele mora biti kombinovan sa svakom kombinacijom redova iz svih ostalih tabela. Svaka takva kombinacija će zauzvrat biti kandidatski niz.

    Svaka linija kandidata proizvodi vrijednosti koje čine predikat< predicate >u klauzuli WHERE istinito, netočno ili nepoznato. Ako se GROUP BY ne koristi, svaki< value expression >primjenjuje se redom za svaki kandidatski niz čija vrijednost čini predikat validnim, a rezultat ove operacije je izlaz.
    Ako se koristi GROUP BY, redovi kandidata se kombiniraju pomoću agregatnih funkcija. Ako nema predikata< predicate >nije postavljeno, svaki izraz< value expression >odnosi se na svaku kandidatsku liniju ili grupu. Ako je naveden DISTINCT, dupli redovi će biti uklonjeni iz izlaza.

    UNION

    Sintaksa

    < query >(UNION< query > } . . . ;

    Prikaz dva ili više upita< query >će biti spojen. Svaki zahtev< query >mora sadržavati isti broj< value expression >u SELECT klauzulu i takvim redoslijedom da je 1 .. n od svakog tipa podataka kompatibilan< data type >i veličina< size >sa 1 .. n svim ostalima.

    UPDATE

    Sintaksa

    UPDATE< table name >
    POSTAVI (< column name > = < value expression > } . , . .
    ([GDJE< predlcate >]; }
    | {
    < SQL term >]}

    UPDATE mijenja vrijednosti u svakoj imenovanoj koloni< column name >po odgovarajućoj vrijednosti< value expression >... Ako klauzula WHERE koristi predikat< predicate >, zatim samo redovi tablice čije trenutne vrijednosti čine taj predikat< predicate >ispravan, podložan promjenama. Ako WHERE koristi klauzulu CURRENT OF, tada se navode vrijednosti u redu tablice< table name >nalazi u kursoru sa imenom< cursor name >promijeniti. WHERE CURRENT OF je upotrebljiv samo u ugniježđenom SQL-u i samo s kursorima koji se mogu mijenjati. Ako nema klauzule WHERE, mijenjaju se svi redovi.

    KADA

    Sintaksa

    EXEC SQL WHENEVER< SQLcond > < actlon > < SQL term >
    < SQLcond >:: = SQLERROR | NIJE PRONAĐEN | SQLWARNING
    (ovo drugo je nestandardno)
    < action >:: = NASTAVI | IDI< target >| IDI< target >
    < target >:: = zavisi od glavnog jezika

  • Svako od nas redovno nailazi i koristi razne baze podataka. Kada odaberemo adresu e-pošte, radimo sa bazom podataka. Baze podataka koriste pretraživače, banke za skladištenje podataka o klijentima itd.

    Ali, uprkos stalnoj upotrebi baza podataka, čak i za mnoge programere softverskih sistema postoje mnoge „prazne tačke“ zbog različitih tumačenja istih pojmova. Daćemo kratku definiciju osnovnih pojmova baze podataka pre nego što pogledamo SQL jezik. Dakle.

    Baza podataka - datoteka ili skup datoteka za pohranjivanje uređenih struktura podataka i njihovih odnosa. Vrlo često se kontrolni sistem naziva baza podataka – to je samo skladište informacija u određenom formatu i može raditi sa različitim DBMS-ima.

    sto - Zamislite fasciklu u kojoj se čuvaju dokumenti grupirani po određenom kriterijumu, na primer, lista porudžbina za prošli mesec. Ovo je tabela u kompjuteru.Zasebna tabela ima svoje jedinstveno ime.

    Tip podataka - vrsta informacija koje je dozvoljeno pohraniti u posebnu kolonu ili red. To mogu biti brojevi ili tekst u određenom formatu.

    Kolona i red- svi smo radili sa tabelama, koje takođe imaju redove i kolone. Svaka relaciona baza podataka radi sa tabelama na sličan način. Linije se ponekad nazivaju zapisima.

    Primarni ključ- svaki red tabele može imati jednu ili više kolona za svoju jedinstvenu identifikaciju. Bez primarnog ključa, vrlo je teško ažurirati, modificirati i izbrisati potrebne redove.

    Šta je SQL?

    SQL(engleski - strukturirani jezik upita) razvijen je samo za rad sa bazama podataka i trenutno je standard za sve popularne DBMS. Sintaksa jezika se sastoji od malog broja operatora i lako se uči. Ali, uprkos vanjskoj jednostavnosti, omogućava kreiranje sql upita za složene operacije s bazom podataka bilo koje veličine.

    Od 1992. godine postoji općeprihvaćeni standard koji se zove ANSI SQL. Definira osnovnu sintaksu i funkcije operatora i podržavaju ga svi lideri na tržištu DBMS-a, kao što je ORACLE.Nemoguće je sagledati sve karakteristike jezika u jednom malom članku, pa ćemo ukratko razmotriti samo osnovne SQL upite . Primjeri jasno pokazuju jednostavnost i mogućnosti jezika:

    • kreiranje baza podataka i tabela;
    • dohvaćanje podataka;
    • dodavanje zapisa;
    • modifikacija i brisanje informacija.

    SQL tipovi podataka

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

    Kreirajte tabele i baze podataka

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

    • SQL izrazi preko DBMS konzole
    • Korištenje alata za online administraciju uključenih u poslužitelj baze podataka.

    Operater kreira novu bazu podataka CREATE DATABASE<наименование базы данных>; ... Kao što vidite, sintaksa je jednostavna i koncizna.

    Kreiramo tabele unutar baze podataka sa naredbom CREATE TABLE sa sljedećim parametrima:

    • ime tabele
    • nazive kolona i tipove podataka

    Kao primjer, napravimo tablicu robe sa sljedećim stupcima:

    Kreiramo tabelu:

    CREATE TABLE Roba

    (commodity_id CHAR (15) NOT NULL,

    vendor_id CHAR (15) NOT NULL,

    commodity_name CHAR (254) NULL,

    commodity_price DECIMAL (8,2) NULL,

    commodity_desc VARCHAR (1000) NULL);

    Tabela ima pet kolona. Nakon imena slijedi tip podataka, kolone su odvojene zarezima. Vrijednost stupca može biti null (NULL) ili mora biti popunjena (NOT NULL), a to se određuje kada se tabela kreira.

    Preuzimanje podataka iz tabele

    Operator odabira podataka je najčešće korišteni SQL upit. Za dobijanje informacija potrebno je naznačiti šta želimo da izaberemo iz takve tabele. Počnimo s jednostavnim primjerom:

    SELECT commodity_name FROM Commodity

    Nakon naredbe SELECT, specificiramo ime stupca za dobivanje informacija, a FROM definira tablicu.

    Rezultat izvršavanja upita bit će svi redovi tabele sa vrijednostima Commodity_name onim redoslijedom kojim su uneseni u bazu podataka, tj. bez ikakvog sortiranja. Dodatna ORDER BY klauzula se koristi za naručivanje rezultata.

    Za upit na nekoliko polja navodimo ih odvojene zarezima, kao u sljedećem primjeru:

    ODABERITE commodity_id, commodity_name, commodity_price OD robe

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

    ODABERITE * IZ robe

    • Dodatno SELECT podržava:
    • Sortiranje podataka (ORDER BY operator)
    • Odabir prema uslovima (GDJE)
    • Pojam grupisanja (GROUP BY)

    Dodajte liniju

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

    • dodajte novu cijelu liniju;
    • dio niza;
    • rezultati upita.

    Da biste dodali cijeli red, morate navesti ime tablice i vrijednosti stupaca (polja) novog reda. Dajemo primjer:

    UMETNI U VRIJEDNOSTI robe ("106", "50", "Coca-Cola", "1,68", "Bez alkohola,)"

    Primjer dodaje novi proizvod u tablicu. Vrijednosti su navedene nakon VALUES za svaku kolonu. Ako ne postoji odgovarajuća vrijednost za stupac, tada se mora navesti NULL. Kolone se popunjavaju vrijednostima redoslijedom navedenim kada je tabela kreirana.

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

    INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

    VRIJEDNOSTI ("106", '50 "," Coca-Cola ",)

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

    Dodavanje rezultata upita

    INSERT se uglavnom koristi za dodavanje redova, ali se može koristiti i za dodavanje rezultata SELECT izraza.

    Promjena podataka

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

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

    UPDATE ima tri glavna elementa:

    • tabela u kojoj treba da izvršite promene;
    • imena polja i njihove nove vrijednosti;
    • uslovi za odabir redova za promjenu.

    Pogledajmo primjer. Recimo da se promijenila cijena artikla sa ID = 106, pa je potrebno ažurirati ovu liniju. Pišemo sljedeći operator:

    UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"

    Naznačili smo naziv tabele, u našem slučaju Commodity, gde će se izvršiti ažuriranje, zatim nakon SET - novu vrednost kolone i pronašli traženi zapis navodeći traženu vrednost ID-a u WHERE.

    Za izmjenu više stupaca, nakon naredbe SET navodi se više parova stupac-vrijednost, odvojeno zarezima. Pogledajmo primjer koji ažurira naziv i cijenu proizvoda:

    UPDATE Commodity SET commodity_name = 'Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

    Da biste uklonili informacije u stupcu, možete ga postaviti na NULL ako to dozvoljava struktura tablice. Treba imati na umu da je NULL upravo "ne" vrijednost, a ne nula u obliku teksta ili brojeva. Izbrišemo opis proizvoda:

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

    Brisanje redova

    SQL upiti za brisanje redova u tablici se izvode naredbom DELETE. Postoje dva slučaja upotrebe:

    • određeni redovi se brišu u tabeli;
    • svi redovi u tabeli se brišu.

    Primjer brisanja jednog reda iz tabele:

    IZBRIŠI IZ robe WHERE commodity_id = "106"

    Nakon DELETE FROM navodimo ime tabele u kojoj će se redovi brisati. Klauzula WHERE sadrži uslov prema kojem će biti odabrani redovi za brisanje. U primjeru brišemo liniju za proizvod s ID = 106. Veoma je važno navesti GDJE. izostavljanje ove izjave će izbrisati sve redove u tabeli. Ovo se također odnosi na promjenu vrijednosti polja.

    Naredba DELETE ne uključuje nazive stupaca ili metaznakove. Briše redove u potpunosti, ali ne može izbrisati niti jednu kolonu.

    Korištenje SQL-a u Microsoft Accessu

    Obično se interaktivno koristi za kreiranje tabela, baza podataka, za upravljanje, modifikaciju, analizu podataka u bazi podataka i za ugrađivanje SQL Access upita putem praktičnog interaktivnog dizajnera upita (Query Designer), pomoću kojeg možete izgraditi i odmah izvršiti SQL izraze bilo kojeg složenost...

    Podržan je i način pristupa serveru, u kojem se Access DBMS može koristiti kao generator SQL upita za bilo koji ODBC izvor podataka. Ova mogućnost omogućava Access aplikacijama da komuniciraju sa bilo kojim formatom.

    SQL ekstenzije

    Budući da SQL upiti nemaju sve mogućnosti proceduralnih programskih jezika kao što su petlje, grane, itd., dobavljači baza podataka 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 Database - PL / SQL
    • Interbase, Firebird - PSQL
    • Microsoft SQL Server - Transact-SQL
    • PostgreSQL - PL / pgSQL.

    SQL na Internetu

    MySQL se distribuira pod GNU Općom javnom licencom. Postoji komercijalna licenca sa mogućnošću razvoja prilagođenih modula. Kao sastavni deo, uključen je u najpopularnije sklopove internet servera, kao što su XAMPP, WAMP i LAMP, i najpopularniji je DBMS za razvoj aplikacija na Internetu.

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

    Kako mogu saznati broj modela PC-a koje proizvodi određeni proizvođač? Kako odrediti prosječnu cijenu za računare sa istim specifikacijama? Na ova i mnoga druga pitanja u vezi sa nekim statističkim informacijama može se odgovoriti pomoću zbirne (agregatne) funkcije... Standard predviđa sljedeće agregatne funkcije:

    Sve ove funkcije vraćaju jednu vrijednost. U ovom slučaju, funkcije COUNT, MIN i MAX primjenjivi su na bilo koji tip podataka, dok SUMA i AVG se koriste samo za numerička polja. Razlika između funkcija COUNT (*) i COUNT (<имя поля>) je da drugi ne uzima u obzir NULL vrijednosti prilikom izračunavanja.

    Primjer. Pronađite minimalnu i maksimalnu cijenu za personalne računare:

    Primjer. Pronađite broj dostupnih računara proizvođača A:

    Primjer. Ako nas zanima broj različitih modela koje proizvodi proizvođač A, onda se upit može formulirati na sljedeći način (koristeći činjenicu da se u tabeli proizvoda svaki model bilježi jednom):

    Primjer. Pronađite broj različitih modela dostupnih od proizvođača A. Upit je sličan prethodnom, u kojem se tražilo odrediti ukupan broj modela proizvedenih od strane proizvođača A. Ovdje također morate pronaći broj različitih modela u PC stol (tj. komercijalno dostupan).

    Kako bi se osiguralo da se pri dobijanju statističkih pokazatelja koriste samo jedinstvene vrijednosti, kada argument agregatnih funkcija može biti korišteno DISTINCT parametar... Drugi parametar SVE je zadana vrijednost i pretpostavlja da se sve povratne vrijednosti u koloni broje. operater,

    Ako trebamo dobiti broj proizvedenih modela PC-a svaki proizvođača, morat ćete koristiti GROUP BY klauzula sintaktički prateći WHERE klauzule.

    GROUP BY klauzula

    GROUP BY klauzula koristi se za definiranje grupa izlaznih linija na koje se može primijeniti agregatne funkcije (COUNT, MIN, MAX, AVG i SUM)... Ako ova klauzula nedostaje i ako se koriste agregatne funkcije, tada se koriste svi stupci s imenima navedenim u SELECT treba uključiti u agregatne funkcije, a ove funkcije će se primijeniti na cijeli skup redova koji zadovoljavaju predikat upita. Inače, sve kolone SELECT liste, nisu uključeni u agregatnim funkcijama, mora biti specificirano u klauzuli GROUP BY... Kao rezultat toga, sve izlazne linije upita podijeljene su u grupe koje karakteriziraju iste kombinacije vrijednosti u ovim stupcima. Nakon toga, agregatne funkcije će se primijeniti na svaku grupu. Imajte na umu da se za GROUP BY sve NULL vrijednosti tretiraju kao jednake, tj. kada se grupišu po polju koje sadrži NULL vrijednosti, svi takvi redovi će pasti u jednu grupu.
    Ako ako postoji klauzula GROUP BY, u klauzuli SELECT nema agregatnih funkcija, onda će upit jednostavno vratiti jedan red iz svake grupe. Ova funkcija, zajedno sa ključnom riječi DISTINCT, može se koristiti za eliminaciju duplih redova u skupu rezultata.
    Pogledajmo jednostavan primjer:
    SELECT model, COUNT (model) AS Qty_model, AVG (cijena) AS prosječna cijena
    SA PC-a
    GROUP BY model;

    U ovom zahtjevu se za svaki model PC-a utvrđuje njihov broj i prosječna cijena. Svi redovi sa istim vrijednostima modela formiraju grupu, a SELECT izlaz izračunava broj vrijednosti i vrijednosti prosječne cijene za svaku grupu. Upit će rezultirati sljedećom tablicom:
    model Qty_model Prosječna cijena
    1121 3 850.0
    1232 4 425.0
    1233 3 843.33333333333337
    1260 1 350.0

    Kada bi SELECT imao kolonu s datumom, tada bi bilo moguće izračunati ove indikatore za svaki određeni datum. Da biste to učinili, trebate dodati datum kao kolonu za grupisanje, a zatim će se izračunati agregatne funkcije za svaku kombinaciju vrijednosti (model-datum).

    Postoji nekoliko specifičnih pravila za obavljanje agregatnih funkcija:

    • Ako kao rezultat upita nema primljenih linija(ili više od jednog reda za datu grupu), tada nedostaju početni podaci za izračunavanje bilo koje agregatne funkcije. U ovom slučaju, rezultat izvršavanja funkcija COUNT bit će nula, a rezultat svih ostalih funkcija će biti NULL.
    • Argument agregatna funkcija ne može sama sadržavati agregatne funkcije(funkcija od funkcije). One. u jednom upitu, ne možete, recimo, dobiti maksimalne prosječne vrijednosti.
    • Rezultat izvršavanja funkcije COUNT je cijeli broj(INTEGER). Druge agregatne funkcije nasljeđuju tipove podataka vrijednosti koje se obrađuju.
    • Ako se prilikom izvršavanja funkcije SUM dobije rezultat koji premašuje maksimalnu vrijednost korištenog tipa podataka, greška.

    Dakle, ako zahtjev ne sadrži GROUP BY klauzule, onda agregatne funkcije uključeno u SELECT klauzula, se izvršavaju na svim rezultirajućim linijama upita. Ako zahtjev sadrži GROUP BY klauzula, svaki skup redova koji ima iste vrijednosti kolone ili grupe stupaca navedene u GROUP BY klauzula, čini grupu, i agregatne funkcije izvode se za svaku grupu posebno.

    HAVING klauzula

    Ako WHERE klauzula onda definira predikat za filtriranje redova HAVING ponudu primijenjeno nakon grupisanja za definiranje sličnih grupa filtriranja predikata po vrijednostima agregatne funkcije... Ova klauzula je potrebna za testiranje vrijednosti koje se dobijaju upotrebom agregatna funkcija ne iz zasebnih redova izvora zapisa definiranog u FROM klauzula, i od grupe takvih linija... Stoga takva provjera ne može biti sadržana u WHERE klauzula.

    sintaksa:

    * gdje polja1- polja za odabir, odvojena zarezima, također možete navesti sva polja sa *; sto- naziv tabele iz koje izvlačimo podatke; uslovima- uslovi uzorkovanja; polja2- polje ili polja odvojena zarezima, po kojima se sortira; count- broj linija za preuzimanje.
    * upit u uglastim zagradama nije obavezan za odabir podataka.

    Jednostavni primjeri korištenja select

    1. Normalno uzorkovanje podataka:

    > SELECT * FROM korisnika

    2. Dohvaćanje podataka udruživanjem dvije tabele (JOIN):

    SELECT u.name, r. * FROM korisnika u PRIDRUŽITE se korisnička_prava r ON r.user_id = u.id

    * u ovom primjeru dohvaćamo podatke sa spojnim tabelama korisnika i korisnička_prava... Ujedinjuju ih polja Korisnički broj(u tabeli users_rights) i id(korisnici). Dohvaća polje imena iz prve tabele i sva polja iz druge.

    3. Uzorkovanje sa vremenskim intervalom i/ili datumom

    a) početna tačka i određeni vremenski interval su poznati:

    * biće odabrani podaci za zadnji sat (polje datum).

    b) su poznati datum početka i datum završetka:

    25.10.2017 i 25.11.2017 .

    c) su poznati datum početka i završetka + vrijeme:

    * odaberite podatke između 25.03.2018 0 sati 15 minuta i 25.04.2018 15 sati 33 minuta i 9 sekundi.

    d) izvlačimo podatke za određeni mjesec i godinu:

    * izdvojiti podatke, gdje u polju datum postoje vrijednosti za april 2018 godine.

    4. Uzorkovanje maksimalnih, minimalnih i prosječnih vrijednosti:

    > SELECT max (područje), min (područje), prosječno (područje) IZ zemlje

    * max- maksimalna vrijednost; min- minimum; avg- prosječna.

    5. Korištenje dužine linije:

    * ovaj upit bi trebao prikazati sve korisnike čije se ime sastoji od 5 znakova.

    Primjeri složenijih upita ili rijetko korištenih

    1. Kombinirajte sa grupiranjem odabranih podataka u jedan red (GROUP_CONCAT):

    * sa stola korisnika preuzima podatke po polju id, svi staju u jedan red, vrijednosti su odvojene zarezi.

    2. Grupiranje podataka po dva ili više polja:

    > ODABIR * OD korisnika GRUPA PO KONKATU (titula, "::", rođenje)

    * ukupno, u ovom primjeru ćemo izbaciti podatke iz tablice korisnika i grupirati ih po poljima naslov i rođenje... Prije grupisanja, vršimo konkatenaciju polja u jedan red sa separatorom :: .

    3. Kombiniranje rezultata iz dvije tabele (UNION):

    > (ODABIR ID, fio, adresu, "Korisnici" kao tip FROM korisnika)
    UNION
    (ODABIR ID, fio, adresu, "Kupci" kao tip FROM kupaca)

    * u ovom primjeru podaci se preuzimaju iz tabela korisnika i kupaca.

    4. Uzorak prosjeka, grupisanih za svaki sat:

    SELECT avg (temperatura), DATE_FORMAT (datetimeupdate, "% Y-% m-% d% H") kao sat_datetime IZ arhive GRUPE DO DATE_FORMAT (datetimeupdate, "% Y-% m-% d% H")

    * ovdje izvlačimo prosjek polja temperaturu sa stola arhiva i grupa po polju datetimeupdate(sa podjelom vremena za svaki sat).

    umetnuti (INSERT)

    Sintaksa 1:

    > INSERT INTO

    () VRIJEDNOSTI ( )

    Sintaksa 2:

    > INSERT INTO

    VRIJEDNOSTI ( )

    * gdje sto- naziv tabele u koju unosimo podatke; polja- nabrajanje polja odvojenih zarezima;vrijednosti- nabrajanje vrijednosti odvojenih zarezima.
    * prva opcija će omogućiti umetanje samo navedenih polja - ostala će dobiti zadane vrijednosti. Druga opcija će zahtijevati umetanje za sva polja.

    Primjeri korištenja inserta

    1. Umetnite više redova u jedan upit:

    > UMETNI U gradove ("ime", "država") VRIJEDNOSTI ("Moskva", "Rusija"), ("Pariz", "Francuska"), ("Funafuti", "Tuvalu");

    * u ovom primjeru ćemo dodati 3 zapisa sa jednim SQL upitom.

    2. Zalijepi iz druge tabele (kopiranje redova, INSERT + SELECT):

    * izvuci sve zapise iz tabele gradova, čiji nazivi počinju sa "M" i ulaze u tabelu gradovi-novi.

    Ažuriraj (AŽURIRAJ)

    sintaksa:

    * gdje sto- naziv tabele; polje- polje za koje ćemo promijeniti vrijednost; vrijednost- nova vrijednost; uslovima- stanje (opasno je raditi ažuriranje bez njega - možete zamijeniti sve podatke u cijeloj tabeli).

    Ažuriranje korištenjem zamjene (ZAMJENA):

    UPDATE

    SET = ZAMJENA ( , "<что меняем>", "<на что>");

    AŽURIRAJTE gradove SET name = REPLACE (ime, "Maskva", "Moscow");

    Ako želimo igrati na sigurno, rezultat zamjene se prvo može provjeriti pomoću SELECT:

    Brisanje (DELETE)

    sintaksa:

    * gdje sto- naziv tabele; uslovima- uslov (kao u slučaju UPDATE, opasno je koristiti DELETE bez uslova - DBMS neće tražiti potvrdu, već će jednostavno izbrisati sve podatke).

    Kreiranje tabele

    sintaksa:

    > CREATE TABLE

    ( , )

    > KREIRAJ TABELU AKO NE POSTOJI `korisnička_prava` (
    `id` int (10) unsigned NOT NULL,
    `user_id` int (10) unsigned NOT NULL,
    `prava` int (10) unsigned NOT NULL
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8;

    * gdje sto- naziv tabele (u primjeru korisnička_prava); polje1, polje2- naziv polja (u primjeru su kreirana 3 polja - id, user_id, prava); opcije1, opcije2- parametri polja (u primjeru int (10) unsigned NOT NULL); opcije stola- opći parametri tabele (u primjeru ENGINE = InnoDB DEFAULT CHARSET = utf8).

    Korišćenje upita u PHP-u

    Povezujemo se sa bazom podataka:

    mysql_connect ("localhost", "login", "password") ili die ("MySQL connect error");
    mysql_select_db ("db_name");
    mysql_query ("SET NAMES" utf8 "");

    * gdje se uspostavlja veza sa bazom na lokalnom serveru ( localhost); vjerodajnice za vezu - Ulogovati se i lozinka(odnosno, login i lozinka); koristi se kao baza db_name; korišteno kodiranje UTF-8.

    Također možete kreirati trajnu vezu:

    mysql_pconnect ("localhost", "login", "password") ili die ("MySQL connect error");

    * međutim, postoji mogućnost dostizanja maksimalno dozvoljenog ograničenja hostinga. Ovu metodu treba koristiti na vlastitim serverima, gdje sami možemo kontrolirati situaciju.

    Kraj veze:

    * u PHP-u se radi automatski, osim za trajne veze (mysql_pconnect).

    Upit za MySQL (Mariadb) u PHP-u obavlja funkcija mysql_query (), a preuzimanje podataka iz upita vrši se pomoću mysql_fetch_array ():

    $ result = mysql_query ("SELECT * FROM users");
    dok ($ masa = mysql_fetch_array ($ rezultat)) (
    eho $ masa. "
    ";
    }

    * u ovom primjeru, upit je postavljen na tablicu korisnika... Rezultat upita se stavlja u varijablu $ rezultat... Zatim se koristi petlja dok, čija svaka iteracija preuzima niz podataka i stavlja ga u varijablu $ masa- u svakoj iteraciji radimo sa jednim redom baze podataka.

    Korištena funkcija mysql_fetch_array () vraća asocijativni niz, s kojim je zgodno raditi, ali postoji još jedna alternativa - mysql_fetch_row (), koja vraća redovne numerisane nizove.

    Zaštita

    Ako trebate uključiti poseban znak u string upita, na primjer,%, morate koristiti izbjegavanje pomoću obrnute kose crte - \

    Na primjer:

    * ako izvršite takav upit bez izbjegavanja, znak % će se tumačiti kao bilo koji broj znakova nakon 100.

    To je sve. Ako vam je potrebna pomoć oko ispunjavanja vašeg zahtjeva, pišite mi na mail

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

    Razumijevanje kako SQL funkcionira pomaže vam da kreirate preciznije upite i olakšava popravljanje upita koji vraćaju netačne rezultate.

    Ovaj članak je dio serije o SQL-u za Access. On opisuje osnove upotrebe SQL-a za dohvaćanje podataka i daje primjere SQL sintakse.

    U ovom članku

    Šta je SQL?

    SQL je programski jezik za rad sa skupovima činjenica i odnosima između njih. Programi za upravljanje relacionim 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 standarde kao što su ISO i ANSI.

    Skupovi podataka su opisani u SQL-u kako bi se odgovorilo na pitanja. Mora se koristiti ispravna sintaksa kada se koristi SQL. Sintaksa je skup pravila koja vam omogućavaju da pravilno kombinujete elemente jezika. SQL sintaksa je bazirana na engleskoj sintaksi i dijeli mnoge elemente sa sintaksom Visual Basica za aplikacije (VBA).

    Na primjer, jednostavan SQL izraz koji dohvaća listu prezimena kontakata po imenu Mary može izgledati ovako:

    SELECT Prezime
    IZ kontakata
    WHERE First_Name = "Marija";

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

    SELECT iskazi

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

      tabele koje sadrže podatke;

      veze između podataka iz različitih izvora;

      polja ili proračuni na osnovu kojih se biraju 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 izrazu 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 termini

    Svaki SQL izraz sastavljen je od pojmova koji se mogu porediti sa delovima govora. Sljedeća tabela navodi tipove SQL pojmova.

    SQL termin

    Uporedivi dio govora

    Definicija

    Primjer

    identifikator

    imenica

    Ime koje se koristi za identifikaciju objekta baze podataka, kao što je ime polja.

    Kupci. [Broj telefona]

    operater

    glagola ili priloga

    Ključna riječ koja predstavlja ili modificira radnju.

    konstantan

    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šti format SQL naredbi:

    SELECT polje_1
    IZ tabele_1
    WHERE kriterij_1
    ;

    napomene:

      Access ignorira prijelome reda u SQL izrazima. Bez obzira na to, preporučuje se da svaku rečenicu započnete u novom redu 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 tačkom i zarezom (;). Tačka i zarez se može pojaviti na kraju posljednje rečenice ili u zasebnom redu na kraju SQL izraza.

    Primjer u Accessu

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

    1. SELECT klauzula

    2. klauzula FROM

    3. WHERE klauzula

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

    SELECT klauzula

    SELECT, kompanija

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

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

    U klauzuli SELECT ne morate specificirati tablice koje sadrže polja, a ne možete specificirati 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) iza kojeg slijedi identifikator (Kontakti).

    Polja za odabir nisu navedena u klauzuli FROM.

    WHERE klauzula

    WHERE Grad = "Seattle"

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

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

    Rezultati sortiranja: ORDER BY

    Kao i kod Microsoft Excela, Access može sortirati rezultate upita u tabeli. Koristeći klauzulu ORDER BY, također možete odrediti kako se rezultati sortiraju kada se pokrene upit. Ako se koristi ORDER BY klauzula, ona se mora pojaviti na kraju SQL izraza.

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

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

    NARUČI PREMA DESCIMA kompanije,

    Bilješka: Prema zadanim postavkama, Access sortira vrijednosti u rastućem redoslijedu (od A do Z, od najmanjih do najvećih). 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 sa pivot podacima: GROUP BY i HAVING klauzule

    Ponekad morate raditi sa zbirnim 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 email adresa za svaku kompaniju, 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 morate kreirati klauzulu GROUP BY. Klauzula GROUP BY specificira sva polja koja nemaju primijenjenu agregatnu funkciju. Ako se agregatne funkcije primjenjuju na sva polja u upitu, onda ne morate kreirati klauzulu GROUP BY.

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

    Nastavimo s prethodnim primjerom. Ako SELECT klauzula primjenjuje agregatnu funkciju samo na polje [Email Address], tada će klauzula GROUP BY izgledati ovako:

    GROUP BY Company

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

    Ograničavanje agregiranih vrijednosti korištenjem uvjeta grupisanja: 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 koristite klauzulu HAVING. Klauzula HAVING radi isto kao i 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 (), Kompanija

    Ako želite da ograničite rezultate upita na osnovu vrednosti funkcije COUNT, ne možete primeniti uslov filtera na to polje u klauzuli WHERE. Umjesto toga, uvjet treba staviti u HAVING klauzulu. Na primjer, ako želite da upit vrati redove samo ako kompanija ima više adresa e-pošte, možete koristiti sljedeću HAVING klauzulu:

    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

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

    UNION operator vam omogućava da kombinujete dva SELECT izraza u jedan. SELECT izrazi 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 se kombinuju 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.

    Koristeći UNION operator, možete odrediti da li duplirani redovi, ako ih ima, trebaju biti uključeni u rezultate upita. Da biste to učinili, koristite ključnu riječ ALL.

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

    SELECT polje_1
    IZ tabele_1
    UNION
    SELECT polje_a
    FROM table_a
    ;

    Na primjer, pretpostavimo da imate dvije tabele pod nazivom "Proizvodi" i "Usluge". Obje tabele sadrže polja s nazivom proizvoda ili usluge, informacijama o cijeni i garanciji, kao i polje koje označava ekskluzivnost proizvoda ili usluge koja se nudi. Iako postoje različite vrste garancija u tabelama Proizvodi i usluge, osnovne informacije su iste (da li postoji garancija kvaliteta za pojedine proizvode ili usluge). Možete koristiti sljedeći upit za spajanje da kombinujete četiri polja iz dvije tabele:

    SELECT naziv, cijena, garancija_dostupna, ekskluzivna_ponuda
    IZ proizvoda
    UNION ALL
    SELECT naziv, cijena, garancija_dostupna, ekskluzivna_ponuda
    FROM Services
    ;

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

    Top srodni članci