SQL - Enciclopedia limbajelor de programare. SQL „pentru manechin”: ce trebuie să știe începătorii

Limbaj de programare

SQL (Structured Query Language) este un limbaj de gestionare a bazelor de date pentru baze de date relaționale. SQL în sine nu este un limbaj de programare complet Turing, dar standardul său permite crearea de extensii procedurale pentru acesta, care își extind funcționalitatea într-un limbaj de programare cu drepturi depline.

Limbajul a fost creat în anii 1970 sub numele „SEQUEL” pentru sistemul de gestionare a bazelor de date (DBMS) System R. Ulterior a fost redenumit „SQL” pentru a evita conflictele de mărci comerciale. În 1979, SQL a fost publicat pentru prima dată ca produs comercial, Oracle V2.

Primul standard de limbă oficială a fost adoptat de ANSI în 1986 și ISO în 1987. De atunci, au mai fost create câteva versiuni ale standardului, unele dintre ele repetându-le pe cele anterioare cu variații minore, altele luând noi caracteristici semnificative.

În ciuda existenței standardelor, cele mai obișnuite implementări SQL diferă atât de mult încât codul poate fi rareori portat de la un sistem de gestionare a bazelor de date la altul fără a face modificări semnificative. Acest lucru se datorează lungimii și complexității standardului, precum și lipsei sale de specificații în unele domenii importante de implementare.

SQL a fost creat ca o modalitate simplă, standardizată de a prelua și manipula datele conținute într-o bază de date relațională. Ulterior, a devenit mai complex decât intenționat și a devenit mai degrabă un instrument pentru dezvoltatori decât un instrument pentru utilizatorul final. În prezent, SQL (în cea mai mare parte implementat de Oracle) rămâne cel mai popular dintre limbajele de gestionare a bazelor de date, deși există o serie de alternative.

SQL este format din patru părți distincte:

  1. Data Definition Language (DDL) este folosit pentru a defini structurile de date stocate în baza de date. Instrucțiunile DDL vă permit să creați, să modificați și să ștergeți obiecte individuale din baza de date. Tipurile de obiecte valide depind de SGBD utilizat și includ de obicei baze de date, utilizatori, tabele și un număr de obiecte suport mai mici, cum ar fi roluri și indecși.
  2. Limbajul de manipulare a datelor (DML) este folosit pentru a prelua și modifica datele din baza de date. Instrucțiunile DML vă permit să preluați, să inserați, să modificați și să ștergeți date din tabele. Uneori, instrucțiunile de selectare pentru extragerea datelor nu sunt considerate parte a DML deoarece nu schimbă starea datelor. Toate declarațiile DML sunt de natură declarativă.
  3. Limbajul de definire a accesului la date (DCL) este utilizat pentru a controla accesul la datele din baza de date. Declarațiile DCL se aplică privilegiilor și vă permit să acordați și să revocați drepturi de a aplica anumite instrucțiuni DDL și DML anumitor obiecte de bază de date.
  4. Transaction Control Language (TCL) este folosit pentru a controla procesarea tranzacțiilor din baza de date. În mod obișnuit, declarațiile TCL includ commit to commit modificările făcute în timpul unei tranzacții, rollback pentru a le derula înapoi și salvare pentru a împărți tranzacția în mai multe părți mai mici.

Trebuie remarcat faptul că SQL implementează o paradigmă de programare declarativă: fiecare instrucțiune descrie doar acțiunea necesară, iar SGBD ia o decizie cu privire la modul de realizare a acesteia, de exemplu. planifică operaţiile elementare necesare efectuării unei acţiuni şi le realizează. Cu toate acestea, pentru a utiliza în mod eficient capacitățile SQL, un dezvoltator trebuie să înțeleagă cum DBMS analizează fiecare instrucțiune și își creează planul de execuție.

Exemple:

Salut Lume!:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Șirul „Hello, World!” este selectat din tabelul dual încorporat, care este utilizat pentru interogări care nu necesită acces la tabele reale.

selectați „Bună ziua, lume!” din dual ;

factorial:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

SQL nu acceptă bucle, recursivitate sau funcții definite de utilizator. Acest exemplu demonstrează o posibilă soluție folosind:

  • nivel de pseudo-coloană pentru a crea pseudo-tabele t1 și t2 care conțin numere de la 1 la 16,
  • funcția agregată sum , care vă permite să însumați elementele unei mulțimi fără a utiliza în mod explicit o buclă,
  • și funcțiile matematice ln și exp, care vă permit să înlocuiți produsul (necesar pentru a calcula factorialul) cu o sumă (furnizată de SQL).

Linia „0! = 1” nu va fi inclus în setul de rânduri rezultat, deoarece încercarea de a evalua ln(0) are ca rezultat o excepție.

numerele Fibonacci:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

SQL nu acceptă bucle sau recursivitate, iar concatenarea câmpurilor din diferite rânduri dintr-un tabel sau o interogare nu este o funcție de agregare standard. Acest exemplu folosește:

  • Formula lui Binet și funcțiile matematice ROUND, POWER și SQRT pentru calcularea celui de-al n-lea număr Fibonacci;
  • nivel de pseudo-coloană pentru a crea un pseudo-tabel t1 care conține numere de la 1 la 16;
  • funcția încorporată SYS_CONNECT_BY_PATH pentru concatenarea ordonată a numerelor primite.

SELECTARE REPLACE (MAX (SYS_CONNECT_BY_PATH (fib || ", " , "/" )), "/" , "" ) || „...” fiblist FROM ( SELECT n , fib , ROW_NUMBER () OVER (ORDER BY n ) r FROM ( selectați n , rotund ((putere ((1 + sqrt (5 ) )) * 0 . 5 , n ) - putere ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib din (selectați nivelul n din conectarea duală după nivel<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Salut Lume!:

Exemplu pentru versiunile Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, sqlite 3.7.3

selectați „Bună ziua, lume!” ;

factorial:

Exemplu pentru versiunile Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Se folosește o definiție recursivă a factorial, implementată printr-o interogare recursivă. Fiecare linie de interogare conține două câmpuri numerice, n și n!, iar fiecare linie ulterioară este calculată folosind datele din cea precedentă.

Puteți calcula doar factoriali întregi până la 20!. Când încerci să calculezi 21! Apare eroarea „Eroare de depășire aritmetică”, adică. grila de biți se revarsă.

Pentru numerele reale se calculează factorialul 100! (Pentru a face acest lucru, în exemplu trebuie să înlocuiți bigint cu float în a treia linie)

numerele Fibonacci:

Exemplu pentru versiunile Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Se folosește determinarea iterativă a numerelor Fibonacci, implementată printr-o interogare recursivă. Fiecare linie de interogare conține două numere adiacente în secvență, iar următoarea linie este calculată ca (ultimul număr, suma numerelor) a liniei anterioare. Astfel, toate numerele, cu excepția primului și ultimului, apar de două ori, astfel încât rezultatul include doar primele numere ale fiecărei linii.

factorial:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu demonstrează utilizarea operatorului model, disponibil în Oracle 10g, care permite ca șirurile de interogări să fie tratate ca elemente de matrice. Fiecare linie conține două câmpuri - numărul liniei n și factorialul său f.

selectați n || "! = " || factorul f din modelul dual returnează toate dimensiunile rândurilor prin (0 d) măsuri (0 f, 1 n) reguli iterate (17) (f [număr_iterație] = decodificare (număr_iterație, 0, 1, f [număr_iterație - 1] * număr_iterație) , n [ iteration_number ] = iteration_number );

numerele Fibonacci:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu demonstrează utilizarea operatorului model, disponibil în Oracle 10g, care permite ca șirurile de interogări să fie tratate ca elemente de matrice. Fiecare linie conține două câmpuri - numărul Fibonacci însuși și concatenarea tuturor numerelor mai mici sau egale cu acesta. Concatenarea iterativă a numerelor în aceeași interogare care le generează este mai ușoară și mai rapidă decât agregarea ca operație separată.

selectați max(uri) || ", ..." din (selectați s din modelul dual returnează toate dimensiunile rândurilor cu ( 0 d ) măsuri ( turn ( " " ca varchar2 (200 )) s , 0 f ) reguli iterate ( 16 ) ( f [ iterație_număr ] = decode (număr_iterație, 0, 1, 1, 1, f [număr_iterație - 1] + f [număr_iterație - 2]), s [număr_iterație] = decode (număr_iterație, 0, to_char (f [număr_iterație - [iterație]),_număr 1 ] ||. ", " ||.

factorial:

Exemplu pentru versiunile MySQL 5

selectează concat (cast (t2 . n ca char ), "!= " , cast (exp (sum (sum (log (t1 . n ))) ca char )) din ( select @ i : = @ i + 1 AS n din TABLE , (selectați @ i : = 0 ) ca limită sel1 16 ) t1 , ( selectați @ j : = @ j + 1 AS n din TABEL , (selectați @ j : = 0 ) ca limită sel1 16 ) t2 unde t1 . n<= t2 . n group by t2 . n

numerele Fibonacci:

Exemplu pentru versiunile MySQL 5

Înlocuiți TABLE cu orice tabel pe care îl puteți accesa, de exemplu mysql.help_topic .

selectați concat (group_concat (f separator ", " ), ", ..." ) din (selectați @ f : = @ i + @ j ca f , @ i : = @ j , @ j : = @ f din TABLE , (selectați @ i : = 1 , @ j : = 0 ) sel1 limită 16 ) t

Salut Lume!:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu folosește un bloc PL/SQL anonim care imprimă un mesaj la ieșirea standard folosind pachetul dbms_output.

începe dbms_output . put_line("Bună, lume!"); Sfârşit ;

factorial:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu demonstrează calculul iterativ al factorial folosind PL/SQL.

declara n numar := 0 ; număr f := 1 ; începe în timp ce (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

numerele Fibonacci:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu folosește determinarea iterativă a numerelor Fibonacci. Numerele deja calculate sunt stocate într-o structură de date varray - un analog al unui tablou.

vectorul tip declara este varray (16) de număr; vector fib := vector(); i număr; s varchar2(100); începe fib . extinde(16); fib (1) := 1; fib (2) := 1; s : = fib (1 ) || ", " || fib(2) || ", "; pentru i în 3 .. 16 buclă fib (i) : = fib (i - 1) + fib (i - 2); s := s || fib(i) || ", "; buclă de capăt; dbms_output. put_line (s || "..." ); Sfârşit ;

Ecuația pătratică:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu a fost testat în SQL*Plus, TOAD și PL/SQL Developer.

Pure SQL vă permite să introduceți variabile în timpul execuției interogării sub formă de variabile înlocuibile. Pentru a defini o astfel de variabilă, numele acesteia (în acest caz A, B și C) ar trebui să fie folosit cu un ampersand și în fața ei ori de câte ori variabila trebuie să fie referită. Când interogarea este executată, utilizatorului i se solicită să introducă valorile tuturor variabilelor de înlocuire utilizate în interogare. Odată ce valorile sunt introduse, fiecare referință la o astfel de variabilă este înlocuită cu valoarea acesteia, iar cererea rezultată este executată.

Există mai multe moduri de a introduce valori pentru variabilele de înlocuire. În acest exemplu, prima referință la fiecare variabilă este precedată de un ampersand dublu && în loc de un singur ampersand. În acest fel, valoarea pentru fiecare variabilă este introdusă o singură dată, iar toate referințele ulterioare la aceasta vor fi înlocuite cu aceeași valoare (atunci când se utilizează un singur și în SQL*Plus, valoarea pentru fiecare referință la aceeași variabilă trebuie introdusă separat). ). În PL/SQL Developer, toate referințele la variabile trebuie să fie precedate de un singur caracter &, altfel va apărea o eroare ORA-01008 „Nu toate variabilele sunt legate”.

Prima linie a exemplului specifică caracterul pentru separatorul zecimal, care este utilizat la conversia numerelor rădăcină în șiruri.

Cererea în sine constă din patru cereri diferite. Fiecare interogare returnează un șir care conține rezultatul calculului într-unul dintre cazuri (A=0, D=0, D>0 și D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

modificare sesiunea NLS_NUMERIC_CHARACTERS = "; selectați „Nu este o ecuație pătratică”. și de la dual unde && A = 0 unire selectați "x = " || to_char (-&& B / 2 /& A ) din dual unde & A != 0 și & B *& B - 4 *& A *&& C = 0 unire selectează "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) || ", x2 = " || to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A din dual unde & A != 0 și & B *& B - 4 *& A *& C > 0 unire selectați „x1 = (" || to_char (-& B / 2 /& A ) || "," || to_char (sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || "), " || "x2 = (" || to_char (-& B / 2 /& A ) || "," || to_char (- sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || ")" din dual unde & A != 0 și & B *& B - 4 *& A *& C< 0 ;

In acest capitol...

  • Ce este SQL
  • Concepții greșite SQL
  • O privire asupra diferitelor standarde SQL
  • Introducere în comenzile SQL standard și cuvintele rezervate
  • Reprezentarea numerelor, simbolurilor, datelor, orelor și a altor tipuri de date
  • Valori și restricții nedefinite
  • Utilizarea SQL într-un sistem client/server
  • SQL pe web

SQL este un limbaj flexibil care poate fi folosit într-o varietate de moduri. Este cel mai comun instrument folosit pentru a comunica cu o bază de date relațională. În acest capitol, voi explica ce este și ce nu este SQL, în special modul în care SQL diferă de alte tipuri de limbaje de calculator. Apoi vă veți familiariza cu comenzile și tipurile de date acceptate de SQL standard. În plus, voi explica concepte de bază precum valori nedefiniteȘi restricții. În cele din urmă, va fi oferită o privire de ansamblu asupra modului în care SQL se potrivește în mediul client/server, precum și în internetul și intranet-urile organizațiilor.

Ce este SQL și ce nu este

Primul lucru de înțeles despre SQL este că nu este un procedural precum FORTRAN, Basic, C, COBOL, Pascal și Java. Pentru a rezolva o problemă folosind unul dintre aceste limbaje procedurale, trebuie să scrieți o procedură care efectuează operațiuni specificate una după alta până la finalizarea sarcinii. Procedura poate fi o secvență liniară sau poate conține ramificare, dar în ambele cazuri programatorul specifică ordinea de execuție.

Cu alte cuvinte, SQL este neprocedurale limbă. Pentru a-l folosi pentru a rezolva o problemă, spuneți SQL, Ce anume ai nevoie de ea ca și cum ai vorbi cu geniul din lampa lui Aladin. Și, în același timp, nu este nevoie să spunem, Cum să-ți faci ceea ce vrei. Sistemul de management al bazei de date (DBMS) va decide cum să vă satisfacă cel mai bine solicitarea.

Amenda. Tocmai am spus că SQL nu este un limbaj procedural. În esență, acest lucru este adevărat. Cu toate acestea, cu milioane de programatori în jur (și este posibil să fii unul dintre ei) obișnuiți să rezolve probleme procedural, a existat o presiune mare în ultimii ani pentru a adăuga unele capacități procedurale la SQL. De aceea, noua versiune a specificației SQL, SQL:2003, include acum caracteristici ale limbajului procedural, cum ar fi blocuri BEGIN, instrucțiuni IF condiționate, funcții și proceduri. Cu aceste noi instrumente, programele pot fi stocate pe un server, astfel încât să poată fi reutilizate de mulți utilizatori.

Pentru a ilustra ce am vrut să spun când am spus „spuneți sistemului exact ce aveți nevoie”, să presupunem că aveți un tabel ANGAJAT cu datele angajaților și doriți să selectați toate rândurile din acesta care corespund tuturor angajaților „senior”. Lucrătorii „seniori” pot fi definiți ca orice persoană cu vârsta peste 40 de ani sau care câștigă mai mult de 60.000 USD pe an. Selectarea de care aveți nevoie poate fi făcută folosind următoarea interogare:

SELECTAȚI * DIN ANGAJAT LA CARE VARSTA >40 SAU SALARIU >60000;

Această instrucțiune selectează din tabelul EMPLOYEE toate rândurile în care fie valoarea coloanei AGE (vârstă) este mai mare de 40, fie valoarea coloanei SALARY (salariu) este mai mare de 60000. SQL însuși știe cum să selecteze informațiile. Motorul bazei de date verifică baza de date și decide singur cum ar trebui să fie executată interogarea. Tot ce trebuie să faceți este să indicați de ce date aveți nevoie.

Tine minte:
O interogare este o întrebare pe care o puneți bazei de date. Dacă oricare dintre datele sale corespunde condițiilor solicitării dvs., atunci SQL vi le transmite
.

Implementărilor SQL moderne le lipsesc multe dintre constructele simple de programare care sunt fundamentale pentru majoritatea celorlalte limbaje. Aplicațiile de zi cu zi necesită de obicei cel puțin unele dintre aceste construcții, așa că SQL este de fapt sublimbaj date. Chiar și cu completările care au venit la SQL cu standardul SQL:1999 și cu extensiile suplimentare adăugate în SQL:2003, trebuie să utilizați unul dintre limbajele de programare, cum ar fi C, cu SQL pentru a crea o aplicație completă.

Puteți selecta informații din baza de date în unul dintre următoarele moduri.

  • Folosind o interogare unică, neprogramabilă din consola computerului, introducerea unei comenzi SQL și citirea rezultatelor execuției acesteia pe ecran. Consola este un termen tradițional pentru hardware-ul computerului care face munca tastaturii și a ecranului întâlnite la computerele moderne. Interogările din consolă sunt utile atunci când aveți nevoie de un răspuns rapid la o anumită solicitare. Pentru a satisface anumite nevoi curente, este posibil să aveți nevoie de date din baza de date care nu au fost niciodată solicitate înainte. S-ar putea să nu mai ai nevoie de ele niciodată, dar ai nevoie de ele acum. Introduceți interogarea SQL corespunzătoare de la tastatură, iar după un timp rezultatul va apărea pe ecran.
  • Folosind un program care preia informații dintr-o bază de date și apoi creează un raport pe baza acestor date, fie afișat pe ecran, fie imprimat. SQL poate fi folosit și în acest fel. O interogare SQL complexă care ar putea fi utilă în viitor poate fi plasată direct în program. Acest lucru vă permite să îl reutilizați în viitor. Astfel, formularea interogării este executată o dată. Capitolul 15 acoperă modul de inserare a codului SQL în programele scrise într-o altă limbă.

LIMBAJUL SQL: MANIPULARE DATE

IN ACEASTA PRELEGERE...

· Scopul Structure Query Language (SQL) și rolul său special atunci când lucrați cu baze de date.

· Istoria apariției și dezvoltării limbajului SQL.

· Scrierea de instrucțiuni SQL.

· Preluarea informațiilor din baze de date folosind instrucțiunea SELECT.

· construcția de instrucțiuni SQL caracterizate prin următoarele caracteristici:

· folosirea constructului WHERE pentru a selecta rânduri care satisfac diverse condiții;

· sortarea rezultatelor interogării utilizând constructul ORDER BY;

· utilizarea funcţiilor de agregare SQL;

· gruparea datelor selectate folosind constructul GROUP BY;

· utilizarea subinterogărilor;

· utilizarea table joins;

· aplicarea operatiilor cu multimi (UNIREA, INTERSECT, EXCEPT.).

· Efectuarea de modificări în baza de date folosind instrucțiunile INSERT, UPDATE și DELETE.

Unul dintre limbajele care a apărut ca urmare a dezvoltării modelului de date relaționale este SQL, care acum a devenit foarte răspândit și a devenit de fapt limbajul standard pentru bazele de date relaționale. Standardul de limbaj SQL a fost lansat de Institutul Național de Standarde al SUA (ANSI) în 1986, iar în 1987 Organizația Internațională pentru Standardizare (ISO) a adoptat acest standard ca standard internațional. În prezent, limbajul SQL este suportat de sute de tipuri diferite de SGBD-uri, dezvoltate pentru o mare varietate de platforme de calcul, de la computere personale la mainframe.

Această prelegere folosește definiția ISO a SQL.

Introducere în limbajul SQL

În această parte, ne vom uita la scopul limbajului SQL, ne vom familiariza cu istoria acestuia și vom analiza motivele pentru care a devenit acum atât de important pentru aplicațiile de baze de date.

Scopul limbajului SQL

Orice limbaj conceput pentru a funcționa cu baze de date trebuie să ofere utilizatorului următoarele capabilități:

· creați baze de date și tabele cu o descriere completă a structurii acestora;



· Efectuați operațiuni de bază de manipulare a datelor, cum ar fi inserarea, modificarea și ștergerea datelor din tabele;

· Efectuați interogări simple și complexe.

În plus, limbajul bazei de date trebuie să rezolve toate problemele de mai sus cu un efort minim din partea utilizatorului, iar structura și sintaxa comenzilor sale trebuie să fie destul de simple și ușor de învățat.

Și în sfârșit, limbajul trebuie să fie universal, adică. respectă un standard recunoscut, care va permite utilizarea aceleiași sintaxe și structuri de comandă atunci când se trece de la un SGBD la altul. Standardul modern al limbajului SQL satisface aproape toate aceste cerințe.

SQL este un exemplu de limbaj de transformare a datelor sau un limbaj conceput pentru a lucra cu tabele pentru a transforma datele de intrare în forma de ieșire dorită. Limbajul SQL, care este definit de standardul ISO, are două componente principale:

· Data Definition Language (DDL), conceput pentru a defini structurile bazelor de date și a controla accesul la date;

· Limbajul de manipulare a datelor (DML), conceput pentru preluarea și actualizarea datelor.

Înainte de apariția standardului SQL3, SQL includea doar comenzi pentru definirea și manipularea datelor; îi lipseau orice comenzi pentru a controla progresul calculelor. Cu alte cuvinte, acest limbaj nu avea IF ... THEN ...ELSE, GO TO, DO ... WHILE și orice alte comenzi menite să controleze progresul procesului de calcul. Astfel de sarcini trebuiau rezolvate programatic, folosind limbaje de programare sau de control al sarcinilor, sau interactiv, ca urmare a acțiunilor efectuate de utilizatorul însuși. Datorită acestei incompletitudini, din punct de vedere al organizării procesului de calcul, limbajul SQL ar putea fi utilizat în două moduri. Prima a implicat o muncă interactivă, constând în introducerea de către utilizator a instrucțiunilor SQL individuale din terminal. Al doilea a fost de a încorpora instrucțiunile SQL în programele de limbaj procedural.

Avantajele limbajului SQL3, a cărui definiție formală a fost adoptată în 1999:

· Limbajul SQL este relativ ușor de învățat.

· Este un limbaj non-procedural, deci trebuie să specifice ce informații ar trebui obținute, nu cum pot fi obținute. Cu alte cuvinte, limbajul SQL nu necesită specificarea metodelor de acces la date.

· La fel ca majoritatea limbilor moderne, SQL acceptă un format gratuit pentru scrierea declarațiilor. Aceasta înseamnă că elementele individuale ale operatorului nu sunt asociate cu poziții fixe de pe ecran pe măsură ce tastați.

· Structura comenzii este specificată de un set de cuvinte cheie, care sunt cuvinte obișnuite în limba engleză, cum ar fi CREATE TABLE - Create a table, INSERT - Insert, SELECT - Select.

De exemplu:

CREATE TABLE [Vânzări] ( (S), [Nume obiect] VARCHAR(15), [Cost] DECIMAL(7,2));

INSERT INTO [Obiect] VALUES ("SG16", "Maro", 8300);

SELECT, [Nume obiect], [Cost];

DE LA [Vânzări]

UNDE [Cost] > 10000;

· Limbajul SQL poate fi folosit de o gamă largă de utilizatori, inclusiv administratorii de baze de date (DBA), personalul de conducere al companiei, programatorii de aplicații și mulți alți utilizatori finali din diferite categorii.

În prezent, există standarde internaționale pentru limbajul SQL care îl definesc în mod oficial ca limbaj standard pentru crearea și manipularea bazelor de date relaționale, ceea ce este de fapt.

Istoria limbajului SQL

Istoria modelului de date relaționale, și indirect a limbajului SQL, a început în 1970 odată cu publicarea unui articol fundamental al lui E. F. Codd, care în acel moment lucra la laboratorul de cercetare IBM din San Jose. În 1974, D. Chamberlain, care a lucrat în același laborator, a publicat o definiție a unei limbi numită „Structured English Query Language” sau SEQUEL. O versiune revizuită a acestui limbaj, SEQUEL/2, a fost lansată în 1976; ulterior, numele său a trebuit să fie schimbat în SQL din motive legale - abrevierea SEQUEL era deja folosită de filologi. Dar până în ziua de azi, mulți oameni încă pronunță acronimul SQL ca „sequel”, deși oficial este recomandat să îl citiți ca „es-qu-el”.

În 1976, IBM a lansat un prototip DBMS bazat pe limbajul SEQUEL/2, numit „System R”. Scopul acestui studiu a fost de a testa fezabilitatea implementării modelului relațional. Printre alte aspecte pozitive, cel mai important rezultat al acestui proiect poate fi considerat dezvoltarea limbajului SQL în sine. Proiectul System R Limbajul SQUARE a fost dezvoltat ca instrument de cercetare pentru implementarea algebrei relaționale prin fraze compuse în limba engleză.

La sfârșitul anilor 1970, compania care a devenit acum Oracle Corporation a lansat Oracle DBMS. Poate că aceasta este prima implementare comercială a unui SGBD relațional construit folosind limbajul SQL.

Puțin mai târziu, a apărut INGRES DBMS, folosind limbajul de interogare QUEL.

Acest limbaj era mai structurat decât SQL, dar semantica sa era mai puțin apropiată de engleza obișnuită. Mai târziu, când SQL a fost adoptat ca limbaj standard pentru bazele de date relaționale, INGRES DBMS a fost complet convertit pentru a-l utiliza. În 1981, IBM a lansat primul său SGBD relațional comercial, numit SQL/DS (pentru mediul DOS/VSE). În 1982, a fost lansată o versiune a acestui sistem pentru mediul VM/CMS, iar în 1983 - pentru mediul MVS, dar sub numele DB2.

În 1982, Institutul Național de Standarde al SUA (ANSI) a început să lucreze la Relation Database Language (RDL), ghidat de documentele conceptuale primite de la IBM Corporation. În 1983, Organizația Internațională pentru Standardizare (ISO) s-a implicat în această activitate. Eforturile comune ale ambelor organizații au culminat cu lansarea standardului de limbaj SQL. Numele RDL a fost abandonat în 1984, iar schița de limbaj a fost reproiectată pentru a fi mai aproape de implementările existente ale limbajului SQL.

Versiunea originală a standardului, care a fost lansată de ISO în 1987, a atras un val de critici. În special, Date, un cercetător binecunoscut în acest domeniu, a subliniat că standardul omite funcții critice, inclusiv controale de integritate referențială și unii operatori relaționali.

În plus, el a remarcat redundanța excesivă a limbii - aceeași cerere ar putea fi scrisă în mai multe versiuni diferite. Majoritatea criticilor au fost recunoscute ca fiind corecte, iar ajustările necesare au fost făcute standardului înainte de publicarea acestuia. Cu toate acestea, s-a decis că este mai important să se lanseze standardul cât mai repede posibil, astfel încât să poată servi drept bază comună pe care atât limbajul în sine, cât și implementările sale să poată fi dezvoltate în continuare, decât să aștepte până când toate caracteristicile care diferă. au fost definiți și conveniți experți considerați obligatorii pentru un limbaj similar.

În 1989, ISO a publicat un amendament la standard care definea funcțiile de integritate a datelor. În 1992, a fost lansată prima versiune revizuită substanțial a standardului ISO, uneori numită SQL2 sau SQL-92. Deși unele dintre funcții au fost definite în acest standard pentru prima dată, multe dintre ele au fost deja implementate integral sau parțial în una sau mai multe implementări comerciale ale limbajului SQL.

Și următoarea versiune a standardului, care se numește în mod obișnuit SQL3, a fost lansată abia în 1999. Această versiune oferă suport suplimentar pentru caracteristicile de gestionare a datelor orientate pe obiecte.

Funcțiile care sunt adăugate standardului de limbaj de către dezvoltatorii de implementări comerciale sunt numite extensii. De exemplu, standardul limbajului SQL definește șase tipuri diferite de date care pot fi stocate în baze de date. În multe implementări, această listă este completată de diverse extensii. Fiecare implementare a unei limbi se numește dialect. Nu există două dialecte care să fie complet identice și nu există în prezent niciun dialect care să respecte pe deplin standardul ISO.

Mai mult, pe măsură ce dezvoltatorii de baze de date adaugă noi funcționalități sistemelor lor, își extind continuu dialectele SQL, determinând dialectele individuale să devină din ce în ce mai diferite unele de altele. Cu toate acestea, nucleul de bază al limbajului SQL rămâne mai mult sau mai puțin standardizat în toate implementările.

Deși conceptele originale ale limbajului SQL au fost dezvoltate de IBM, importanța acestuia i-a determinat curând pe alți dezvoltatori să-și creeze propriile implementări. În prezent, există literalmente sute de produse disponibile pe piață construite folosind limbajul SQL și auzim în mod constant despre lansarea a tot mai multe versiuni noi,

Ești nou în programare sau pur și simplu ai evitat să înveți SQL în trecut? Atunci ați ajuns la adresa potrivită, deoarece orice dezvoltator se confruntă în cele din urmă cu nevoia de a cunoaște acest limbaj de interogare. Este posibil să nu fiți designerul principal al bazei de date, dar este aproape imposibil să evitați să lucrați cu ele. Sper că această scurtă prezentare generală a sintaxei de bază a interogării SQL va ajuta dezvoltatorul interesat și oricine altcineva care are nevoie de ea.

Ce este o bază de date SQL?

Limbajul de interogare structurat ( S structurat Q uery L limbaj) este un standard de comunicare pentru baze de date care este acceptat de ANSI. Cea mai recentă versiune este SQL-99, deși un nou standard este deja în dezvoltare. Majoritatea bazelor de date aderă ferm la standardul ANSI-92. Au existat multe discuții despre introducerea unor standarde mai moderne, dar vânzătorii de baze de date comerciale se îndepărtează de acest lucru prin dezvoltarea propriilor concepte noi pentru stocarea datelor stocate. Aproape fiecare bază de date utilizează un set unic de sintaxă, deși foarte similar cu standardul ANSI. În cele mai multe cazuri, această sintaxă este o extensie a standardului de bază, deși există cazuri în care această sintaxă produce rezultate diferite pentru diferite baze de date. Este întotdeauna o idee bună să revizuiți documentația bazei de date, mai ales dacă obțineți rezultate neașteptate.

Dacă sunteți nou în SQL, există câteva concepte de bază pe care trebuie să le înțelegeți.

În termeni generali, „bază de date” este numele generic pentru sistem de management al bazelor de date relaționale(RDBMS). Pentru unele sisteme, „bază de date” se referă și la un grup de tabele, date sau informații de configurare care este o parte inerent separată de alte constructe similare. În acest caz, fiecare instalare a bazei de date SQL poate consta din mai multe baze de date. În alte sisteme, ele sunt denumite tabele.

Un tabel este o structură de bază de date care constă din coloane conținând linii date. De obicei, tabelele sunt create pentru a conține informații conexe. În aceeași bază de date pot fi create mai multe tabele.

Fiecare coloană reprezintă un atribut sau un set de atribute ale obiectelor, cum ar fi numerele de identificare a angajaților, înălțimea, culoarea mașinii etc. Termenul folosit adesea pentru a se referi la o coloană este camp indicând numele, de exemplu „în câmpul Nume”. Un câmp de rând este elementul minim al unui tabel. Fiecare coloană dintr-un tabel are un nume, un tip de date și o dimensiune specifică. Numele coloanelor trebuie să fie unice în tabel.

Fiecare rând (sau înregistrare) reprezintă o colecție de atribute ale unui obiect specific, de exemplu, un rând poate conține numărul de identificare al angajatului, salariul acestuia, anul său de naștere etc. Rândurile de tabel nu au nume. Pentru a accesa un anumit rând, utilizatorul trebuie să specifice un atribut (sau un set de atribute) care îl identifică în mod unic.

Una dintre cele mai importante operațiuni care se efectuează atunci când se lucrează cu date este preluarea informațiilor stocate în baza de date. Pentru a face acest lucru, utilizatorul trebuie să execute cerere(interogare).

Acum să ne uităm la principalele tipuri de interogări de baze de date care se concentrează pe manipularea datelor din baza de date. Pentru scopurile noastre, toate exemplele sunt furnizate în SQL standard pentru a se potrivi oricărui mediu.

Tipuri de interogări de date

Există patru tipuri principale de interogări de date în SQL, care sunt denumite limbaj de manipulare a datelor(Limbaj de manipulare a datelor sau DML):

  • SELECTAȚI– selectați rânduri din tabele;
  • INTRODUCE– adăugați rânduri la tabel;
  • ACTUALIZAȚI– schimbați rândurile din tabel;
  • ȘTERGE– ștergeți rânduri din tabel;

Fiecare dintre aceste interogări are diferiți operatori și funcții care sunt utilizate pentru a efectua unele acțiuni asupra datelor. Interogarea SELECT are cel mai mare număr de opțiuni. Există, de asemenea, tipuri de interogare suplimentare utilizate împreună cu SELECT, cum ar fi JOIN și UNION. Dar pentru moment, ne vom concentra doar pe interogările de bază.

Folosind o interogare SELECT pentru a selecta datele dorite

Pentru a prelua informațiile stocate în baza de date, se utilizează o interogare SELECT. Efectul de bază al acestei interogări este limitat la un singur tabel, deși există modele care vă permit să selectați din mai multe tabele în același timp. Pentru a obține toate rândurile de date pentru anumite coloane, se folosește o interogare ca aceasta:

SELECT coloana1, coloana2 FROM table_name;

De asemenea, puteți obține toate coloanele dintr-un tabel utilizând caracterul metacar *:

SELECT * FROM table_name;

Acest lucru poate fi util atunci când urmează să selectați date cu o anumită clauză WHERE. Următoarea interogare va returna toate coloanele din toate rândurile în care „coloana1” conține valoarea „3”:

Pe lângă = (egal), există următorii operatori condiționali:

În plus, puteți utiliza condițiile BITWEEN și LIKE pentru a compara cu condiția WHERE, precum și combinații ale operatorilor AND și OR.

Ceea ce, tradus în rusă, înseamnă: selectați toate rândurile din tabelul table_name, unde valoarea coloanei de vârstă este mai mare sau egală cu 18, iar valoarea coloanei LastName este în intervalul alfabetic de la Ivanov la Sidorov inclusiv, sau valoarea coloanei Companie este Motorola.

Folosind o interogare INSERT pentru a insera date noi

Interogarea INSERT este folosită pentru creare nou rând de date. Pentru a actualiza datele existente sau câmpurile de rând goale, trebuie să utilizați o interogare UPDATE.

Exemplu de sintaxă a interogării INSERT:

INSERT INTO table_name (coloana1, coloana2, coloana3) VALORI ("data1", "data2", "data3");

Dacă urmează să inserați toate valorile în ordinea în care apar coloanele din tabel, puteți omite numele coloanelor, deși acest lucru este de preferat pentru lizibilitate. De asemenea, dacă enumerați coloane, nu trebuie să le enumerați în ordinea în care apar în baza de date, atâta timp cât valorile pe care le introduceți se potrivesc cu acea ordine. Nu ar trebui să enumerați coloanele care nu conțin informații.

Informațiile deja existente în baza de date sunt modificate într-un mod foarte similar.

Interogarea UPDATE și condiția WHERE

UPDATE este folosit pentru a modifica valorile existente sau pentru a elibera un câmp într-un rând, astfel încât noile valori trebuie să se potrivească cu tipul de date existent și să furnizeze valori acceptabile. Dacă nu doriți să modificați valorile în toate rândurile, atunci trebuie să utilizați clauza WHERE.

Puteți folosi WHERE pe orice coloană, inclusiv pe cea pe care doriți să o modificați. Acesta este utilizat atunci când este necesar să înlocuiți o anumită valoare cu alta.

Atenție! Interogarea DELETE șterge rânduri întregi

O interogare DELETE șterge complet un rând din baza de date. Dacă doriți să ștergeți un singur câmp, atunci trebuie să utilizați o solicitare UPDATE și să setați acest câmp la o valoare care va fi analogă cu NULL din programul dumneavoastră. Aveți grijă să limitați interogarea DELETE la o clauză WHERE, altfel puteți pierde întregul conținut al tabelului.

Odată ce un rând a fost șters din baza de date, acesta nu poate fi restaurat, așa că este indicat să aveți o coloană numită „IsActive”, sau ceva de genul, pe care o puteți schimba în null, ceea ce va indica faptul că vizualizarea datelor din acel rând este blocat.

Acum cunoașteți elementele de bază ale interogărilor SQL

SQL este un limbaj de bază de date și am acoperit cele mai importante și de bază comenzi utilizate în interogările de date. Există o mulțime de concepte de bază care nu au fost acoperite (SUM și COUNT, de exemplu), dar cele câteva comenzi pe care am reușit să le enumerăm mai sus ar trebui să vă încurajeze să deveniți activ și să aprofundați în minunatul limbaj de interogare numit SQL.

SQL yavl. instrument destinat pentru prelucrarea și citirea datelor conținute în calculator. DB. SQL este, în primul rând, logic informațional. limbaj, destinat pentru a descrie, modifica și prelua date stocate în baze de date relaționale. SQL este abrevierea pentru Limbajul de interogare structurat) . SQL este folosit pentru a organiza interacțiunea utilizatorului cu baza de date. De fapt, SQL funcționează doar cu baze de date relaționale tip . Se numește programul de calculator care gestionează baza de date Sistemul de gestionare a bazelor de date, sau SGBD . Dacă utilizatorul are nevoie citește datele din baza de date, le solicită din DBMS cu pom. SQL. SGBD procesează cererea, găsește datele necesare și le trimite utilizatorului. Se numește procesul de solicitare a datelor și obținere a unui rezultat cerere la baza de date: de aici și numele - limbaj de interogare structurat. În ciuda faptului că citirea datelor este încă una dintre cele mai importante. important Funcții SQL, acum acest limbaj este folosit pentru a implementa toate funcţionalitate, pisică. SGBD-ul oferă utilizatorului, și anume:

Organizarea datelor. SQL oferă utilizatorului posibilitatea de a schimba structura prezentării datelor, precum și de a stabili relații între elementele bazei de date.

Citirea datelor. SQL oferă unui utilizator sau aplicație capacitatea de a citi și utiliza datele conținute într-o bază de date.

Procesarea datelor. SQL oferă utilizatorului sau aplicației capacitatea de a... schimba baza de date, de ex. adăugați date noi la acesta, precum și ștergeți sau actualizați datele existente.

Controlul accesului. Cu asistent SQL poate limita capacitatea utilizatorului de a citi și modifica datele și le poate proteja de accesul neautorizat.

Partajarea date. SQL coordonează partajarea datelor între utilizatori și lucrătorii concurenți, astfel încât aceștia să nu interfereze unul cu celălalt.

Integritatea datelor. SQL vă permite să asigurați integritatea bazelor de date, protejându-le împotriva distrugerii din cauza modificărilor inconsecvente sau a defecțiunii sistemului.

Astfel, SQL este un limbaj suficient de puternic pentru a interacționa cu SGBD.

Avantajele SQL.

SQL este un limbaj ușor de înțeles și, în același timp, un instrument software versatil de gestionare a datelor.

Următoarele caracteristici au adus succesul limbajului SQL:

Independență față de SGBD specific;

Portabilitatea de la un sistem de calcul la altul;

Disponibilitatea standardelor;

Cadrul relațional;

Structură de nivel înalt;

Abilitatea de a efectua interogări interactive speciale:

Furnizare de acces software la baze de date;

Posibilitatea de prezentare a datelor diferite;

Completitudine ca limbaj conceput pentru a lucra cu baze de date;

Posibilitatea determinării dinamice a datelor;

Suport arhitectură client/server.

Toți factorii de mai sus sunt motivul pentru care SQL a devenit instrumentul standard pentru gestionarea datelor pe computerele personale.

37 Structuri de bază ale propozițiilor limbajului în interogări

Fiecare instrucțiune SQL este cerere sau accesul la baza de date, ceea ce duce la o modificare a bazei de date. În funcție de modificările care apar în baza de date, se disting următoarele tipuri de interogări:

Solicitări de creare sau modificare a obiectelor noi sau existente în baza de date (în acest caz, cererea descrie tipul și structura obiectului creat sau modificat);

Cereri de date;

Solicitări de adăugare de date noi (înregistrări)

Cereri de ștergere a datelor;

Apeluri către SGBD.

Orice cerere este un program scris în limbajul de interogare structurat SQL. De fapt, un program SQL este o expresie de interogare pentru un eșantion de date în limba engleză, scrisă într-o structură specifică, pe care SGBD-ul o convertește apoi în rezultatul necesar.

În majoritatea SGBD-urilor, propoziția se termină cu „;” iar SGBD nu procesează informații până când nu întâlnește „;”. Propozițiile sunt alcătuite din fraze și încep cu un cuvânt înregistrat. Fiecare frază are un nume.

Numirile unora operatori SQL de bază:

SELECTAȚI(selectați) – (selectați) datele din coloanele specificate și (dacă este necesar) efectuează transformarea acestora în conformitate cu expresiile specificate și (sau) funcțiile înainte de ieșire; DIN– indică tabelul din care au fost selectate câmpurile; UNDE– creează o condiție pentru selectarea datelor din înregistrări; COMANDA PENTRU– sortează înregistrările într-o ordine dată; A SE GRUPA CU– grupează înregistrările care se potrivesc la executarea interogărilor rezumative; DISTINCTROW– exclude înregistrările duplicate din setul de rezultate; TRANSFORMA– evaluează expresii în interogări încrucișate; PIVOT– Definește titlurile coloanelor din tabelul de interogări încrucișate.

Despre propunere SELECTAȚI. Toate solicitările pentru obținerea aproape orice cantitate de date de la unul sau mai multe. tabelele sunt realizate folosind o singură clauză SELECT. În general, rezultatul implementării unei clauze SELECT este un alt tabel. Operația SELECT poate fi aplicată din nou acestui nou tabel (de lucru), etc., de exemplu. astfel de operațiuni pot fi imbricate unele în altele. Este de interes istoric faptul că este posibilitatea de incl. o clauză SELECT în alta a fost motivația utilizării. adjectivul „structurat” în numele limbajului SQL. În desenele utilizate. simboluri: asterisc (*) pentru a indica „toate” – folosite. în sensul obișnuit pentru programare, adică „toate cazurile care îndeplinesc definiția”; (,) - Spaniolă pentru a separa elementele listei; () - înseamnă că construcțiile, concluzie. între paranteze, yavl. opțional ; linie dreaptă (|) – numerar. alegere dintre două sau mai multe posibilități etc.

36-37. Special - stilul limbajului SQL . Structuri de bază ale propozițiilor limbajului în interogări (a/c)

SQL - Limbajul de interogare structurat. Producția de informații - mai unificată. Acest lucru a condus la necesitatea creării unui limbaj standard care ar putea

SELECT în SQL (pentru un tabel): SELECTAȚI(selectați) câmpurile specificate

DIN(din) tabel specificat

UNDE(unde) o condiție specificată este adevărată

SELECTAȚI list_of_elements (câmpuri) pentru a fi selectat

FROM table_list (sau vizualizare)

]

Folosind calificativul AS

Acest calificator înlocuiește numele coloanei existente în tabelul rezultat cu cel specificat.

Funcții agregate

Funcțiile de agregare includ funcții pentru calcularea sumei (SUM), max (SUM) și min (MIN) a coloanelor de valori, medie aritmetică (AVG) și a numărului de rânduri care îndeplinesc o anumită condiție (COUNT).

SELECT count(*), sumă (buget), avg (buget),

min (buget), max (buget)

WHERE head_dept = 100

calculați: numărul de departamente care sunt subdiviziuni ale departamentului 100 (Marketing și vânzări), bugetele lor totale, medii, minime și maxime COUNT SUM MEDIA MIN MAX

5 3800000.00 760000.00 500000.00 1500000.00

Clauza FROM a comenzii SELECT

Clauza FROM listează toate obiectele (unul sau mai multe) din care sunt preluate datele. Fiecare tabel sau vedere la care se face referire în interogare trebuie să fie listat în clauza FROM.

Tipuri de predicate utilizate în clauza WHERE :

comparaţie folosind operatori relaţionali

Egal<>nu este egal!= nu este egal > mai mare decât< меньше

>= mai mare sau egal cu<= меньше или равно

ÎNTRE ÎN LIKE CONTINING ESTE NUL

Operații de comparație Dacă domeniile sunt definite în baza de date, atunci articolele comparate trebuie să aparțină aceluiași domeniu.

SELECTează prenume, prenume, nr_departament,

UNDE job_tara<>"STATELE UNITE ALE AMERICII"

ÎNTRE

Predicatul BETWEEN specifică intervalul de valori pentru care expresia evaluează drept adevărat. De asemenea, este permisă utilizarea construcției NOT BETWEEN.

UNDE salariu INTRE 20000 SI 30000

obțineți o listă cu angajații al căror salariu anual este mai mare de 20.000 și mai mic de 30.000 FIRST_NAME LAST_NAME SALARY

Ann Bennet 22935.00

Kelly Brown 27000,00

Este posibil ca valorile care definesc intervalele inferioare și superioare să nu fie valorile reale din baza de date. Și acest lucru este foarte convenabil - pentru că nu putem indica întotdeauna valorile exacte ale intervalelor!

SELECTează prenume, prenume, salariu

UNDE prenume ÎNTRE „Nel” ȘI „Osb”

obțineți o listă cu angajații ale căror nume de familie sunt între „Nel” și „Osb” FIRST_NAME LAST_NAME SALARY

Robert Nelson 105900.00

Carol Nordstrom 42742,50

Sue Anne O'Brien 31275.00

SELECTează prenume, prenume, data_închiriere

ÎN Predicatul IN testează dacă valoarea specificată care precede cuvântul cheie „IN” (de exemplu, o valoare de coloană sau o funcție a unei coloane) se află în lista specificată în paranteze. Dacă valoarea specificată care este testată este egală cu orice element din listă, atunci predicatul este evaluat la adevărat. De asemenea, este permisă utilizarea construcției NOT IN.

SELECTează prenume, prenume, cod_post

WHERE job_code IN ("VP", "Admin", "Finan")

CA Predicatul LIKE este folosit numai cu date de caractere. Verifică dacă valoarea caracterului dată se potrivește cu șirul cu masca specificată. Toate caracterele permise (inclusiv litere mari și mici), precum și caracterele speciale, sunt folosite ca mască:

% - înlocuiește orice număr de caractere (inclusiv 0),

Înlocuiește un singur caracter.

De asemenea, este permisă utilizarea constructului NOT LIKE.

SELECTează prenume, prenume

WHERE last_name LIKE „F%”

obțineți o listă cu angajații ale căror nume încep cu litera „F” FIRST_NAME LAST_NAME

Operatori logici Operatorii logici includ binecunoscuții operatori AND, OR, NOT, care vă permit să efectuați diverse operații logice: înmulțire logică (ȘI, „intersecția condițiilor”), adunare logică (OR, „uniunea condițiilor”), negație logică ( NU, „negarea condițiilor”). În exemplele noastre am folosit deja operatorul AND. Utilizarea acestor operatori vă permite să „personalizați” în mod flexibil condițiile de selectare a înregistrărilor.

Conexiune ( A TE ALATURA ) Operația de îmbinare este utilizată în SQL pentru a afișa informații asociate stocate în mai multe tabele într-o singură interogare. Conectarea se face de obicei folosind cheia primară a unui tabel și cheia externă a altui tabel - pentru fiecare pereche de tabele. Este foarte important să țineți cont de toate câmpurile cheii străine, altfel rezultatul va fi distorsionat. Câmpurile care trebuie unite pot (dar nu sunt obligatorii!) să fie prezente în lista de elemente selectabile. Clauza WHERE poate conține mai multe condiții de îmbinare. Condiția de îmbinare poate fi combinată și cu alte predicate din clauza WHERE.