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):
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:
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:
< 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:
SELECT klauzula procjenjuje svaki kandidatski red tablice u kojoj se redovi prikazuju nezavisno. Kandidatni niz je definiran na sljedeći način:
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