Această anexă conține o descriere mai concisă a diferitelor comenzi SQL. Scopul este de a vă oferi o referință și o definiție SQL rapidă și precisă. Prima secțiune a acestui apendice definește elementele folosite pentru a crea comenzi SQL; în al doilea rând, detalii de sintaxă și propoziții cu o scurtă descriere a comenzilor în sine. Următoarele sunt convenții standard (numite termeni BNF):
În plus, vom folosi următoarea secvență (., ..) pentru a indica faptul că cea precedentă poate fi repetată de orice număr de ori, cu evenimente individuale separate prin virgulă. Atributele care nu fac parte din standardul oficial vor fi marcate ca (* non-standard *) în descriere.
Vă rugăm să rețineți: terminologia pe care o folosim aici nu este terminologia oficială ANSI. Terminologia oficială poate fi foarte confuză, așa că am simplificat-o puțin.
Din acest motiv, uneori folosim alți termeni decât ANSI sau folosim aceiași termeni într-un mod ușor diferit. De exemplu, definiția noastră este -< predicate >diferă de combinația de definiție standard ANSI< predicate >cu< search condition >.
ELEMENTE SQL
Această secțiune definește elementele comenzilor SQL. Ele sunt împărțite în două categorii: Elemente de bază ale limbajului, și Elemente funcționale ale limbajului.
Elemente principale- acestea sunt blocurile limbajului de creat; atunci când SQL examinează o comandă, mai întâi evaluează fiecare caracter din textul comenzii în termenii acelor elemente. Separatoare< separator >separați o parte a echipei de alta; totul între delimitatori< separator >tratate ca un modul. Pe baza acestei separări, SQL interpretează comanda.
Elemente funcționale sunt diverse alte lucruri decât cuvintele cheie care pot fi interpretate ca module. Acestea sunt părțile comenzii, separate prin separatoare.< separator >care au o semnificație specială în SQL. Unele dintre ele sunt specifice anumitor comenzi și vor fi descrise împreună cu aceste comenzi mai târziu în această anexă. Aici sunt enumerate elemente comune pentru toate comenzile descrise. Elementele pot fi definite unul în celălalt, sau chiar în termenii lor. De exemplu, predicatul< predicate >, ultimul și cel mai dificil caz al nostru, conține un predicat în cadrul propriei definiții. Acest lucru se datorează faptului că predicatul< predicate >folosind AND sau OR poate conține orice număr de predicate< predicate >care poate lucra autonom. V-am prezentat predicatul< predicate >într-o secțiune separată din această anexă, datorită varietății și complexității acestui element funcțional al limbajului. El va fi prezent în mod constant atunci când discută despre alte părți funcționale ale comenzilor.
ELEMENTE ALE LIMBAJULUI DE BAZĂ
DEFINIȚIA ARTICOLULUI< separator > < comment > | < space > | < newline > < comment > --< string > < newline > < space >spaţiu< newline >sfârşitul definit de implementare a unui şir de caractere< identifier > < letter >[{< letter or digit > | < underscore}... ] < ИМЕЙТЕ ВВИДУ: Следу строгому стандарту ANSI, символы должны быть набраны в верхнем регистра, а идентификатор < identifier >nu trebuie să aibă mai mult de 18 caractere. DEFINIȚIA ARTICOLULUI< underscore > - < percent sign > % < delimiter >oricare dintre următoarele:, ()< > . : = + " - | <> > = < = или < string > < string >[orice text imprimabil între ghilimele simple] Notă: În< string >, două ghilimele simple consecutive ("") sunt interpretate ca unul (").< SQL term >finalul în funcție de limba principală. (* numai imbricat *)
ELEMENTE FUNCȚIONALE
Următorul tabel prezintă elementele funcționale ale comenzilor SQL și definițiile acestora: DEFINIȚIA ARTICOLULUI< query >clauza SELECT< subquery >O clauză SELECT inclusă între paranteze în cadrul unei alte clauze, care, de fapt, este evaluată separat pentru fiecare rând candidat al celeilalte clauze.< value expression > < primary > | < primary > < operator > < primary > | < primary > < operator > < value expression > < operator >oricare dintre următoarele: + - / *< primary > < column name > | < literal > | < aggregate function > | < built-in constant > | < nonstandard function > < literal > < string > | < mathematical expressio ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < built-in constant >UTILIZATOR |< implementation-dehned constant > < table name > < identifier > < column spec > [< table name > | < alias >.]< column name > < grouping column > < column spec > | < integer > < ordering column > < column spec > | < integer > < colconstraint >NU NUL | UNIC | VERIFICA (< predicate >) | CHEIE PRIMARĂ | REFERINȚE< table name >[(< column name >)] < tabconstraint >UNIC (< column list >) | VERIFICA (< predicate >) | CHEIA PRINCIPALA (< column list >) | CHEIE EXTERNĂ (< column list >) REFERINȚE< table name >[(< column list >)] < defvalue >VALOARE IMPLICITĂ =< value expression > < data type >Tip de date valid (Consultați Anexa B pentru descrieri ale tipurilor furnizate de ANSI sau Anexa C pentru alte tipuri generice.)< size >Valoarea depinde de< data type >(Vezi Anexa B.)< cursor name > < identifier > < index name > < identifier > < synonym > < identifier >(* nestandard *)< owner > < Authorization ID > < column list > < column spec > .,.. < value list > < value expression > .,.. < table reference > { < table name > [< alias >] } .,..PREDICATE
Următoarele definește o listă de diferite tipuri de predicate< predicate >descrise în paginile următoare:
< predicate > ::=
{ < comparison predicate > | < in predicate > | < null predicate > | < between predicate > | < like predicate > | < quantified predicate > | < exists predicate > } < predicate >este o expresie care poate fi adevărată, falsă sau necunoscută, cu excepția< exists predicate >și< null predicate >asta nu poate fi decât adevărat sau fals.
Nu se va ști dacă valorile NULL împiedică ieșirea răspunsului returnat. Acest lucru se va întâmpla ori de câte ori o valoare NULL este comparată cu orice valoare. Operatorii booleeni standard ȘI, SAU și NU pot fi utilizați cu un predicat. NU adevărat = fals, NU fals = adevărat și NU necunoscut = necunoscut. Rezultatele AND și OR în combinație cu predicate sunt prezentate în următoarele tabele:
AND AND Adevărat Fals Necunoscut Adevărat Adevărat Fals Necunoscut Fals Fals Fals Fals Necunoscut necunoscut necunoscut necunoscut necunoscut SAU Adevărat Fals Necunoscut Adevărat adevărat adevărat Fals adevărat incorect necunoscut necunoscut adevărat necunoscut necunoscut
Aceste tabele sunt citite într-un mod similar cu o tabelă de înmulțire: concatenați valori adevărate, incorecte sau necunoscute din rânduri cu coloanele lor pentru a obține rezultatul pe cruce. Într-un tabel AND, de exemplu, a treia coloană (Necunoscut) și primul rând (Adevărat) la intersecția din colțul din dreapta sus dau rezultatul - necunoscut, cu alte cuvinte: Adevărat ȘI Necunoscut = necunoscut. Ordinea calculelor este specificată în paranteze. Ei nu se prezintă de fiecare dată. NOT este evaluat mai întâi, urmat de AND și OR. Diferite tipuri de predicate< predicate >sunt discutate separat în secțiunea următoare.
< comparison predicate >(predicat de comparație)
Sintaxă
< value expresslon > < relational op > < value expresslon >
|
< subquery >
< relatlonal op > :: =
=
| <
|
>
| <
| >=
| < >
În cazul în care fie< value expression >= NULL sau< comparison predicate
>= necunoscut; cu alte cuvinte, este adevărat dacă comparația este adevărată sau falsă dacă comparația este falsă.
< relational op >are semnificații matematice standard pentru valori numerice; pentru alte tipuri de valori, aceste valori sunt specifice implementării.
Ambii< value expression >trebuie să aibă tipuri de date comparabile. Dacă subinterogarea< subquery >folosit, trebuie să conțină o singură expresie< value expression >în clauza SELECT a cărei valoare va înlocui a doua expresie< value
expression >în predicatul de comparaţie< comparision predicate >, de fiecare dată când< subquery >este într-adevăr îndeplinită.
< between predicate >
Sintaxă
< value expression >ÎNTRE< value expression >
ȘI< value expression >
< between predicate >- A INTRE B SI C, are acelasi sens ca< predicate >- (A> = B ȘI< = C). < between predicate >pentru care A NU ÎNTRE B ȘI C are același sens ca NU (ÎNTRE B ȘI C).< value expression >poate fi scos folosind o interogare non-standard< subquery >(* nestandard *).
< in prediicate >
Sintaxă
< value expression >ÎN< value list > | < subquery
>
Lista de valori< value list >va consta din una sau mai multe dintre valorile enumerate în paranteze și separate prin virgule care sunt comparabile cu< value expression >tip de date. Dacă se utilizează o subinterogare< subquery >, ar trebui să conțină o singură expresie< value expression >în clauza SELECT (poate mai mult, dar aceasta va fi în afara standardului ANSI). Subinterogare< subquery >de fapt, se execută separat pentru fiecare linie candidată a interogării principale, iar valorile pe care le scoate vor forma o listă de valori< value list >pentru această linie. În orice caz, predicatul< in predicate >va fi adevărat dacă expresia< value expression >reprezentate într-o listă de valori< value list >dacă se specifică NOT. Expresia A NOT IN (B, C) este echivalentă cu expresia NOT (A IN (B, C)).
< like predicate >
Sintaxă
< charvalue >CA< pattern >
< charvalue >este orice expresie * non-standard *< value expression >tip alfanumeric.< charvalue >poate, conform standardului, doar o coloană anume< column spec >... Probă< pattern >constă dintr-un șir care va fi verificat< charvalue >... Simbol de sfârșit< escapechar >este un singur caracter alfanumeric. O potrivire va avea loc dacă următoarele condiții sunt adevărate:
Dacă a avut loc un meci,< like predicate >- adevărat dacă nu a fost specificat NU. Expresia NOT LIKE „text” este echivalentă cu NOT (UN LIKE „text”).
< null predicate >
Sintaxă
< column spec >ESTE NUL
< column spec >= IS NULL dacă o valoare NULL este prezentă în această coloană. Acest lucru va fi< null predicate >valid dacă nu este specificat NULL. Fraza< column spec >IS NOT NULL, are același efect ca NOT (< column spec >ESTE NUL).
< quantified predicate >
Sintaxă
< value expression > < relational op >
< quantifier >
< subquery >
< quantifier >:: = ORICE | TOATE | NISTE
Clauza SELECT a unei subinterogări< subquery >trebuie să conțină una și o singură expresie de valoare< value expression >... Toate valorile returnate de subinterogare< subquery >compune un set de rezultate< result set >. < value expression >comparat folosind transportatorul< relational operator >, cu fiecare membru al setului de rezultate< result set >... Această comparație este evaluată după cum urmează:
< exists predicate >
Sintaxă:
EXISTĂ (< subquery >)
Dacă subinterogarea< subquery >tipărește una sau mai multe linii de ieșire,< exists predicate >- este corect; și este incorectă în caz contrar.
COMENZI SQL
Această secțiune detaliază sintaxa diferitelor comenzi SQL. Acest lucru vă va oferi posibilitatea de a căuta rapid o comandă, de a găsi sintaxa acesteia și de o scurtă descriere a modului în care funcționează.
BE INSIGHT Comenzile care încep cu cuvinte - EXEC SQL și comenzile sau propozițiile care se termină cu un cuvânt - pot fi folosite numai în SQL imbricat.
ÎNCEPEȚI SECȚIUNEA DE DECLARE
Sintaxă
EXEC SQL BEGIN DECLARE SECTION< SQL term > < host-language variable declarations >EXEC SQL END DECLARE SECȚIUNE< SQL term >
Această comandă creează o secțiune a programului de limbaj principal pentru a declara variabilele principale din acesta, care vor fi utilizate în instrucțiunile SQL imbricate. Variabila SQLCODE trebuie inclusă ca una dintre variabilele declarate în limba gazdă.
ÎNCHIS CURSORUL
Sintaxă
EXEC SQL ÎNCHIS CURSOR< cursor name > < SQL term >;
Această comandă spune cursorului să se închidă, după care nu poate fi selectată nicio valoare din ea până când este redeschis.
COMIT (MUNCĂ)
Sintaxă
Această comandă lasă neschimbate toate modificările făcute în baza de date până când tranzacția începută este finalizată și începe o nouă tranzacție.
CREAȚI INDEX
(* NONSTANDARD *) (NESTANDARD)
Sintaxă
CREAȚI INDEX< Index name >
PE< table name > (<
column list >);
Această comandă creează o rută eficientă de acces rapid pentru găsirea rândurilor care conțin coloanele desemnate. Dacă este specificat UNIQUE, tabelul nu poate conține duplicate (gemeni) ale valorilor din aceste coloane.
CREAȚI SINONIM (* NONSTANDARD *)
(CREAȚI SINONIM) (* NON-STANDARD *)
Sintaxă
CREAȚI SINONIM IPUBLICl< synonym >PENTRU
< owner >.< table
name >;
Această comandă creează o alternativă (sinonim) la ele pentru tabel. Sinonimul aparține creatorului său, iar tabelul în sine, de obicei altui utilizator. Folosind un sinonim, proprietarul acestuia nu trebuie să facă referire la tabel prin numele complet (inclusiv proprietarul). Dacă este specificat PUBLIC, sinonimul aparține directorului SYSTEM și, prin urmare, este disponibil pentru toți utilizatorii.
CREAȚI TABEL
Sintaxă
CREAȚI TABEL< table name >
({< column name > < data type
>[< size >]
[< colconstralnt > . . .]
[< defvalue
>]} . , . . < tabconstraint > . , . .);
Comanda creează un tabel în baza de date. Acest tabel va fi deținut de creatorul său. Coloanele vor fi luate în considerare într-o ordine de rulare după nume.< data type
>- definește tipul de date pe care le va conține coloana. Standard< data
type >descrise în Anexa B; toate celelalte tipuri de date utilizate< data type >discutat în Anexa C. Valoarea mărimii< size >depinde de tipul de date< data type
>.
< colconstraint >și< tabconstraint >impune restricții asupra valorilor care pot fi introduse într-o coloană.
< defvalue >definește valoarea (implicit) care va fi inserată automat dacă nu este specificată nicio altă valoare pentru acest rând. (Consultați Capitolul 17 pentru detalii despre comanda CREATE TABLE în sine și Capitolul 18 ȘI pentru detalii despre restricții și< defvalue >).
CREATE VIEW
Sintaxă
CREATE VIEW< table name >
LA FEL DE< query >
;
Scanarea este tratată ca orice tabel în comenzile SQL. Când o comandă se referă la un nume de tabel< table name >, Anchetă< query >este executat și rezultatul său se potrivește cu conținutul tabelului specificat în această comandă.
Unele vizualizări pot fi modificate, ceea ce înseamnă că comenzile de modificare pot fi executate în aceste vizualizări și transmise tabelului la care a fost referit în interogare.< query >... Dacă se specifică WITH CHECK OPTION, această modificare trebuie să satisfacă și condiția predicatului< predicate >la cerere< query >.
DECLARE CURSOR
Sintaxă
EXEC SQL DECLARE< cursor name >CURSOR PENTRU
< query >< SQL
term >
Această comandă le leagă de cursor< cursor name >, cu cererea< query >... Când cursorul este deschis (vezi DESCHIS CURSOR), interogarea< query >este executat, iar rezultatul acestuia poate fi selectat (cu comanda FETCH) pentru ieșire. Dacă cursorul este modificabil, tabelul la care se face referire de interogare< query >, poate primi o modificare de conținut utilizând o operațiune de modificare a cursorului (vezi Capitolul 25 pentru cursoare modificabile).
ȘTERGE
Sintaxă
ȘTERGERE DIN< table name >
{ ; }
| UNDE CURENTUL DE< cursorname >< SQL term >
Dacă nu există o clauză WHERE, TOATE rândurile din tabel sunt șterse. Dacă clauza WHERE folosește predicatul< predicate >, rânduri care îndeplinesc condiția acestui predicat< predicate >îndepărtat. Dacă clauza WHERE are argument CURRENT OF în numele cursorului< cursor name >, rând din tabel< table name >care este referit în prezent folosind numele cursorului< cursor name >va fi sters. Formularul WHERE CURRENT poate fi folosit numai în SQL imbricat și numai cu cursoare modificabile.
EXEC SQL
Sintaxă
EXEC SQL< embedded SQL command > < SQL term >
EXEC SQL este folosit pentru a indica începutul tuturor comenzilor SQL imbricate într-o altă limbă.
FETCH
Sintaxă
EXEC SQL FETCH< cursorname >
ÎN< host-varlable llst ><
SQL term >
FETCH preia ieșirea din șirul de interogare curent< query >, îl inserează în lista de variabile principale< host-variable list >și mută cursorul pe linia următoare. Listă< host-variable list >poate include indicatorul de variabilă ca variabilă țintă (vezi capitolul 25.)
ACORDA
Sintaxă (standard)
Acordați tot
| (SELECTAȚI
| INTRODUCE
| ȘTERGE
| ACTUALIZAȚI [(< column llst >)]
| REFERINȚE [(< column llst >) l). ,. ...
PE< table name > . , . .
LA PUBLIC |< Authorization ID > .
, . .
;
Argumentul ALL, cu sau fără PRIVILEGII, include fiecare privilegiu din lista de privilegii. PUBLIC include toți utilizatorii existenți și toți utilizatorii viitori. Această comandă face posibilă transferul drepturilor de a efectua acțiuni în tabelul cu numele specificat. REFERENȚE vă permite să acordați drepturi de utilizare a coloanelor din lista de coloane< column list >ca cheie părinte pentru cheia străină. Alte privilegii constau în dreptul de a executa comenzi pentru care privilegiile sunt indicate prin numele lor în tabel. UPDATE este similar cu REFERENȚE și poate impune constrângeri pe anumite coloane. GRANT OPTION vă permite să transferați aceste privilegii altor utilizatori.
Sintaxă (non-standard)
GRANT DBA
| RESURSĂ
| CONECTAȚI ....
LA< Authorization ID
> . , . .
| < privilege > . , . . }
DIN (PUBLIC
| < Authorization ID > . , . . };
Privilegiu< privelege >poate fi oricare dintre cele specificate în comanda GRANT. Utilizatorul care dă REVOKE trebuie să aibă aceleași privilegii ca și utilizatorul care a acordat GRANT. Clauza ON poate fi utilizată dacă este utilizat un privilegiu de tip special pentru un anumit obiect.
ROLLBACK (LUCRARE)
(ROLLBACK) (TRANZACȚII)
Sintaxă
Comanda anulează toate modificările aduse bazei de date în timpul tranzacției curente. De asemenea, o încheie pe cea actuală și începe o nouă tranzacție.
SELECTAȚI
Sintaxă
SELECTAȚI (IDISTINCT | TOATE]< value expression > . , . . } / *
DIN< table reference
> . , . .
. , . . ];
Această clauză organizează interogarea și scoate valorile din baza de date (vezi Capitolul 3 - Capitolul 14). Se aplică următoarele reguli:
Clauza SELECT evaluează fiecare rând candidat al unui tabel în care rândurile sunt afișate independent. Șirul candidat este definit după cum urmează:
Fiecare linie candidată produce valori care fac predicatul<
predicate >în clauza WHERE adevărată, incorectă sau necunoscută. Dacă nu se utilizează GROUP BY, fiecare< value expression >se aplică pe rând pentru fiecare șir candidat a cărui valoare face predicatul valid, iar rezultatul acestei operații este rezultatul.
Dacă se utilizează GROUP BY, rândurile candidate sunt combinate folosind funcții de agregare. Dacă nu există predicat<
predicate >nu setat, fiecare expresie< value expression >se aplică fiecărei linii sau grup de candidat. Dacă este specificat DISTINCT, liniile duplicate vor fi eliminate din ieșire.
UNIUNE
Sintaxă
< query >(UNIUNE< query > } . . . ;
Afișează două sau mai multe interogări< query >vor fi comasate. Fiecare cerere< query >trebuie să conțină același număr< value expression >în clauza SELECT și în așa ordine încât 1 .. n din fiecare, compatibil cu tipul de date< data type >și dimensiune< size >cu 1 .. n toate celelalte.
ACTUALIZAȚI
Sintaxă
ACTUALIZAȚI< table name >
A STABILIT (< column name > = < value
expression > } . , . .
([UNDE< predlcate >]; }
| {
< SQL term >]}
UPDATE modifică valorile în fiecare coloană numită< column name >prin valoarea corespunzătoare< value expression >... Dacă clauza WHERE folosește predicatul< predicate >, apoi numai rândurile de tabel ale căror valori curente fac acel predicat< predicate >corect, supus modificării. Dacă WHERE folosește clauza CURRENT OF, atunci valorile din rândul tabelului numit< table name >situat în cursorul cu numele< cursor name >Schimbare. WHERE CURRENT OF este utilizabil numai în SQL imbricat și numai cu cursoare modificabile. Dacă nu există o clauză WHERE, toate rândurile sunt modificate.
ORICÂND
Sintaxă
EXEC SQL oricând< SQLcond > < actlon > < SQL term
>
< SQLcond >:: = SQLERROR | NU GĂSIT | SQLAVERTISMENT
(cel din urmă nu este standard)
< action >:: = CONTINUA | MERGI LA< target >| MERGI LA< target >
< target >:: = depinde de limba principală
Fiecare dintre noi întâlnim în mod regulat și folosește diverse baze de date. Când alegem o adresă de e-mail, lucrăm cu o bază de date. Bazele de date folosesc motoare de căutare, bănci pentru a stoca datele clienților etc.
Dar, în ciuda utilizării constante a bazelor de date, chiar și pentru mulți dezvoltatori de sisteme software există multe „puncte goale” din cauza interpretărilor diferite ale acelorași termeni. Vom oferi o scurtă definiție a termenilor de bază ale bazei de date înainte de a ne uita la limbajul SQL. Asa de.
Bază de date - un fișier sau un set de fișiere pentru stocarea structurilor ordonate de date și a relațiilor lor. De foarte multe ori un sistem de control se numește bază de date - este doar o stocare de informații într-un anumit format și poate funcționa cu diverse DBMS.
masa - Imaginați-vă un folder care stochează documente grupate după un anumit criteriu, de exemplu, o listă de comenzi pentru ultima lună. Acesta este tabelul din computer. Un tabel separat are propriul nume unic.
Tip de date - tipul de informații care pot fi stocate într-o coloană sau un rând separat. Acestea pot fi numere sau text într-un anumit format.
Coloană și rând- toți am lucrat cu foi de calcul, care au și rânduri și coloane. Orice bază de date relațională funcționează cu tabele într-un mod similar. Liniile sunt uneori numite înregistrări.
Cheia principala- fiecare rând al tabelului poate avea una sau mai multe coloane pentru identificarea sa unică. Fără o cheie primară, este foarte dificil să actualizați, să modificați și să ștergeți rândurile necesare.
Ce este SQL?
SQL(Engleză - limbaj de interogare structurat) a fost dezvoltat doar pentru lucrul cu baze de date și este în prezent standardul pentru toate DBMS populare. Sintaxa limbajului constă dintr-un număr mic de operatori și este ușor de învățat. Dar, în ciuda simplității externe, permite crearea de interogări sql pentru operațiuni complexe cu o bază de date de orice dimensiune.
Din 1992, a existat un standard general acceptat numit ANSI SQL. Definește sintaxa și funcțiile de bază ale operatorilor și este susținut de toți liderii pieței DBMS, cum ar fi ORACLE.Este imposibil să luăm în considerare toate caracteristicile limbajului într-un singur articol mic, așa că vom lua în considerare pe scurt doar interogările SQL de bază. . Exemplele arată clar simplitatea și capacitățile limbajului:
- crearea de baze de date și tabele;
- colectare de date;
- adăugarea înregistrărilor;
- modificarea si stergerea informatiilor.
Tipuri de date SQL
Toate coloanele dintr-un tabel de bază de date stochează același tip de date. Tipurile de date din SQL sunt aceleași ca și în alte limbaje de programare.
Creați tabele și baze de date
Există două moduri de a crea baze de date noi, tabele și alte interogări în SQL:
- Instrucțiuni SQL prin consola DBMS
- Utilizarea instrumentelor de administrare online incluse cu serverul de baze de date.
O nouă bază de date este creată de către operator CREAȚI BAZĂ DE DATE<наименование базы данных>; ... După cum puteți vedea, sintaxa este simplă și concisă.
Creăm tabele în interiorul bazei de date cu instrucțiunea CREATE TABLE cu următorii parametri:
- numele tabelului
- numele coloanelor și tipurile de date
De exemplu, să creăm un tabel de mărfuri cu următoarele coloane:
Cream un tabel:
CREATE TABLE Marfa
(commodity_id CHAR (15) NOT NULL,
vendor_id CHAR (15) NOT NULL,
nume_marfă CHAR (254) NULL,
preț_marfă DECIMAL (8,2) NULL,
commodity_desc VARCHAR (1000) NULL);
Tabelul are cinci coloane. Numele este urmat de tipul de date, coloanele sunt separate prin virgule. Valoarea coloanei poate fi nulă (NULL) sau trebuie completată (NOT NULL), iar aceasta este determinată în momentul creării tabelului.
Preluarea datelor dintr-un tabel
Operatorul de selecție a datelor este cel mai frecvent utilizat interogări SQL. Pentru a obține informații, este necesar să indicăm ce dorim să alegem dintr-un astfel de tabel. Să începem cu un exemplu simplu:
SELECTAȚI nume_marfă FROM Mărfuri
După instrucțiunea SELECT, specificăm numele coloanei pentru a obține informațiile, iar FROM definește tabelul.
Rezultatul executării interogării vor fi toate rândurile tabelului cu valorile Commodity_name în ordinea în care au fost introduse în baza de date, adică. fără nicio sortare. O clauză ORDER BY suplimentară este folosită pentru a ordona rezultatul.
Pentru o interogare pe mai multe câmpuri, le listăm separate prin virgule, ca în exemplul următor:
SELECTAȚI ID-ul mărfii, numele_marfei, prețul_marfei FROM Mărfuri
Este posibil să obțineți valoarea tuturor coloanelor unui rând ca urmare a unei interogări. Pentru a face acest lucru, utilizați semnul „*”:
SELECTAȚI * DIN MARFĂ
- În plus, SELECT acceptă:
- Sortarea datelor (operatorul ORDER BY)
- Selectare in functie de conditii (UNDE)
- Termen de grupare (GROUP BY)
Adăugați linia
Pentru a adăuga un rând la tabel, sunt folosite interogări SQL cu instrucțiunea INSERT. Adăugarea se poate face în trei moduri:
- adăugați o nouă linie întreagă;
- parte dintr-un șir;
- rezultatele interogării.
Pentru a adăuga un rând complet, trebuie să specificați numele tabelului și valorile coloanelor (câmpurilor) noului rând. Să dăm un exemplu:
INTRODUCERE ÎN VALORILE Mărfurilor („106”, „50”, „Coca-Cola”, „1,68”, „Fără Alcogol,)
Exemplul adaugă un produs nou la tabel. Valorile sunt specificate după VALORI pentru fiecare coloană. Dacă nu există o valoare corespunzătoare pentru coloană, atunci trebuie specificat NULL. Coloanele sunt umplute cu valori în ordinea specificată la crearea tabelului.
Dacă adăugați doar o parte dintr-un rând, trebuie să specificați în mod explicit numele coloanelor, ca în exemplu:
INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)
VALORI ("106", '50 "," Coca-Cola ",)
Am introdus doar identificatorii produsului, furnizorul și numele acestuia, iar restul câmpurilor am lăsat goale.
Adăugarea rezultatelor interogării
INSERT este folosit în principal pentru a adăuga rânduri, dar poate fi folosit și pentru a adăuga rezultatele unei instrucțiuni SELECT.
Modificarea datelor
Pentru a modifica informațiile din câmpurile tabelului bazei de date, trebuie să utilizați instrucțiunea UPDATE. Operatorul poate fi utilizat în două moduri:
- Toate rândurile din tabel sunt actualizate.
- Doar pentru o anumită linie.
UPDATE are trei elemente principale:
- tabelul în care trebuie să faceți modificări;
- numele câmpurilor și noile lor valori;
- condițiile de selectare a rândurilor de schimbat.
Să ne uităm la un exemplu. Să presupunem că costul unui articol cu ID = 106 s-a modificat, așa că această linie trebuie actualizată. Scriem următorul operator:
UPDATE Mărfuri SET pretul_marfă = "3.2" WHERE id_marfă = "106"
Am indicat denumirea tabelului, în cazul nostru Marfă, unde se va efectua actualizarea, apoi după SET - noua valoare a coloanei și am găsit înregistrarea necesară specificând valoarea ID necesară în WHERE.
Pentru a modifica mai multe coloane, după instrucțiunea SET sunt specificate mai multe perechi coloană-valoare, separate prin virgule. Să ne uităm la un exemplu care actualizează numele și prețul unui produs:
UPDATE Commodity SET commodity_name = 'Fanta', commodity_price = "3.2" WHERE commodity_id = "106"
Pentru a elimina informații dintr-o coloană, o puteți seta la NULL dacă structura tabelului o permite. Trebuie amintit că NULL este exact „nicio” valoare și nu zero sub formă de text sau numere. Să ștergem descrierea produsului:
UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"
Ștergerea rândurilor
Interogările SQL pentru ștergerea rândurilor dintr-un tabel sunt executate de instrucțiunea DELETE. Există două cazuri de utilizare:
- anumite rânduri sunt șterse din tabel;
- toate rândurile din tabel sunt șterse.
Un exemplu de ștergere a unui rând dintr-un tabel:
DELETE FROM Commodity WHERE commodity_id = „106”
Dupa DELETE FROM specificam numele tabelului in care se vor sterge randurile. Clauza WHERE conține o condiție prin care vor fi selectate rândurile pentru ștergere. În exemplu, ștergem linia pentru produsul cu ID = 106. Este foarte important să specificați UNDE. omiterea acestei declarații va șterge toate rândurile din tabel. Acest lucru este valabil și pentru modificarea valorii câmpurilor.
Instrucțiunea DELETE nu include nume de coloane sau metacaractere. Șterge rândurile în întregime, dar nu poate șterge o singură coloană.
Utilizarea SQL în Microsoft Access
De obicei, este folosit interactiv pentru a crea tabele, baze de date, pentru a gestiona, modifica, analiza date într-o bază de date și pentru a încorpora interogări SQL Access printr-un designer de interogări interactiv convenabil (Query Designer), folosind care puteți construi și executa imediat instrucțiuni SQL ale oricăror instrucțiuni. complexitate...
Este suportat și modul de acces la server, în care Access DBMS poate fi folosit ca generator de interogări SQL către orice sursă de date ODBC. Această capacitate permite aplicațiilor Access să interacționeze cu orice format.
Extensii SQL
Deoarece interogările SQL nu au toate capabilitățile limbajelor de programare procedurală, cum ar fi bucle, ramuri etc., furnizorii de baze de date dezvoltă propria versiune de SQL cu capabilități avansate. În primul rând, acesta este suport pentru procedurile stocate și operatorii standard ai limbajelor procedurale.
Cele mai comune dialecte ale limbii:
- Baza de date Oracle - PL / SQL
- Interbase, Firebird - PSQL
- Microsoft SQL Server - Transact-SQL
- PostgreSQL - PL / pgSQL.
SQL pe Internet
MySQL este distribuit sub licența publică generală GNU. Există o licență comercială cu capacitatea de a dezvolta module personalizate. Ca parte integrantă, este inclus în cele mai populare ansambluri de servere de Internet, precum XAMPP, WAMP și LAMP, și este cel mai popular DBMS pentru dezvoltarea aplicațiilor pe Internet.
A fost dezvoltat de Sun Microsystems și este susținut în prezent de Oracle Corporation. Sunt acceptate baze de date de până la 64 terabytes, SQL: standard de sintaxă 2003, replicarea bazei de date și serviciile cloud.
Cum pot afla numărul de modele de PC produse de un anumit furnizor? Cum se determină prețul mediu pentru computere cu aceleași specificații? Acestea și multe alte întrebări legate de unele informații statistice pot fi răspunse folosind funcții rezumative (agregate).... Standardul prevede următoarele funcții agregate:
Toate aceste funcții returnează o singură valoare. În acest caz, funcțiile COUNT, MINși MAX sunt aplicabile oricărui tip de date, în timp ce SUMĂși AVG sunt utilizate numai pentru câmpurile numerice. Diferența între funcție NUMARA (*)și NUMARA (<имя поля>) este că al doilea nu ia în considerare valorile NULL la calcul.
Exemplu. Găsiți prețul minim și maxim pentru computerele personale:
Exemplu. Găsiți numărul de computere disponibile de la producătorul A:
Exemplu. Dacă ne interesează numărul de modele diferite produse de producătorul A, atunci interogarea poate fi formulată după cum urmează (folosind faptul că în tabelul Produs fiecare model este înregistrat o dată):
Exemplu. Găsiți numărul de modele diferite disponibile de producătorul A. Interogarea este similară cu cea anterioară, în care era necesar să se determine numărul total de modele produse de producătorul A. Aici trebuie să găsiți și numărul de modele diferite în Masa PC (adica disponibila spre vanzare).
Pentru a se asigura că numai valorile unice sunt utilizate la obținerea indicatorilor statistici, când argumentul funcţiilor agregate poate fi utilizat parametru DISTINCT... O alta parametrul ALL este implicit și presupune că toate valorile returnate din coloană sunt numărate. Operator,
Dacă trebuie să obținem numărul de modele de PC produse fiecare producător, va trebui să utilizați Clauza GROUP BY urmând sintactic clauze WHERE.
Clauza GROUP BY
Clauza GROUP BY folosit pentru a defini grupuri de linii de ieșire la care pot fi aplicate funcții agregate (COUNT, MIN, MAX, AVG și SUM)... Dacă această clauză lipsește și sunt utilizate funcții de agregare, atunci toate coloanele cu numele menționate în SELECTAȚI ar trebui incluse în funcții agregate, iar aceste funcții vor fi aplicate întregului set de rânduri care satisfac predicatul de interogare. În caz contrar, toate coloanele din lista SELECT, nu este inclusîn funcții agregate, trebuie specificat în clauza GROUP BY... Ca rezultat, toate liniile de ieșire ale interogării sunt împărțite în grupuri caracterizate prin aceleași combinații de valori în aceste coloane. După aceea, se vor aplica funcții agregate fiecărui grup. Rețineți că pentru GROUP BY toate valorile NULL sunt tratate ca egale, adică. atunci când sunt grupate după un câmp care conține valori NULL, toate aceste rânduri vor intra într-un singur grup.Dacă dacă există o clauză GROUP BY, în clauza SELECT fără funcții agregate, atunci interogarea va returna pur și simplu un rând din fiecare grup. Această caracteristică, împreună cu cuvântul cheie DISTINCT, poate fi utilizată pentru a elimina rândurile duplicate din setul de rezultate.
Să aruncăm o privire la un exemplu simplu:
SELECT model, COUNT (model) AS Cantitate_model, AVG (preț) AS Avg_price DE LA PC GROUP BY model; |
În această solicitare, pentru fiecare model de PC, se determină numărul și costul mediu al acestora. Toate rândurile cu aceleași valori de model formează un grup, iar ieșirea SELECT calculează numărul de valori și valorile medii ale prețului pentru fiecare grup. Interogarea va avea ca rezultat următorul tabel:
model | Cantitate_model | Avg_price |
1121 | 3 | 850.0 |
1232 | 4 | 425.0 |
1233 | 3 | 843.33333333333337 |
1260 | 1 | 350.0 |
Dacă SELECT ar avea o coloană cu o dată, atunci ar fi posibil să se calculeze acești indicatori pentru fiecare dată specifică. Pentru a face acest lucru, trebuie să adăugați o dată ca coloană de grupare, iar apoi funcțiile agregate vor fi calculate pentru fiecare combinație de valori (model-data).
Sunt mai multe specifice reguli pentru îndeplinirea funcţiilor agregate:
- Dacă în urma interogării nu au primit linii(sau mai mult de un rând pentru un grup dat), atunci datele inițiale pentru calcularea oricăreia dintre funcțiile agregate sunt absente. În acest caz, rezultatul executării funcțiilor COUNT va fi zero, iar rezultatul tuturor celorlalte funcții va fi NULL.
- Argument functie de agregat nu poate conține în sine funcții agregate(funcție din funcție). Acestea. într-o singură interogare, nu puteți, să spunem, să obțineți maximul de medii.
- Rezultatul executării funcției COUNT este întreg(ÎNTREG). Alte funcții agregate moștenesc tipurile de date ale valorilor în curs de procesare.
- Dacă la executarea funcției SUM s-a obținut un rezultat care depășește valoarea maximă a tipului de date utilizat, eroare.
Deci, dacă cererea nu conține clauze GROUP BY, atunci funcții agregate inclus în clauza SELECT, sunt executate pe toate liniile de interogare rezultate. Dacă cererea conţine Clauza GROUP BY, fiecare set de rânduri care are aceleași valori de coloană sau grup de coloane specificate în Clauza GROUP BY, constituie un grup, și funcții agregate sunt efectuate pentru fiecare grupă separat.
clauza HAVING
Dacă clauza WHERE definește un predicat pentru filtrarea rândurilor, apoi AVÂND oferta aplicat după grupare pentru a defini un predicat similar filtrarea grupurilor după valori funcții agregate... Această clauză este necesară pentru a testa valorile care se obțin folosind functie de agregat nu din linii separate ale sursei de înregistrare definite în clauza FROM, și de la grupuri de astfel de linii... Prin urmare, un astfel de control nu poate fi inclus în clauza WHERE.
Sintaxă:
* Unde câmpuri 1- câmpuri pentru selecție, separate prin virgule, puteți specifica și toate câmpurile cu *; masa- numele tabelului din care extragem datele; conditii- conditii de prelevare; câmpuri 2- câmp sau câmpuri separate prin virgule, după care să sortați; numara- numărul de linii de descărcat.
* interogarea între paranteze drepte este opțională pentru selectarea datelor.
Exemple simple de utilizare a select
1. Eșantionarea normală a datelor:
> SELECTAȚI * FROM utilizatori
2. Preluarea datelor cu unirea a două tabele (JOIN):
SELECTAȚI u.name, r. * FROM users u JOIN users_rights r ON r.user_id = u.id
* în acest exemplu preluăm date cu tabele de unire utilizatoriiși drepturile_utilizatorilor... Sunt uniți prin câmpuri numele de utilizator(în tabelul user_rights) și id(utilizatori). Preia câmpul de nume din primul tabel și toate câmpurile din al doilea.
3. Eșantionare cu un interval de timp și/sau dată
a) se cunosc punctul de plecare și un anumit interval de timp:
* vor fi selectate datele pentru ultima oră (câmp Data).
b) se cunosc data de început și data de încheiere:
25.10.2017 și 25.11.2017 .
c) se cunosc datele de început și de sfârșit + ora:
* selectați datele între 25.03.2018 0 ore 15 minuteși 25.04.2018 15 ore 33 minute și 9 secunde.
d) extragem date pentru o anumită lună și an:
* extrageți datele, unde sunt în câmp Data există valori pentru aprilie 2018 al anului.
4. Eșantionarea valorilor maxime, minime și medii:
> SELECT max (zonă), min (zonă), avg (zonă) FROM country
* max- valoare maximă; min- minim; medie- media.
5. Folosind lungimea liniei:
* această interogare ar trebui să arate toți utilizatorii al căror nume este format din 5 caractere.
Exemple de interogări mai complexe sau utilizate rar
1. Combinați cu gruparea datelor selectate într-o singură linie (GROUP_CONCAT):
* de la masă utilizatorii preia datele pe câmp id, toate se încadrează pe o singură linie, valorile sunt separate virgule.
2. Gruparea datelor după două sau mai multe câmpuri:
> SELECTAȚI * FROM utilizatorii GROUP BY CONCAT (titlu, „::”, naștere)
* total, în acest exemplu vom descărca datele din tabelul utilizatori și le vom grupa pe câmpuri titluși naștere... Înainte de grupare, facem concatenarea câmpurilor într-o singură linie cu un separator :: .
3. Combinarea rezultatelor din două tabele (UNION):
> (SELECT ID, fio, adresa, „Utilizatori” ca tip FROM utilizatori)
UNIUNE
(SELECT ID, fio, adresa, „Clienți” ca tip FROM clienți)
* în acest exemplu, datele sunt preluate din tabele utilizatoriiși Clienți.
4. Eșantion de medii, grupate pentru fiecare oră:
SELECTAȚI medie (temperatură), DATE_FORMAT (datetimeupdate, "% Y-% m-% d% H") ca hour_datetime FROM archive GROUP BY DATE_FORMAT (datetimeupdate, "% Y-% m-% d% H")
* aici extragem media câmpului temperatura de la masă Arhivași grupați după domeniu datetimeupdate(cu împărțirea timpului pentru fiecare oră).
Inserare (INSERT)
Sintaxa 1:
> INSERT INTO