Cum se configurează smartphone-uri și PC-uri. Portal informativ

Expresii de tabel. Interogări SQL simple - Referințe rapide și exemple

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

  • Cuvintele cheie sunt tastate cu majuscule.
  • SQL și alte condiții speciale sunt incluse în paranteze unghiulare și în cursive. (< și >)
  • Părțile opționale ale comenzilor sunt incluse între paranteze drepte ().
  • O elipsă (....) indică faptul că partea anterioară a unei comenzi poate fi repetată de orice număr de ori.
  • O bară verticală (|) înseamnă că ceea ce vine înainte poate fi înlocuit cu ceea ce urmează.
  • Parantezele ((și)) indică faptul că totul în interiorul lor trebuie tratat ca un întreg pentru a evalua alte caractere (de exemplu, dungi verticale sau elipse).
  • Duble două puncte și egal (:: =) înseamnă - ceea ce urmează este o definiție a ceea ce vine înaintea lor.

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

  • Pentru fiecare subliniere< underscore >în probă< pattern >care nu este precedat de un caracter final< escapechar >, există un simbol corespunzător< charvalue >.
  • Pentru fiecare< percent sign >în probă< pattern >care nu este precedat de< escapechar >, există zerouri sau mai multe caractere care se potrivesc în< charvalue >.
  • Pentru fiecare< escapechar >v< pattern >care nu-l precede pe celălalt< escapechar >, nu există niciun caracter corespunzător în< charvalue >.
  • Pentru fiecare alt personaj din< pattern >, același simbol este setat la marcajul corespunzător în< charvalue >.

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

  • Dacă< quantifier >= ALL și fiecare membru al setului de rezultate< result set >face această comparație adevărată,< quantified predicate >- este corect.
  • Dacă< quantifier >= ANY și există cel puțin un membru din setul de rezultate< result set >ceea ce face ca această comparație să fie adevărată, atunci< quantified predicate >este corect.
  • Dacă rezultatul este stabilit< result set >gol atunci< quantified predicate >adevărat dacă< quantifier >= TOATE și invalid dacă nu este altfel.
  • Dacă< quantifier >= UNELE, efectul este același ca pentru ORICE.
  • Dacă< quantified predicate >nefidel si nu incorect, el este necunoscut.

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

  • Dacă nu sunt specificate nici ALL, nici DISTINCT, ALL sunt acceptate.
  • Expresie< value expression >cuprinde< column spec >, funcție de agregare< aggregate funct >, funcție personalizată< nonstandard fu nction >constant< constant >, sau orice combinație a acestora cu operatori în expresii valide.
  • Tabel de referință< table reference >, constă din numele tabelului, inclusiv prefixul proprietarului dacă utilizatorul actual nu este proprietarul sau un sinonim (non-standard) pentru tabel. Tabelul poate fi fie un tabel de bază, fie o vedere. Practic, un alias poate indica ce sinonim este folosit pentru un tabel numai pe durata comenzii curente. Numele tabelului sau sinonimul trebuie separate de alias prin unul sau mai multe caractere de separare< separator >.
  • Dacă se utilizează GROUP BY, toate coloanele< column spec >folosit în clauza SELECT va trebui folosit ca un grup de coloane< grouping column >dacă nu sunt cuprinse în funcţia agregată< aggregate funct >... Întregul grup de coloane< grouping column >trebuie reprezentat printre expresii< value expressions >specificat în clauza SELECT. Pentru fiecare combinație distinctă de valori ale grupului de coloane< grouping column >, va exista o singură linie de ieșire.
  • Dacă se folosește HAVING, predicatul< predicate >se aplică fiecărei linii produse de clauza GROUP BY, iar acele linii care fac acest predicat adevărat vor fi tipărite.
  • Dacă se folosește ORDER BY, rezultatul este într-o anumită secvență. ID fiecare coloană< column identifer >se referă la cele specificate< value expression >în clauza SELECT. Dacă aceasta< value expression >este coloana specificată< column spec >, < co lumn identifier >poate fi la fel ca< column spec >... In caz contrar< co lumn identifier >poate fi un întreg pozitiv care indică locația în care< value expression >în succesiunea clauzei SELECT. Ieșirea va fi formată pentru a se potrivi cu valorile conținute în< column identifier >în ordine crescătoare dacă DESC nu este specificat. Numele ID-ului coloanei< column identifier >primul din clauza ORDER BY va precede numele ulterioare în definiția secvenței de ieșire.

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

  • Dacă există un singur tabel referit< table reference >activat, fiecare rând al acestui tabel este la rândul său un rând candidat.
  • Dacă mai mult de un tabel referit< table reference >activat, fiecare rând din fiecare tabel trebuie combinat pe rând cu fiecare combinație de rânduri din toate celelalte tabele. Fiecare astfel de combinație va fi, la rândul său, un șir candidat.

    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

    () VALORI ( )

    Sintaxa 2:

    > INSERT INTO

    VALORI ( )

    * Unde masa- numele tabelului în care introducem datele; câmpuri- enumerarea câmpurilor separate prin virgule;valorile- enumerarea valorilor separate prin virgule.
    * prima optiune va permite inserarea doar a campurilor listate - restul vor primi valorile implicite. A doua opțiune va necesita inserarea pentru toate câmpurile.

    Exemple de utilizare a insertului

    1. Inserați mai multe rânduri într-o singură interogare:

    > INSEREȚI ÎN orașe („nume”, „țară”) VALORI („Moscova”, „Rusia”), („Paris”, „Franța”), („Funafuti”, „Tuvalu”);

    * în acest exemplu, vom adăuga 3 înregistrări cu o interogare SQL.

    2. Lipiți dintr-un alt tabel (copierând rânduri, INSERT + SELECT):

    * extrageți toate înregistrările din tabel orase, ale căror nume încep cu „M” și intră în tabel orase-nou.

    Actualizare (UPDATE)

    Sintaxă:

    * Unde masa- numele tabelului; camp- câmpul pentru care vom modifica valoarea; valoare- valoare nouă; conditii- stare (este periculos să faceți actualizarea fără ea - puteți înlocui toate datele din întregul tabel).

    Actualizare folosind înlocuire (REPLACE):

    ACTUALIZAȚI

    A STABILIT = ÎNLOCUIRE ( , "<что меняем>", "<на что>");

    UPDATE orașe SET name = REPLACE (nume, „Maskva”, „Moscova”);

    Dacă vrem să fim în siguranță, rezultatul înlocuirii poate fi verificat mai întâi folosind SELECT:

    Se șterge (DELETE)

    Sintaxă:

    * Unde masa- numele tabelului; conditii- condiție (ca și în cazul UPDATE, este periculos să folosiți DELETE fără o condiție - DBMS nu va cere confirmare, ci pur și simplu va șterge toate datele).

    Crearea unui tabel

    Sintaxă:

    > CREAȚI TABEL

    ( , )

    > CREAȚI TABEL DACĂ NU EXISTĂ `users_rights` (
    `id` int (10) unsigned NOT NULL,
    `user_id` int (10) unsigned NOT NULL,
    `drepturi` int (10) unsigned NOT NULL
    ) MOTOR = InnoDB DEFAULT CHARSET = utf8;

    * Unde masa- numele tabelului (în exemplu drepturile_utilizatorilor); câmpul 1, câmpul 2- numele câmpurilor (în exemplu sunt create 3 câmpuri - id, user_id, drepturi); opțiuni1, opțiuni2- parametri de câmp (în exemplu int (10) unsigned NOT NULL); opțiunile de masă- parametri generali ai tabelului (în exemplu MOTOR = InnoDB DEFAULT CHARSET = utf8).

    Utilizarea interogărilor în PHP

    Ne conectăm la baza de date:

    mysql_connect ("localhost", "login", "parolă") sau die ("Eroare de conectare MySQL");
    mysql_select_db ("nume_db");
    mysql_query ("SET NAMES" utf8 "");

    * unde se face conexiunea la baza de pe serverul local ( gazdă locală); acreditări de conectare - Autentificareși parola(respectiv, autentificare și parolă); folosit ca bază db_name; codificarea folosită UTF-8.

    De asemenea, puteți crea o conexiune persistentă:

    mysql_pconnect ("localhost", "login", "parolă") sau die ("Eroare de conectare MySQL");

    * cu toate acestea, este posibil să atingeți limita maximă permisă de găzduire. Această metodă ar trebui folosită pe propriile noastre servere, unde noi înșine putem controla situația.

    Terminați conexiunea:

    * în PHP se face automat, cu excepția conexiunilor persistente (mysql_pconnect).

    O interogare către MySQL (Mariadb) în PHP este realizată de funcția mysql_query (), iar preluarea datelor dintr-o interogare este realizată de mysql_fetch_array ():

    $ rezultat = mysql_query ("SELECT * FROM utilizatori");
    while ($ masa = mysql_fetch_array ($ rezultat)) (
    ecou $ masa. "
    ";
    }

    * în acest exemplu, se face o interogare la tabel utilizatorii... Rezultatul interogării este plasat într-o variabilă $ rezultat... În continuare, se folosește bucla in timp ce, a cărui iterație preia o matrice de date și o plasează într-o variabilă masa $- la fiecare iterație lucrăm cu un rând al bazei de date.

    Funcția mysql_fetch_array () folosită returnează o matrice asociativă, cu care este convenabil să lucrați, dar există o altă alternativă - mysql_fetch_row (), care returnează o matrice obișnuită numerotată.

    Ecranarea

    Dacă trebuie să includeți un caracter special în șirul de interogare, de exemplu, %, trebuie să utilizați evadarea folosind caracterul backslash - \

    De exemplu:

    * dacă executați o astfel de interogare fără evadare, semnul % va fi interpretat ca orice număr de caractere după 100.

    Asta e tot. Dacă aveți nevoie de ajutor pentru a vă îndeplini solicitarea, vă rugăm să-mi scrieți prin poștă

    Limbajul SQL este folosit pentru a prelua date din baza de date. SQL este un limbaj de programare care seamănă foarte mult cu engleza, dar conceput pentru programe de gestionare a bazelor de date. SQL este folosit în fiecare interogare din Access.

    Înțelegerea modului în care funcționează SQL vă ajută să creați interogări mai precise și facilitează remedierea interogărilor care returnează rezultate incorecte.

    Acest articol face parte dintr-o serie despre SQL for Access. Descrie elementele de bază ale utilizării SQL pentru a prelua date și oferă exemple de sintaxă SQL.

    În acest articol

    Ce este SQL?

    SQL este un limbaj de programare pentru lucrul cu seturi de fapte și relații dintre ele. Programele de gestionare a bazelor de date relaționale, cum ar fi Microsoft Office Access, utilizează SQL pentru a manipula datele. Spre deosebire de multe limbaje de programare, SQL este ușor de citit și de înțeles chiar și pentru începători. La fel ca multe limbaje de programare, SQL este un standard internațional recunoscut de organismele de standardizare precum ISO și ANSI.

    Seturile de date sunt descrise în SQL pentru a ajuta la răspunsul la întrebări. Sintaxa corectă trebuie utilizată atunci când utilizați SQL. Sintaxa este un set de reguli care vă permit să combinați corect elementele unei limbi. Sintaxa SQL se bazează pe sintaxa engleză și partajează multe elemente cu sintaxa Visual Basic pentru aplicații (VBA).

    De exemplu, o instrucțiune SQL simplă care preia o listă de nume de familie ale persoanelor de contact numite Mary ar putea arăta astfel:

    SELECTAȚI Nume
    DIN Contacte
    WHERE Prenume = „Maria”;

    Notă: Limbajul SQL este folosit nu numai pentru a efectua operații asupra datelor, ci și pentru a crea și modifica structura obiectelor bazei de date, cum ar fi tabelele. Partea din SQL care este utilizată pentru a crea și modifica obiectele bazei de date se numește Data Description Language DDL. DDL nu este acoperit în acest articol. Pentru mai multe informații, consultați articolul Crearea și modificarea tabelelor sau a indecșilor folosind o interogare de definire a datelor.

    Instrucțiuni SELECT

    Instrucțiunea SELECT este folosită pentru a descrie un set de date în SQL. Conține o descriere completă a setului de date care urmează să fie preluat din baza de date, inclusiv următoarele:

      tabele care conțin date;

      legături între date din diferite surse;

      câmpurile sau calculele pe baza cărora sunt selectate datele;

      condiții de selecție care trebuie îndeplinite de datele incluse în rezultatul interogării;

      necesitatea si metoda de sortare.

    Propoziții SQL

    O instrucțiune SQL este alcătuită din mai multe părți numite clauze. Fiecare clauză dintr-o instrucțiune SQL are un scop diferit. Sunt necesare câteva sugestii. Următorul tabel listează instrucțiunile SQL care sunt utilizate cel mai des.

    Clauza SQL

    Descriere

    Obligatoriu

    Definește câmpurile care conțin datele dorite.

    Definește tabele care conțin câmpurile specificate în clauza SELECT.

    Specifică criteriile de selectare a câmpurilor care trebuie îndeplinite de toate înregistrările incluse în rezultate.

    Determină ordinea de sortare a rezultatelor.

    Într-o instrucțiune SQL care conține funcții agregate, identifică câmpurile pentru care clauza SELECT nu calculează o valoare rezumativă.

    Doar dacă există astfel de câmpuri

    Într-o instrucțiune SQL care conține funcții agregate, definește condițiile care se aplică câmpurilor pentru care clauza SELECT calculează o valoare rezumativă.

    termeni SQL

    Fiecare instrucțiune SQL este compusă din termeni care pot fi comparați cu părți de vorbire. Următorul tabel listează tipurile de termeni SQL.

    Termenul SQL

    Parte comparabilă de vorbire

    Definiție

    Exemplu

    identificator

    substantiv

    Numele folosit pentru a identifica obiectul bazei de date, cum ar fi numele unui câmp.

    Clienți. [Număr de telefon]

    operator

    verb sau adverb

    Un cuvânt cheie care reprezintă sau modifică o acțiune.

    constant

    substantiv

    O valoare care nu se modifică, cum ar fi un număr sau NULL.

    expresie

    adjectiv

    O combinație de identificatori, operatori, constante și funcții concepute pentru a calcula o singură valoare.

    > = Bunuri. [Preț]

    Clauze SQL de bază: SELECT, FROM și WHERE

    Formatul general al instrucțiunilor SQL:

    SELECTează câmpul_1
    DIN tabelul_1
    UNDE criteriul_1
    ;

    Note:

      Access ignoră întreruperile de linie în instrucțiunile SQL. Indiferent, este recomandat să începeți fiecare propoziție pe o linie nouă, astfel încât instrucțiunea SQL să fie ușor de citit, atât pentru persoana care a scris-o, cât și pentru toți ceilalți.

      Fiecare instrucțiune SELECT se termină cu punct și virgulă (;). Punctul și virgulă poate apărea fie la sfârșitul ultimei propoziții, fie pe o linie separată la sfârșitul instrucțiunii SQL.

    Exemplu în Access

    Următorul exemplu arată cum ar putea arăta o instrucțiune SQL în Access pentru o interogare de selectare simplă.

    1. Clauza SELECT

    2. clauza FROM

    3. clauza WHERE

    Să parcurgem exemplul propoziție cu propoziție pentru a înțelege cum funcționează sintaxa SQL.

    clauza SELECT

    SELECT, Companie

    Aceasta este o clauză SELECT. Conține o declarație (SELECT) urmată de doi identificatori ("[Adresa de e-mail]" și "Companie").

    Dacă identificatorul conține spații sau caractere speciale (de exemplu, „Adresă de e-mail”), acesta trebuie inclus între paranteze drepte.

    În clauza SELECT, nu trebuie să specificați tabelele care conțin câmpurile și nu puteți specifica criteriile de selecție care trebuie îndeplinite de datele incluse în rezultate.

    Într-o instrucțiune SELECT, clauza SELECT vine întotdeauna înaintea clauzei FROM.

    clauza FROM

    DIN Contacte

    Aceasta este o clauză FROM. Conține un operator (FROM) urmat de un identificator (Contacte).

    Câmpurile pentru selecție nu sunt specificate în clauza FROM.

    clauza WHERE

    WHERE Oraș = „Seattle”

    Aceasta este o clauză WHERE. Conține operatorul (UNDE) urmat de expresia (Oraș = „Rostov”).

    Există multe lucruri pe care le puteți face cu clauzele SELECT, FROM și WHERE. Pentru mai multe informații despre utilizarea acestor sugestii, consultați următoarele articole:

    Sortarea rezultatelor: ORDER BY

    Ca și în cazul Microsoft Excel, Access poate sorta rezultatele interogărilor într-un tabel. Folosind clauza ORDER BY, puteți, de asemenea, specifica modul în care sunt sortate rezultatele atunci când se execută interogarea. Dacă se folosește o clauză ORDER BY, aceasta trebuie să apară la sfârșitul instrucțiunii SQL.

    Clauza ORDER BY conține o listă de câmpuri de sortat, în aceeași ordine în care va fi aplicată sortarea.

    De exemplu, să presupunem că doriți mai întâi să sortați rezultatele după câmpul Companie în ordine descrescătoare și apoi, dacă există înregistrări cu aceeași valoare a câmpului Companie, sortați-le după câmpul Adresă de e-mail în ordine crescătoare. Clauza ORDER BY ar arăta astfel:

    COMANDA DE COMPANIA DESC,

    Notă:În mod implicit, Access sortează valorile în ordine crescătoare (de la A la Z, de la cel mai mic la cel mai mare). Pentru a sorta valorile în ordine descrescătoare, trebuie să specificați cuvântul cheie DESC.

    Pentru mai multe informații despre clauza ORDER BY, consultați articolul Clauza ORDER BY.

    Lucrul cu date Pivot: clauze GROUP BY și HAVING

    Uneori trebuie să lucrați cu date agregate, cum ar fi vânzările lunare totale sau cele mai scumpe articole din stoc. Pentru a face acest lucru, o funcție de agregare este aplicată câmpului din clauza SELECT. De exemplu, dacă interogarea are ca rezultat numărul de adrese de e-mail pentru fiecare companie, clauza SELECT ar putea arăta astfel:

    Capacitatea de a utiliza o anumită funcție de agregare depinde de tipul de date din câmp și de expresia dorită. Pentru mai multe informații despre funcțiile de agregare disponibile, consultați articolul Funcții de agregare SQL.

    Specificarea câmpurilor neutilizate într-o funcție agregată: clauza GROUP BY

    Când utilizați funcții de agregare, de obicei trebuie să creați o clauză GROUP BY. Clauza GROUP BY specifică toate câmpurile care nu au aplicată o funcție de agregare. Dacă funcțiile agregate sunt aplicate tuturor câmpurilor dintr-o interogare, atunci nu trebuie să creați o clauză GROUP BY.

    Clauza GROUP BY trebuie să urmeze imediat clauza WHERE sau FROM dacă nu există nicio clauză WHERE. În clauza GROUP BY, câmpurile sunt specificate în aceeași ordine ca și în clauza SELECT.

    Să continuăm cu exemplul anterior. Dacă clauza SELECT aplică funcția de agregare numai câmpului [Adresă de e-mail], atunci clauza GROUP BY va arăta astfel:

    GRUP DE COMPANIE

    Pentru mai multe informații despre clauza GROUP BY, consultați articolul Clauza GROUP BY.

    Limitarea valorilor agregate folosind condiții de grupare: clauza HAVING

    Dacă trebuie să specificați condiții pentru a restricționa rezultatele, dar câmpul la care doriți să aplicați este utilizat într-o funcție agregată, nu puteți utiliza clauza WHERE. Folosiți în schimb clauza HAVING. Clauza HAVING funcționează la fel ca și clauza WHERE, dar este folosită pentru datele agregate.

    De exemplu, să presupunem că aplicați o funcție AVG (care calculează media) la primul câmp dintr-o clauză SELECT:

    SELECT COUNT (), Companie

    Dacă doriți să limitați rezultatele interogării pe baza valorii funcției COUNT, nu puteți aplica o condiție de filtru acelui câmp din clauza WHERE. În schimb, condiția ar trebui plasată în clauza HAVING. De exemplu, dacă doriți ca interogarea să returneze rânduri numai dacă compania are mai multe adrese de e-mail, puteți utiliza următoarea clauză HAVING:

    AVÂND NUMĂRARE ()> 1

    Notă: O interogare poate include atât o clauză WHERE, cât și o clauză HAVING, cu criteriile pentru câmpurile care nu sunt utilizate în funcțiile agregate specificate în clauza WHERE și condiții pentru câmpurile care sunt utilizate în funcțiile agregate din clauza HAVING.

    Pentru mai multe informații despre clauza HAVING, consultați articolul Clauza HAVING.

    Combinarea rezultatelor interogării: operator UNION

    Operatorul UNION este folosit pentru a vizualiza toate datele returnate de interogări de selecție multiple, similare, în același timp ca un set concatenat.

    Operatorul UNION vă permite să combinați două instrucțiuni SELECT într-una singură. Instrucțiunile SELECT care trebuie îmbinate trebuie să aibă același număr și aceeași ordine de câmpuri de ieșire cu aceleași tipuri de date sau compatibile. Când executați o interogare, datele din fiecare set de câmpuri potrivite sunt combinate într-un singur câmp de ieșire, astfel încât rezultatul interogării are același număr de câmpuri ca fiecare instrucțiune SELECT individual.

    Notă:În interogările union, tipurile de date numerice și text sunt compatibile.

    Folosind operatorul UNION, puteți specifica dacă rândurile duplicate, dacă există, trebuie incluse în rezultatele interogării. Pentru a face acest lucru, utilizați cuvântul cheie ALL.

    O interogare pentru a combina două instrucțiuni SELECT are următoarea sintaxă de bază:

    SELECTează câmpul_1
    DIN tabelul_1
    UNIUNE
    SELECTează câmpul_a
    DIN tabel_a
    ;

    De exemplu, să presupunem că aveți două tabele numite „Produse” și „Servicii”. Ambele tabele conțin câmpuri cu numele produsului sau serviciului, informații despre preț și garanție, precum și un câmp care indică exclusivitatea produsului sau serviciului oferit. Deși există diferite tipuri de garanții în tabelele Produse și Servicii, informațiile de bază sunt aceleași (există o garanție de calitate pentru produse sau servicii individuale). Puteți utiliza următoarea interogare de îmbinare pentru a combina patru câmpuri din două tabele:

    SELECTAȚI numele, prețul, warranty_available, exclusive_offer
    DIN Produse
    UNIREA TOȚI
    SELECTAȚI numele, prețul, garanția_disponibilă, oferta_exclusivă
    DE LA Servicii
    ;

    Pentru mai multe informații despre combinarea instrucțiunilor SELECT folosind operatorul UNION, consultați articolul

    Top articole similare