Atunci când doriți să regăsiți date dintr-o bază de date, solicitați datele utilizând Limbaj de interogare structurat sau SQL. SQL este o limbă de computer care se aseamănă foarte mult cu limba engleză, dar pe care programele bazei de date o înțeleg. Fiecare interogare pe care o rulați utilizează SQL în culise.
Înțelegerea modului în care funcționează SQL vă poate ajuta să creați interogări mai bune și vă poate ajuta să înțelegeți mai ușor cum să remediați o interogare care nu returnează rezultatele dorite.
Acesta este un articol dintr-un set de articole despre Access SQL. Acest articol descrie utilizarea de bază a SQL pentru a selecta date și utilizează exemple pentru a ilustra sintaxa SQL.
În acest articol
Ce este SQL?
SQL este o limbă de computer pentru lucrul cu seturi de fapte și relațiile dintre ele. Programele de baze de date relaționale, cum ar fi Microsoft Office Access, utilizează SQL pentru a lucra cu date. Spre deosebire de multe limbi de computer, SQL nu este greu de citit și de înțeles, chiar și pentru un novice. La fel ca multe limbi de computer, SQL este un standard internațional care este recunoscut de organismele de standarde, cum ar fi ISO și ANSI.
Utilizați SQL pentru a descrie seturi de date care vă pot ajuta să răspundeți la întrebări. Când utilizați SQL, trebuie să utilizați sintaxa corectă. Sintaxa este setul de reguli prin care elementele unei limbi sunt combinate corect. Sintaxa SQL se bazează pe sintaxa în limba engleză și utilizează multe dintre elementele ca sintaxa Visual Basic for Applications (VBA).
De exemplu, o instrucțiune SQL simplă care regăsește o listă de nume de familie pentru persoanele de contact al căror prenume este Maria poate semăna cu aceasta:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Notă: SQL nu se utilizează doar pentru manipularea datelor, ci și pentru crearea și modificarea proiectării obiectelor bazei de date, cum ar fi tabelele. Partea sql care este utilizată pentru crearea și modificarea obiectelor bazei de date se numește DDL (data-definition language). Acest subiect nu acoperă DDL. Pentru mai multe informații, consultați articolul Crearea sau modificarea tabelelor sau indexurilor utilizând o interogare de definiție date.
Instrucțiuni SELECT
Pentru a descrie un set de date utilizând SQL, scrieți o instrucțiune SELECT. O instrucțiune SELECT conține o descriere completă a unui set de date pe care doriți să îl obțineți dintr-o bază de date. Printre acestea se numără următoarele:
-
Ce tabele conțin datele.
-
Cum sunt corelate datele din surse diferite.
-
Câmpurile sau calculele care vor produce datele.
-
Criteriile pe care datele trebuie să le potrivească pentru a fi incluse.
-
Dacă și cum se sortează rezultatele.
Clauze SQL
La fel ca o propoziție, o instrucțiune SQL are clauze. Fiecare clauză efectuează o funcție pentru instrucțiunea SQL. Unele clauze sunt necesare într-o instrucțiune SELECT. Următorul tabel listează cele mai comune clauze SQL.
Clauza SQL |
Ce face |
Obligatoriu |
SELECT |
Liste câmpurile care conțin date de interes. |
Da |
FROM |
Liste tabelele care conțin câmpurile listate în clauza SELECT. |
Da |
WHERE |
Specifică criteriile de câmp care trebuie îndeplinite de fiecare înregistrare pentru a fi incluse în rezultate. |
Nu |
ORDONARE DUPĂ |
Specifică modul de sortare a rezultatelor. |
Nu |
GROUP BY |
Într-o instrucțiune SQL care conține funcții agregate, listează câmpurile care nu sunt rezumate în clauza SELECT. |
Numai dacă există astfel de câmpuri |
HAVING |
Într-o instrucțiune SQL care conține funcții agregate, specifică condițiile care se aplică câmpurilor care sunt rezumate în instrucțiunea SELECT. |
Nu |
Termeni SQL
Fiecare clauză SQL este compusă din termeni , comparabili cu părțile de vorbire. Următorul tabel listează tipurile de termeni SQL.
Termen SQL |
Parte comparabilă a vorbirii |
Definiție |
Exemplu |
Identificator |
Substantiv |
Un nume pe care îl utilizați pentru a identifica un obiect bază de date, cum ar fi numele unui câmp. |
Clienţii noştri. [Număr de telefon] |
operator |
verb sau adverb |
Un cuvânt cheie care reprezintă o acțiune sau modifică o acțiune. |
AS |
constantă |
Substantiv |
Este o valoare care nu se modifică, cum ar fi un număr sau NULL. |
42 |
expresie |
Adjectiv |
O combinație de identificatori, operatori, constante și funcții care se evaluează la o singură valoare. |
>= Produse. [Preț unitar] |
Clauze SQL de bază: SELECT, FROM și WHERE
O instrucțiune SQL ia forma generală:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Note:
-
Access ignoră sfârșiturile de linie dintr-o instrucțiune SQL. Totuși, luați în considerare utilizarea unei linii pentru fiecare clauză pentru a îmbunătăți lizibilitatea instrucțiunilor SQL pentru dvs. și pentru alte persoane.
-
Fiecare instrucțiune SELECT se termină cu punct și virgulă (;). Semnul punct și virgulă poate apărea la sfârșitul ultimei clauze sau pe o linie singură la sfârșitul instrucțiunii SQL.
Un exemplu în Access
Următoarele ilustrează cum poate arăta o instrucțiune SQL pentru o interogare de selectare simplă în Access:
1. Clauza SELECT
2. Clauza FROM
3. Clauza WHERE
Acest exemplu de instrucțiune SQL spune "Selectați datele stocate în câmpurile denumite Adresă de e-mail și Firmă din tabelul denumit Persoane de contact, mai exact acele înregistrări în care valoarea câmpului Localitate este Seattle".
Să ne uităm la exemplu, câte o clauză odată, pentru a vedea cum funcționează sintaxa SQL.
Clauza SELECT
SELECT [E-mail Address], Company
Aceasta este clauza SELECT. Aceasta constă într-un operator (SELECT), urmat de doi identificatori ([Adresă de e-mail] și Firmă).
Dacă un identificator conține spații sau caractere speciale (cum ar fi "Adresă de e-mail"), acesta trebuie să fie încadrat între paranteze drepte.
O clauză SELECT nu trebuie să specifice ce tabele conțin câmpurile și nu poate specifica condițiile care trebuie îndeplinite de datele de inclus.
Clauza SELECT apare întotdeauna în fața clauzei FROM într-o instrucțiune SELECT.
Clauza FROM
FROM Contacts
Aceasta este clauza FROM. Aceasta constă într-un operator (FROM), urmat de un identificator (Persoane de contact).
O clauză FROM nu listează câmpurile de selectat.
Clauza WHERE
WHERE City="Seattle"
Aceasta este clauza WHERE. Aceasta constă într-un operator (WHERE), urmat de o expresie (City="Seattle").
Notă: Spre deosebire de clauzele SELECT și FROM, clauza WHERE nu este un element obligatoriu al unei instrucțiuni SELECT.
Puteți realiza multe dintre acțiunile pe care SQL vă permite să le efectuați utilizând clauzele SELECT, FROM și WHERE. Mai multe informații despre modul în care utilizați aceste clauze sunt prezentate în aceste articole suplimentare:
Sortarea rezultatelor: ORDONARE DUPĂ
La fel ca Microsoft Excel, Access vă permite să sortați rezultatele interogării într-o foaie de date. De asemenea, puteți specifica în interogare modul în care doriți să sortați rezultatele atunci când rulează interogarea, utilizând o clauză ORDER BY. Dacă utilizați o clauză ORDER BY, aceasta este ultima clauză din instrucțiunea SQL.
O clauză ORDER BY conține o listă a câmpurilor pe care doriți să le utilizați pentru sortare, în aceeași ordine în care doriți să aplicați operațiunile de sortare.
De exemplu, să presupunem că doriți ca rezultatele să fie sortate mai întâi după valoarea câmpului Firmă în ordine descendentă și, dacă există înregistrări cu aceeași valoare pentru Firmă, sortate în continuare după valorile din câmpul Adresă de e-mail, în ordine ascendentă. Clauza ORDER BY ar semăna cu următoarea:
ORDER BY Company DESC, [E-mail Address]
Notă: În mod implicit, Access sortează valorile în ordine ascendentă (de la A la Z, de la cel mai mic la cel mai mare). Utilizați în schimb cuvântul cheie DESC pentru a sorta valorile în ordine descendentă.
Pentru mai multe informații despre clauza ORDER BY, consultați subiectul Clauza ORDER BY.
Lucrul cu date rezumate: GROUP BY și HAVING
Uneori, doriți să lucrați cu date rezumate, cum ar fi vânzările totale dintr-o lună sau cu cele mai scumpe articole dintr-un inventar. Pentru a face acest lucru, aplicați o funcție agregată la un câmp din clauza SELECT. De exemplu, dacă doriți ca interogarea să afișeze numărul de adrese de e-mail listate pentru fiecare firmă, clauza SELECT poate arăta astfel:
SELECT COUNT([E-mail Address]), Company
Funcțiile agregate pe care le puteți utiliza depind de tipul de date care se află în câmpul sau expresia pe care doriți să o utilizați. Pentru mai multe informații despre funcțiile agregate disponibile, consultați articolul Funcții agregate SQL.
Specificarea câmpurilor care nu sunt utilizate într-o funcție agregată: clauza GROUP BY
Atunci când utilizați funcții agregate, de obicei trebuie să creați și o clauză GROUP BY. O clauză GROUP BY listează toate câmpurile la care nu aplicați o funcție agregată. Dacă aplicați funcții agregate la toate câmpurile dintr-o interogare, nu trebuie să creați clauza GROUP BY.
O clauză GROUP BY urmează imediat clauza WHERE sau clauza FROM, dacă nu există nicio clauză WHERE. O clauză GROUP BY listează câmpurile așa cum apar în clauza SELECT.
De exemplu, continuând exemplul anterior, dacă clauza SELECT aplică o funcție agregată la [Adresă de e-mail] dar nu la Firmă, clauza GROUP BY ar semăna cu următoarea:
GROUP BY Company
Pentru mai multe informații despre clauza GROUP BY, consultați subiectul Clauza GROUP BY.
Limitarea valorilor agregate utilizând criterii de grup: clauza HAVING
Dacă doriți să utilizați criterii pentru a limita rezultatele, dar câmpul la care doriți să aplicați criterii este utilizat într-o funcție agregată, nu puteți utiliza o clauză WHERE. În schimb, utilizați o clauză HAVING. O clauză HAVING funcționează ca o clauză WHERE, dar este utilizată pentru date agregate.
De exemplu, să presupunem că utilizați funcția AVG (care calculează o valoare medie) cu primul câmp din clauza SELECT:
SELECT COUNT([E-mail Address]), Company
Dacă doriți ca interogarea să restricționeze rezultatele pe baza valorii acelei funcții COUNT, nu puteți utiliza un criteriu pentru acel câmp în clauza WHERE. În schimb, puneți criteriile într-o clauză HAVING. De exemplu, dacă doriți ca interogarea să returneze rânduri doar dacă există mai multe adrese de e-mail asociate cu firma, clauza HAVING poate semăna cu următoarea:
HAVING COUNT([E-mail Address])>1
Notă: O interogare poate avea o clauză WHERE și o clauză HAVING- criteriile pentru câmpurile care nu sunt utilizate într-o funcție agregată intră în clauza WHERE, iar criteriile pentru câmpurile care sunt utilizate cu funcții agregate intră în clauza HAVING.
Pentru mai multe informații despre clauza HAVING, consultați subiectul Clauza HAVING.
Combinarea rezultatelor interogării: UNION
Atunci când doriți să revizuiți toate datele returnate de mai multe interogări de selectare similare împreună, ca set combinat, utilizați operatorul UNION.
Operatorul UNION vă permite să combinați două instrucțiuni SELECT într-una singură. Instrucțiunile SELECT pe care le combinați trebuie să aibă același număr de câmpuri de ieșire, în aceeași ordine și cu tipuri de date identice sau compatibile. Când rulați interogarea, datele din fiecare set de câmpuri corespondente sunt combinate într-un singur câmp de ieșire, astfel încât rezultatul interogării să aibă același număr de câmpuri ca fiecare dintre instrucțiunile de selectare.
Notă: În scopul unei interogări de uniune, tipurile de date Număr și Text sunt compatibile.
Atunci când utilizați operatorul UNION, puteți specifica și dacă rezultatele interogării trebuie să includă rânduri dublate, dacă există, utilizând cuvântul cheie ALL.
Sintaxa SQL de bază pentru o interogare de uniune care combină două instrucțiuni SELECT este următoarea:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
De exemplu, să presupunem că aveți un tabel denumit Produse și un alt tabel denumit Servicii. Ambele tabele au câmpuri care conțin numele produsului sau serviciului, prețul, garanția sau disponibilitatea garanției și dacă oferiți produsul sau serviciul în mod exclusiv. Deși tabelul Produse stochează informații despre garanție, iar tabelul Servicii stochează informații despre garanție, informațiile de bază sunt aceleași (indiferent dacă un anumit produs sau serviciu include o promisiune de calitate). Puteți utiliza o interogare de uniune, cum ar fi următoarea, pentru a combina cele patru câmpuri din cele două tabele:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
Pentru mai multe informații despre combinarea instrucțiunilor SELECT utilizând operatorul UNION, consultați Combinarea rezultatelor mai multor interogări de selectare utilizând o interogare de uniune.