Crearea de interogări SQL în nume de acces. Implementarea SQL în ACCESS Comparația Microsoft Access

Access DBMS utilizează două tipuri de interogări: QBE – interogare după eșantion și SQL(Structured Query Language) - limbaj structurat de interogare. Un exemplu de cerere este generat prin completarea unui formular de cerere special în fereastra „Query Builder”. SQL – interogările sunt create de programatori dintr-o secvență de SQL – instrucțiuni. SQL este generat, de regulă, de programatori pe un formular de interogare, care este deschis de comanda „Query Builder” din fila „Creation” și „SQL Mode” este selectat din meniul View. Limbajul SQL este conceput pentru a lucra cu date, de ex. pentru crearea, modificarea și gestionarea datelor în baze de date relaționale.

Trebuie remarcat faptul că există mai multe moduri de interogare SQL (interogări în mod ANSI-89 SQL și ANSI-92 SQL) care respectă standardele ANSI-89 SQL și ANSI-92 SQL.

Instrucțiunile conțin o descriere a setului de date în SQL. Instrucțiuni SQL constau din clauze (SELECT, FROM, WHERE etc.). promoțiiîn limbajul SQL constau din termeni (operatori sau comenzi, identificatori, constante etc.). Instrucțiunea începe cu o instrucțiune (una dintre comenzile SELECT, CREATE, INSERT, UPDATE, DELETE etc.) și se termină cu punct și virgulă. Instrucțiuni SQL de bază: SELECT, FROM și WHERE.

De exemplu, instrucțiunea SQL:
SELECT Students.StudentCode
DE LA Studenți;
constă din clauza „SELECT Students.StudentCode” și clauza „FROM Students”.

Clauza SELECT conține operator SELECT și identificator„Elevi.Codul elevului”. Aici numele complet al câmpului „StudentCode” este precedat de numele tabelului „Students” al bazei de date. SELECT - specifică câmpul care conține datele necesare. Clauza FROM constă dintr-o clauză FROM și identificatorul „Students”. FROM - definește un tabel care conține câmpurile specificate în clauza SELECT.

Trebuie remarcat faptul că atunci când creați o interogare în SQL, trebuie să luați în considerare sintaxa acesteia. În ciuda faptului că sintaxa limbajului SQL se bazează pe sintaxa limbii engleze, sintaxa versiunilor limbajului SQL poate diferi pentru diferite SGBD.

Există mai multe tipuri de interogări: selectarea, actualizarea, adăugarea și ștergerea înregistrărilor, interogare încrucișată, crearea și ștergerea tabelelor, alăturarea tabelelor etc. Cea mai comună este o cerere de eșantion. Interogările de selecție sunt folosite pentru a selecta informațiile conținute în tabelele de care utilizatorul are nevoie. Sunt create numai pentru tabelele înrudite.

Pentru a vizualiza interogări de interogare SQL în DBMS Access 2003 sau 2007, trebuie să executați comanda SQL View/Mode în fereastra activă pentru proiectarea unui exemplu de interogare (Fig. 1).


Orez. 1.

Să obținem o instrucțiune SQL (SELECT) pentru a eșantiona date din baza de date Access 2003 conform criteriului de performanță al elevilor „Grade=5” (Fig. 2).



Orez. 2.

După cum urmează din instrucțiunea SELECT (Fig. 1), aceasta descrie un set de date în limbaj SQL: SELECT - definește numele câmpurilor precedate de numele tabelelor care conțin datele; FROM - definește tabele și relațiile acestora prin câmpurile cheie ale tabelelor (pentru aceasta se folosește construcția INNER JOIN ... ON), pe baza cărora se selectează datele; WHREME - definește condițiile de selectare a câmpurilor; ORDER BY - determină modul în care se sortează în ordine crescătoare (în mod implicit se realizează ordine crescătoare) valorile câmpului „Nume” din tabelul „Studenți”.

După cum rezultă din instrucțiunile pentru preluarea datelor din baza de date, limbajul SQL descrie ceea ce trebuie obținut din baza de date, în timp ce execuția este încredințată SGBD, deoarece limbajul SQL nu are mijloace proprii de control al execuției programului.

Comparație între Microsoft Access SQL și ANSI SQL z. Microsoft Access SQL se conformează în primul rând cu standardul ANSI-89 (Nivel 1) z. Unele caracteristici ANSI SQL nu sunt utilizate în Microsoft Access SQL z. Microsoft Access SQL utilizează cuvinte rezervate și caracteristici care nu sunt acceptate de ANSI SQL

Sintaxă z extinsă. Access 2000 (MS Jet 4.0) include extensii care aduc limbajul mai aproape de standardul ANSI SQL-92 - modul este disponibil numai atunci când se utilizează furnizorul MS OLE DB pentru Jet

Pentru constructul Between se aplică reguli diferite. . . Și, care are următoarea sintaxă: expresie 1 Între valoarea 1 Și valoarea 2 În Microsoft Access SQL, valoarea 1 poate fi mai mare decât valoarea 2; în ANSI SQL, valoarea 1 trebuie să fie mai mică sau egală cu valoarea 2.

metacaractere z Microsoft Access SQL acceptă atât metacaracterele SQL ANSI, cât și metacaracterele când se utilizează operatorul Like Aceste caractere sunt utilizate în interogări și expresii pentru a include toate înregistrările, numele fișierelor sau alte elemente care conțin anumite caractere sau care îndeplinesc un anumit model.) Microsoft Access. Nu puteți utiliza metacaracterele ANSI și Microsoft Access în același timp. Se poate folosi un singur set de caractere și acestea nu pot fi amestecate.

Caracteristicile limbajului ANSI SQL nu sunt acceptate în Microsoft Access SQL z. Instrucțiunea TRANSFORM oferă suport pentru interogări încrucișate z (interogare încrucișată. O interogare care calculează suma, media, numărul de valori sau alte calcule statistice și apoi grupează rezultatele într-un tabel în două seturi de date, dintre care unul definește coloana titluri iar celălalt rândurile de titluri.).

Caracteristicile limbajului ANSI SQL nu sunt acceptate în Microsoft Access SQL z. Utilizați clauza LIMIT TO nn ROWS pentru a limita numărul de rânduri returnate de o interogare. z. Sunt furnizate funcții statistice SQL suplimentare, cum ar fi St. Dev și Var. P

Caracteristicile limbajului ANSI SQL nu sunt acceptate în Microsoft Access SQL z. Pentru a defini parametrii unei interogări (O interogare cu parametri. O interogare în care una sau mai multe valori care definesc condițiile de selecție sunt introduse în mod interactiv de către utilizator. O interogare cu parametri nu este un tip separat de interogare; este un extensia funcțională a interogărilor select.) se folosește declarația PARAMETRI.

Sintaxa comenzii SELECT [predicat] ( * | tabel. * | [tabel. ]câmp_1 [, [tabel. ]câmp_2 [, . . ]]) FROM expresia [, . . . ]

Argumente ale instrucțiunii SELECT Predicat Unul dintre următoarele predicate de selecție: ALL, DISTINCTROW sau TOP. Predicatele sunt folosite pentru a limita numărul de înregistrări returnate. Dacă acestea lipsesc, predicatul implicit este ALL.

Predica ALL, DISTINCTROW, TOP z. SELECT ]] FROM tabelul z. ALL - Selectează toate înregistrările care corespund condițiilor specificate în instrucțiunea SQL.

Predicat DISTINCT - exclude înregistrările care conțin valori duplicate în câmpurile selectate. Setul de date rezultat nu poate fi actualizat

Predicat DISTINCTROW - Omite datele bazate pe înregistrări duplicate întregi și nu pe câmpuri duplicate individuale. Predicatul DISTINCTROW este ignorat dacă interogarea conține doar un tabel sau toate câmpurile tuturor tabelelor.

DISTINCTROW z. SELECTARE angajat DISTINCTROW. nume, program. cod_articol z. DE LA angajat INNER JOIN program z. ON angajat. cod_angajat = program. Codul angajatilor;

DISTINCT SELECT ANGAJAT DISTINCT. Nume complet, program. item_code FROM EMPLOYEE INNER JOIN program ON ANGAJAT. Employee_id = program. Codul angajatilor;

Dacă utilizați un limbaj tabelar ca generator de interogări în SQL, atunci pentru a include DISTINCT într-o interogare, trebuie să selectați valoarea „da” pentru proprietatea de interogare „valori unice” și pentru a include DISTINCTROW într-o interogare, trebuie să selectați „ da” pentru proprietatea de interogare „înregistrări unice”.

Predicat TOP z. TOP n - Returnează numărul specificat de înregistrări care se află la începutul sau la sfârșitul intervalului descris de clauza ORDER BY.

Exemplu. Selectați cele mai numeroase 5 departamente SELECTARE TOP 5 departament. [Department_name_full], Count(employees. Employee_code) AS [Număr de angajați] FROM departament INNER JOIN angajați ON departament. Department_code = angajați. Cod_departament GROUP BY departament. [Department_name_full] ORDER BY Număr(angajați. Cod_angajat) DESC;

CU OPȚIUNEA OWNERACCESS Utilizat într-un mediu multi-utilizator cu un grup de lucru securizat pentru a acorda utilizatorului care execută permisiunile cererii care se potrivesc cu cele ale proprietarului solicitării.

Argumentele instrucțiunii SELECT câmp_1, câmp_2 sunt numele câmpurilor din care ar trebui selectate datele. Dacă includeți mai multe câmpuri, acestea vor fi preluate în ordinea specificată.

Argumentele instrucțiunii SELECT Alias_1, Alias_2 sunt nume care vor deveni antete de coloană în locul numelor originale de coloană din tabel.

Exemple de utilizare a unui alias pentru a specifica numele unui câmp calculat Exemplul 1 SELECT angajat. Nume complet, [salariu]*0. 5 Premiul AS de la angajat; Exemplul 2 SELECT Mediu(salariu angajat) AS Salariul_mediu FROM angajat;

Argumente ale instrucțiunii SELECT Externe. Baza. Date este numele bazei de date care conține tabelele specificate de argumentul expresie, dacă acestea nu se află în baza de date curentă.

Clauza FROM SELECT este o listă. Câmpuri FROM expresia z Expresie - o expresie care definește unul sau mai multe tabele din care sunt preluate datele. Această expresie poate fi numele unui singur tabel, numele unei interogări salvate sau rezultatul unei operații INNER JOIN, LEFT JOIN sau RIGHT JOIN.

Prelucrarea în comun a mai multor (3) tabele angajat SELECT. Nume complet, subiect. [denumirea scurtă a subiectului] FROM angajat INNER JOIN (subiect INNER JOIN [deținerea de obiecte] ON subiect. [Cod subiect] = [deținerea de obiecte]. [cod disciplină]) ON angajat. Cod = [posesia articolului]. [Codul angajatilor];

Între design. . . Și expresia 1 ÎNTRE expresia 2 ȘI expresia 3 z. În Microsoft Access SQL, expresia 2 poate fi mai mare decât expresia 3, dar în ANSI SQL nu poate.

Simboluri de tip Predicat Like Sunt folosite diferite simboluri de tipar cu predicatul Like. Caracter model SQL ANSI MS Access SQL z Orice caracter? _ (subliniere) z Orice grup de caractere * % z Lipsește orice caracter inclus în lista_caracterelor [lista_caracterelor] z Lipsește orice caracter neinclus în lista_caracterelor [!lista_caracterelor]

z. Ultimele două caracteristici sunt doar pentru Access 2000 z. În Access 2000, modul ANSI SQL-92 permite utilizarea caracterelor joker ANSI z. Nu puteți amesteca caractere într-o singură solicitare

GROUP BY clauza z. SELECTează lista. Câmpurile din tabelul WHERE condiție. Selecția z grupabilă. Câmpuri - numele câmpurilor (până la 10) care sunt utilizate pentru gruparea înregistrărilor. Ordinea numelor câmpurilor din argument este grupabilă. Câmpuri determină nivelul de grupare pentru fiecare dintre aceste câmpuri.

Clauza GROUP BY z Utilizați clauza WHERE pentru a exclude înregistrările din grupare și clauza HAVING pentru a aplica un filtru înregistrărilor după grupare. z Când se utilizează o clauză GROUP BY, toate câmpurile din lista de câmpuri a instrucțiunii SELECT trebuie fie să fie incluse în clauza GROUP BY, fie folosite ca argumente pentru o funcție de agregare SQL.

Exemplu. Departamente cu peste 5 angajați. SELECT angajat. [Cod departament], Număr(angajat. Nume complet) AS [Număr de angajați] FROM angajat GROUP BY angajat. [Cod departament] HAVING (((Număr(angajat. Nume complet))>5));

Sarcină Există tabele „firme”, „angajați” și „certificări”. Este necesar să se determine câți angajați atestați are fiecare companie (un angajat poate fi atestat conform mai multor PP).

instrucțiunea SELECT. . . INTO Sintaxa z. Creează o interogare pentru a crea un tabel. SELECTează câmpul_1[, câmpul_2[, . . . ]] ÎN nou. Tabel FROM sursă

Interogare Union (Exemplu 1) SELECT Titlu, Oraș FROM Furnizori UNION SELECT Titlu, Oraș FROM Clienți ORDER BY City;

Solicitare uniune (Exemplu 2) SELECT Titlu, Oraș FROM Furnizori UNION ALL SELECT Titlu, Oraș FROM Clienți; - UNION ALL se asigură că toate înregistrările sunt returnate, inclusiv duplicatele

Crearea unei subinterogări utilizând QBE Query Builder Dacă utilizați o subinterogare pentru a defini condiții pentru un câmp, introduceți o instrucțiune SELECT în celula rândului Condiție de selecție din coloana acelui câmp. Instrucțiunea SELECT trebuie inclusă între paranteze.

Instrucțiunea DELETE z O solicitare de ștergere șterge înregistrări întregi, nu doar conținutul câmpurilor specificate. Pentru a șterge date pentru un anumit câmp, creați o interogare de actualizare a înregistrărilor care înlocuiește valorile existente cu valori nule z O solicitare de ștergere fără condiții de căutare specificate va șterge toate înregistrările din tabel. Spre deosebire de comanda DROP, structura tabelului și toate proprietățile sunt păstrate

z. Dacă este specificată „Ștergere în cascadă”, atunci toate înregistrările z aferente vor fi șterse. Intrările șterse nu pot fi recuperate

Crearea unui tabel. Sintaxa comenzii CREATE TABLE table (campul 1 tip [(size)] [index1] [, câmpul 2 tip [(size)] [index2] [, . . ]] [, CONSTRAINT index_multiple_fields [, . . ]])

Crearea unui tabel. Sintaxa comenzii din Access este semnificativ diferită de standard: nu toate caracteristicile standardului SQL-92 sunt implementate z sunt incluse constructe noi z sintaxa este diferită

TEMPORARY Un tabel TEMPORARY este disponibil numai în sesiunea în care a fost creat tabelul. La sfârșitul acestei sesiuni, este șters automat. Tabelele temporare pot fi partajate de mai mulți utilizatori.

CU COMPRESIUNE z. Atributul WITH COMPRESSION este permis numai pentru tipurile de date CHARACTER și MEMO. z. Compensează impactul tranziției la formatul de caractere Unicode

Ajustarea structurii tabelului ALTER TABLE tabel (ADD (COLUMN tip câmp[(size)] | ALTER COLUMN tip câmp[(size)] | CONSTRAINT field_set_index) | DROP (COLUMN câmp I CONSTRAINT index_name) )

z Mărimea câmpului în caractere este setată numai pentru câmpurile cu tipuri de date TEXT și BINARY z ADD COLUMN - pentru a adăuga un câmp nou la tabel z ALTER COLUMN - pentru a schimba tipul de date al unui câmp existent z DROP COLUMN - pentru a șterge un câmp . z ADD CONSTRAINT - pentru a adăuga un index z DROP CONSTRAINT - pentru a elimina un index z Nu este posibil să adăugați sau să eliminați mai multe câmpuri sau indecși în același timp

Crearea unui index la crearea unui tabel CREATE TABLE table (campul 1 tip [(size)] [, câmpul 2 tip [(size)] [, …]] [, CONSTRAINT multifieldindex [, …]])

Crearea unui index. Sintaxa comenzii CREATE [ UNIQUE ] INDEX index ON tabel (câmp [, câmp , . . . ])

Crearea unui index. Sintaxa comenzii CREATE [ UNIQUE ] INDEX index ON tabel (câmp [, câmp , . . . ])

Crearea unui index z. DISALLOW NULL - dezactivează prezența valorilor Null în câmpurile indexate ale noilor înregistrări z. IGNORE NULL previne includerea în index a intrărilor care au valori Null în câmpurile z indexate. PRIMAR - atribuiți câmpuri indexate unei chei

Exemple de creare a indicilor Exemplu1. CREATE INDEX Nou. Index ON Angajații (Acasă. Telefon, Extensie); Exemplul 2. CREAȚI INDEX UNIC Cust. ID ON Clienți (Client. ID) WITH DISALLOW NULL;

Utilizarea ALTER TABLE pentru a crea un index ALTER TABLE tabel (ADD (COLUMN tip câmp[(size)] | ALTER COLUMN tip câmp[(size)] | CONSTRAINT field_set_index) | DROP (COLUMN câmp I CONSTRAINT index_name) )

Crearea vederilor. Sintaxa comenzii este instrucțiunea CREATE VIEW [(field_1[, field_2[, . . . . ]])] AS. Selectați

Modificarea structurii tabelului ALTER TABLE tabel (ADD (COLUMN tip câmp[(size)] | ALTER COLUMN tip câmp[(size)] | CONSTRAINT compus. Index) | DROP (COLUMN câmp I CONSTRAINT index nume) )

Eliminarea obiectelor DROP (tabel TABLE | INDEX index ON tabel | procedură PROCEDURE | vizualizare VIEW)

ALTER UTILIZATOR sau BAZĂ DE DATE z. ALTERARE PAROLA BAZEI DE DATE parolă nouă parolă veche z. ALTER USER user PASSWORD noua parolă veche

Sintaxă GRANT (privilegiu[, privilegiu, …]) ON (tabel TABLE | obiect OBJECT| container CONTAINER ) TO (nume autorizație[, nume autorizație, …])

Privilegi z SELECTARE z ȘTERGERE z INSERE z UPDATE z DROP z SELECTSECURITY z UPDATESECURITY z DBPASSWORD z UPDATEIDENTITY z CREATE z SELECTSCHEMA z UPDATEOWNER

z. Obiect – se poate referi la orice obiect care nu este un tabel, cum ar fi o interogare, o vizualizare z. Authorizationname – numele utilizatorului sau al grupului

ADD USER user[, user, …] TO group Adaugă utilizator(i) existent(i) la un grup existent. Utilizatorii vor avea toate drepturile atribuite grupului

DROP USER sau GROUP z. DROP USER user[, user, …] DROP USER elimină utilizatorul din grup, dar nu șterge utilizatorul z. DROP GROUP group[, group, …] DROP GROUP șterge un grup, dar nu afectează utilizatorii grupului; pur și simplu încetează să mai fie membri ai grupului

REVOKE – anularea restricțiilor specificate REVOKE (privilegiu[, privilegiu, ...]) ON (tabel TABLE | obiect OBJECT| container CONTAINTER) FROM (nume autorizație[, nume autorizație, ...])

Caracteristici suplimentare ale MS Access SQL z. Instrucțiunea TRANSFORM, concepută pentru a crea interogări încrucișate z Funcții suplimentare de grup, de exemplu, St. Dev și Var. P z Descriere PARAMETRI, destinată creării de interogări cu parametri

instrucțiunea SELECT. . . INTO SELECT câmpul 1[, câmpul 2[, . . . ]] INTO new_table FROM sursă


Comparație între Microsoft Access SQL și ANSI SQL Microsoft Access SQL este în principal ANSI-89 (Nivel 1) unele caracteristici ANSI SQL nu sunt utilizate în Microsoft Access SQL Microsoft Access SQL utilizează cuvinte rezervate și caracteristici neacceptate de ANSI SQL În Access 2000 (MS Jet) 4.0) au fost introduse extensii care aduc limbajul mai aproape de standardul ANSI SQL-92 - modul este disponibil numai atunci când se folosește MS OLE DB Provider pentru Jet


Sintaxa comenzii SELECT (Acces Microsoft) SELECT [ predicat ] ( * | tabel.* | [ tabel.] câmp_1 [, [ tabel.] câmp_2 [,...]]) FROM expresie [,...] Clauza FROM listă SELECT Fields FROM expression Expresia este o expresie care definește unul sau mai multe tabele din care sunt preluate datele. Această expresie poate fi numele unui singur tabel, numele unei interogări salvate sau rezultatul unei operații INNER JOIN, LEFT JOIN sau RIGHT JOIN. INNER JOIN,LEFT JOIN DREAPT JOIN.


Argumente ale instrucțiunii SELECT Un predicat (ALL, DISTINCT, DISTINCTROW sau TOP) este una dintre condițiile de selecție. Predicatele sunt folosite pentru a limita numărul de înregistrări returnate. Dacă acestea lipsesc, predicatul implicit este ALL (selectează toate înregistrările care corespund condițiilor specificate în instrucțiunile SQL DISTINCT - exclude înregistrările care conțin valori duplicate în câmpurile selectate). DISTINCTROW - Omite datele bazate pe înregistrări duplicate întregi, mai degrabă decât pe câmpuri duplicate individuale. Predicatul DISTINCTROW este ignorat dacă interogarea conține doar un tabel sau toate câmpurile tuturor tabelelor. TOP n - Returnează numărul specificat de înregistrări care se află la începutul sau la sfârșitul intervalului descris folosind clauza ORDER BY. SELECT ]] FROM tabelul celor mai numeroase 5 departamente: SELECT TOP 5 angajat.[Cod departament], Count(employee.full name) AS number_of_employees FROM angajat GROUP BY angajat.[codul departament] ORDER BY Count(employee.full name) DESC;


Argumente ale instrucțiunii SELECT Table - numele tabelului din care trebuie selectate înregistrările. CU OPȚIUNEA OWNERACCESS - utilizat într-un mediu multi-utilizator cu un grup de lucru securizat, pentru a acorda utilizatorului care lucrează cu cererea permisiunile corespunzătoare permisiunilor proprietarului cererii. câmp_1, câmp_2 - numele câmpurilor din care trebuie selectate datele. Dacă includeți mai multe câmpuri, acestea vor fi preluate în ordinea specificată. Alias_1, Alias_2 - nume care vor deveni antete de coloană în locul numelor originale de coloană din tabel. Expresie - numele unuia sau mai multor tabele care conțin datele care sunt selectate External Database - numele bazei de date care conține tabelele specificate de argumentul expresiei, dacă acestea nu se află în baza de date curentă. SELECT angajat.nume complet, [salariu]*0,5 AS Bonus FROM angajat; SELECTAȚI Mediu(angajat.salariu) AS Salariul_mediu FROM angajat;


Prelucrarea în comun a mai multor tabele SELECT angajat.Nume, subiect.[numele scurt al subiectului] FROM angajat INNER JOIN (subiect INNER JOIN [proprietatea articolelor] ON subiect.[Codul subiectului] = [proprietatea articolelor].[codul disciplinei] ) ON angajat.Cod = [deținerea articolului].[codul angajatului];




Între... Și expresia 1 ÎNTRE expresia 2 și expresia 3 (în Microsoft Access SQL, expresia 2 poate fi mai mare decât expresia 3, dar nu și în ANSI SQL). SELECT angajat.nume complet, angajat.salariu FROM angajat WHERE (((angajat.salariu) Între 1000 Și 2000)); Interogare: SELECT angajat.nume complet, angajat.salariu FROM angajat WHERE (((angajat.salariu) Între 2000 Și 1000)); nu generează o eroare și dă același răspuns SELECT angajat.nume complet, angajat.salariu FROM angajat WHERE (((angajat.salariu) 15000)); SELECTAȚI angajat.nume complet, angajat.salariu FROM angajat WHERE (((angajat.salariu) Nu între 1000 și 2000));


Caractere de tipar Cu predicatul Like sunt folosite diferite caractere de tipar. MS Access SQL ANSI SQL model caracter un caracter? _ (subliniere) grup de caractere * % un singur caracter inclus în lista_caracterelor [listă_caracterelor] lipsește un singur caracter neinclus în lista_caracterelor [! character_list] lipsă Ultimele două opțiuni sunt Access 2000 doar în modul ANSI SQL-92 permite utilizarea caracterelor metalice ANSI. Nu puteți amesteca caractere într-o singură solicitare SELECTE angajat.nume complet FROM angajat WHERE (((angajat.nume complet) Ca „D*”);


Clauza GROUP BY SELECT listă de câmpuri din tabelul WHERE Condiție de selecție în care grupate Câmpurile sunt numele câmpurilor (până la 10) care sunt utilizate pentru gruparea înregistrărilor. Ordinea numelor câmpurilor în argumentul Câmpuri grupate determină nivelul de grupare pentru fiecare dintre acele câmpuri. Utilizați clauza WHERE pentru a exclude înregistrările din grupare și clauza HAVING pentru a aplica un filtru înregistrărilor după grupare. HAVING Când se utilizează clauza GROUP BY, toate câmpurile din lista de câmpuri a instrucțiunii SELECT trebuie fie să fie incluse în clauza GROUP BY, fie folosite ca argumente pentru o funcție de agregare SQL. Departamente cu mai mult de 5 angajați: SELECTAȚI colegi de muncă[Codul departamentului], Count(numele complet al colegilor) AS [Numărul de angajați] FROM colegs GROUP BY co-workers[codul departamentului] HAVING (((Count( numele complet al colegilor))>5 )); 5));">




Interogare imbricată. Predicatul există. SELECT companie angajat, Count(angajat angajat) AS număr_certificat_angajat FROM angajat WHERE (((Există (SELECT DISTINCT companie angajat, angajat angajat FROM angajat INNER JOIN instanță ON angajat angajat = angajat angajat))False)) GROUP BY co-working company; Fals)) GROUP BY companie deținută în comun;"> Fals)) GROUP BY companie deținută în comun;"> Fals)) GROUP BY companie deținută în comun;" title="Interogare imbricată. Predicat Există. SELECT co -companie deținută, Count(colaborator) AS număr_certificat_collaborator FROM colaborator WHERE (((Există (SELECT DISTINCT colaborator, colaborator FROM colaborator INNER JOIN instance ON colaborator = instanță colaborator))False)) GROUP BY firma colaboratoare;"> title="Interogare imbricată. Predicatul există. SELECT companie angajat, Count(angajat angajat) AS număr_certificat_angajat FROM angajat WHERE (((Există (SELECT DISTINCT companie angajat, angajat angajat FROM angajat INNER JOIN instanță ON angajat angajat = angajat angajat))False)) GROUP BY co-working company;"> !}








Crearea unei subinterogări utilizând QBE Query Builder Dacă utilizați o subinterogare pentru a defini condiții pentru un câmp, introduceți o instrucțiune SELECT în celula rândului Condiție de selecție din coloana acelui câmp. Instrucțiunea SELECT trebuie inclusă între paranteze.








Ștergerea intrărilor. Interogare SQL (generată) DELETE DISTINCTROW student.nume complet FROM student WHERE (((student.nume complet)="Burlak G. N.");


Declarație DELETE O solicitare de ștergere șterge înregistrări întregi, nu doar conținutul câmpurilor specificate. Pentru a șterge datele pentru un anumit câmp, creați o interogare de actualizare a înregistrărilor care înlocuiește valorile existente cu valori nule. O solicitare de ștergere fără condiții de căutare specificate va șterge toate înregistrările din tabel. Spre deosebire de comanda DROP, structura tabelului și toate proprietățile sunt păstrate


Ștergerea intrărilor. Interogare SQL Interogare: DELETE * FROM student WHERE student.Nume complet="Burlak G. N."; dă un rezultat similar.



















35





41



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 este destinat programelor 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 ușurează corectarea interogărilor care returnează rezultate incorecte.

Acesta este un articol dintr-o serie de articole despre limbajul SQL pentru 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 conceput pentru a lucra cu seturi de fapte și relațiile 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 comitetele de standarde precum ISO și ANSI.

Seturile de date sunt descrise în SQL pentru a ajuta la răspunsul la întrebări. Când utilizați SQL, trebuie să utilizați sintaxa corectă. Sintaxa este un set de reguli care permit combinarea corectă a elementelor 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 pentru persoanele 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 DDL. DDL nu este acoperit în acest articol. Pentru mai multe informații, consultați Crearea sau 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 trebuie preluat din baza de date, inclusiv următoarele:

    tabele care conțin date;

    conexiuni între date din diferite surse;

    câmpuri sau calcule 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.

Instrucțiuni 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. Sunt necesare unele oferte. Tabelul de mai jos prezintă instrucțiunile SQL cele mai frecvent utilizate.

Declarație SQL

Descriere

Obligatoriu

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

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

Definește condițiile de selecție a câmpului pe care trebuie să le îndeplinească toate înregistrările incluse în rezultate.

Determină ordinea de sortare a rezultatelor.

Într-o instrucțiune SQL care conține funcții de agregare, specifică câmpurile pentru care nu este calculată o valoare rezumativă în clauza SELECT.

Doar dacă astfel de câmpuri sunt prezente

O instrucțiune SQL care conține funcții de agregare definește condițiile care se aplică câmpurilor pentru care se calculează o valoare rezumativă în clauza SELECT.

termeni SQL

Fiecare propoziție SQL constă din termeni care pot fi comparați cu părți de vorbire. Tabelul de mai jos prezintă tipurile de termeni SQL.

Termenul SQL

Parte comparabilă de vorbire

Definiție

Exemplu

identificator

substantiv

Un nume folosit pentru a identifica un obiect de bază de date, cum ar fi un nume de 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.

>= Produse.[Preț]

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

Formatul general al instrucțiunilor SQL este:

SELECTează câmpul_1
DIN tabelul_1
UNDE criteriul_1
;

Note:

    Accesul nu respectă întreruperile de linie în instrucțiunile SQL. În ciuda acestui fapt, 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 la sfârșitul ultimei propoziții sau pe o linie separată la sfârșitul instrucțiunii SQL.

Exemplu în Access

Exemplul de mai jos arată cum ar putea arăta o instrucțiune SQL pentru o interogare de selectare simplă în Access.

1. Clauza SELECT

2. clauza FROM

3. clauza WHERE

Să ne uităm la 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 instrucțiune (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 dreptunghiulare.

Clauza SELECT nu necesită să specificați tabelele care conțin câmpurile și nu puteți specifica condițiile 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 o instrucțiune (FROM) urmată de un identificator (Contacte).

Clauza FROM nu specifică câmpurile de selectat.

clauza WHERE

WHERE City="Seattle"

Aceasta este clauza WHERE. Conține o declarație (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 oferte, consultați următoarele articole:

Sortarea rezultatelor: ORDER BY

La fel ca Microsoft Excel, puteți sorta rezultatele interogărilor într-un tabel în Access. Folosind clauza ORDER BY, puteți specifica și modul în care sunt sortate rezultatele atunci când interogarea este executată. 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 clauza ORDER BY.

Lucrul cu date rezumative: clauze GROUP BY și HAVING

Uneori este nevoie să lucrați cu date rezumative, cum ar fi vânzările totale pentru luna sau cele mai scumpe articole din stoc. Pentru a face acest lucru, clauza SELECT aplică o funcție de agregare câmpului. De exemplu, dacă ar trebui să rulați o interogare pentru a obține 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 agregate disponibile, consultați Funcții statistice SQL.

Specificarea câmpurilor care nu sunt utilizate într-o funcție de agregare: 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 cărora nu se aplică funcția de agregare. Dacă funcțiile de agregare se aplică tuturor câmpurilor din interogare, 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. Clauza GROUP BY listează câmpurile în aceeași ordine ca și clauza SELECT.

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

GRUP DUPĂ Companie

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

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

Dacă trebuie să specificați condiții pentru a limita rezultatele, dar câmpul în care doriți să le aplicați este utilizat într-o funcție de agregare, nu puteți utiliza o clauză WHERE. Ar trebui folosită î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ă funcția AVG (care calculează media) este aplicată primului câmp din clauza 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 selecție acestui câmp în clauza WHERE. În schimb, condiția ar trebui plasată în clauza HAVING. De exemplu, dacă doriți ca interogarea dvs. să returneze rânduri numai dacă o companie are mai multe adrese de e-mail, puteți utiliza următoarea clauză HAVING:

AVÂND COUNT()>1

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

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

Combinarea rezultatelor interogării: operator UNION

Operatorul UNION este folosit pentru a vizualiza simultan toate datele returnate de mai multe interogări de selecție similare ca un set combinat.

Operatorul UNION vă permite să combinați două instrucțiuni SELECT într-una singură. Instrucțiunile SELECT care sunt î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 se execută o interogare, datele din fiecare set de câmpuri care se potrivesc sunt combinate într-un singur câmp de ieșire, astfel încât rezultatul interogării are tot atâtea câmpuri câte fiecare instrucțiune SELECT individuală.

Notă:În interogările de conectare, 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 tabelele Produse și Servicii oferă diferite tipuri de garanții, informațiile de bază sunt aceleași (indiferent dacă produsele sau serviciile individuale sunt garantate). Puteți utiliza următoarea interogare de alăturare pentru a uni 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

Articolele anterioare au discutat problemele. Este luată în considerare tehnologia de creare a structurii tabelelor bazei de date „sql_training_st.mdb” pe baza interogărilor SQL. În plus, folosind interogări SQL, au fost completate tabelele ACCESS DBMS „sql_training_st.mdb”.

Se știe că în bazele de date relaționale, limbajul SQL este conceput pentru a manipula datele, a defini structura bazei de date și a componentelor acesteia, a controla accesul utilizatorilor la baza de date și a gestiona tranzacțiile sau a gestiona modificările din baza de date.

Limbajul SQL este format din patru grupuri:

  • limbaj de manipulare a datelor DML;
  • Limbajul de definire a datelor DDL;
  • limbaj de management al datelor DCL;
  • Limbajul de control al tranzacțiilor TCL.

Grupul DML include patru tipuri principale de interogări SQL:

  • INSERT - conceput pentru a adăuga una sau mai multe înregistrări la sfârșitul tabelului;
  • UPDATE - conceput pentru a modifica înregistrările existente în coloanele tabelului sau pentru a modifica datele din tabel;
  • DELETE - conceput pentru a șterge înregistrările din tabel;
  • SELECT - conceput pentru a selecta date din tabele.

Primele trei tipuri de interogări SQL (INSERT, UPDATE, DELETE), care se referă la interogări corective la baza de date, au fost discutate în pagină.

În acest articol ne vom uita la interogări pentru preluarea datelor din tabelele bazei de date Access.

Pentru a prelua informațiile stocate într-o bază de date Access 2003 sau 2007, puteți utiliza o interogare SELECT pentru a selecta date din tabele.

Să compunem următoarea interogare SQL (instrucțiune SQL) pentru eșantionare, selectați modul SQL executând comanda View/SQL Mode. Introduceți următoarea instrucțiune SQL de la tastatură:

SELECTAȚI *
DE LA Studenți;

Această declarație constă din două clauze „SELECT *” și „FROM Students”. Prima clauză conține o instrucțiune SELECT și un identificator * ("identificator *" înseamnă listarea tuturor coloanelor tabelului). A doua clauză conține instrucțiunea FROM și identificatorul „Students”.

FROM - Definește tabelul Students, care conține câmpurile specificate în clauza SELECT. Trebuie remarcat faptul că o interogare de selecție conține întotdeauna două instrucțiuni: SELECT și FROM. În funcție de condițiile de selecție, în cererea de selecție pot fi prezenți și alți operatori. Figura 1 prezintă o captură de ecran a unei cereri de preluare a datelor.


Orez. 1. Interogare SQL SELECT pentru a selecta datele

În acest exemplu, un eșantion de date este generat din toate coloanele din tabelul Studenți.

Salvați cererea cu numele „Students-query1”. Ca urmare a executării comenzii „Salvare”, un obiect va apărea în „Zona de navigare” - „Solicitări: Students-request1”.

După salvarea cererii de selecție, trebuie să executați această solicitare făcând clic pe pictograma „Run”. Rezultatele comenzii „Run” sunt prezentate în Fig. 2.



Orez. 2. Selectarea datelor din toate coloanele din tabelul Studenți