Tutorial SQL ilustrat pentru începători. Instrucțiunea de selecție a limbajului SQL. Precum și alte lucrări care te-ar putea interesa

Introducere

SQL este un limbaj interogări structurate(Structured Query Language) la bazele de date relaționale. Istoria SQL este strâns legată de istoria dezvoltării baze de date relaționale date. În 1974-1975, a fost creat primul prototip al unui SGBD relațional. Pe lângă dezvoltarea DBMS în sine, ca parte a proiectului System/R, IBM a lucrat la crearea unui limbaj de interogare a bazei de date. Primul limbaj de interogare a fost numit SEQUEL -- Structured English Query Language. A doua implementare a proiectului System/R a fost instalată pe computerele mai multor clienți IBM în scopul operațiunii de probă în 1978-1979. În această implementare, limbajul de interogare era deja numit SQL, dar puteți auzi în continuare numele vechi al acestei limbi de la utilizatori.

În 1982, IBM a început să furnizeze piața produs comercial SQL/Data System, iar în 1983 a anunțat crearea unei versiuni de SQL/Data System pentru sistem de operare VM/CMS. În 1983, IBM a lansat un nou SGBD relațional - Baza de date 2 (DB2). Datorită influenței IBM pe piață sisteme de calcul SQL DB2 a devenit de facto limbajul standard al bazei de date.

În a doua jumătate a anilor optzeci, productivitatea SGBD-urilor relaționale a crescut brusc și s-au pus mari speranțe în dezvoltarea tehnologiilor relaționale. În special, au apărut noi versiuni ale SGBD-urilor Ingress și Oracle cu o productivitate de două până la trei ori mai mare decât cea a Versiuni anterioare. Creșterea productivității DBMS a fost facilitată și de o creștere a vitezei generale a computerelor.

Publicarea standardului SQL (ANSI/ISO) în 1986 a stabilit oficial SQL ca limbaj standard SGBD relațional. Odată cu apariția mai puternic calculatoare personaleși combinându-le în rețele locale era nevoie de noi SGBD. Furnizorii de astfel de SGBD-uri au început din nou să se concentreze pe tehnologiile SQL. În cele din urmă, SQL a devenit o parte cheie a arhitecturii client/server.

Inițial, SQL-ul IBM avea o sintaxă simplă, dar de-a lungul anilor, producătorii softwareîn domeniul sistemelor de management al bazelor de date au adăugat noi capabilități implementărilor lor, dintre care multe au devenit parte a standardelor ANSI SQL. Versiunea ANSI a SQL a fost adoptată de Organizația Internațională de Standardizare (ISO), o divizie a Națiunilor Unite cu sediul la Geneva și de Comisia Electrotehnică Internațională (IEC) ca produs ISO/IEC9075:1992 sau limbajul de bază de date SQL (SQL- 92). Standard separat ANSI X.3.168-1989 definește limbajul de bază de date încorporat SQL (SQL-89). SGBD-urile moderne acceptă SQL-89 și multe completări de la SQL-92.

În plus, majoritatea SGBD-urilor au propriile lor cuvinte cheie SQL pentru a crea dialecte SQL proprietare, cum ar fi Transact-SQL (servere SQL Server) sau SQL Jet.

Vom folosi SQL Jet și Transact-SQL, fără a ne concentra asupra diferențelor lor față de ANSI SQL-92.

Rețineți că denumirea istorică SQL nu reflectă cu acuratețe esența acestui limbaj, deoarece a fost de mult timp destinat nu numai pentru construirea de interogări (dacă, desigur, prin „interogare” înțelegem doar preluarea informațiilor dintr-o bază de date). Acum SQL vă permite să implementați toate funcțiile unui SGBD: organizarea datelor, preluarea informațiilor, modificarea datelor, controlul accesului, partajarea date, asigurând integritatea datelor.

Tipuri de comenzi SQL

tabel de interogări baze de date

Există șase tipuri de comenzi de bază în ANSI SQL:

Comenzile limbajului de definire a datelor (DDL) vă permit să creați tabele noi în baza de date, să adăugați indecși etc.; Principalele comenzi ale limbajului de definire a datelor sunt:

Comenzile limbajului de manipulare a datelor (DML) sunt folosite pentru a adăuga, ajusta și șterge rânduri din tabele și includ următoarele comenzi:

Comanda limbajului de interogare a datelor (DQL) (o singură comandă) este utilizată pentru a prelua date din tabele și pentru a determina forma în care trebuie prezentate acele date:

Comenzile limbajului de control al datelor (DCL) controlează accesul utilizatorilor individuali și al grupurilor de utilizatori la obiectele bazei de date prin permisiunile acordate și revocate de comenzi

Comenzile limbajului de procesare a tranzacțiilor (TPL) actualizează toate liniile utilizate într-o instrucțiune DML și includ următoarele comenzi

ÎNCEPE TRANZACȚIA

Începeți tranzacția

TRANZACȚIE COMIT

Tranzacție finalizată

SALVAȚI TRANZACȚIA

Creați un punct de salvare în interiorul unei tranzacții

Comenzile limbajului de control al cursorului (CCL) efectuează operații pe rânduri individuale ale unuia sau mai multor tabele și includ comenzile DECLARE CURSOR, FETCH INTO și UPDATE WHERE CURRENT.

Creatorii DBMS, în general, nu sunt obligați să accepte toate comenzile SQL-92 și este sigur să spunem că, în practică, nu există un singur DBMS comercial care să implementeze toate comenzile SQL-92. În special, SQL Jet nu acceptă niciun cuvânt rezervat pentru comenzile DCL sau CCL.

SQL în MS ACCESS

În MS ACCESS SQL este folosit în primul rând pentru executarea de interogări, deși este foarte util și pentru ștergerea, adăugarea și actualizarea înregistrărilor bazei de date. Folosind interogări SQL, puteți selecta numai înregistrările necesare din tabelele bazei de date. În același timp, putem accesa nu doar un tabel, ci o selecție complexă de tabele sau seturi de date interconectate.

Interogările SQL pot fi utilizate și în aplicațiile care utilizează modele de obiecte DAO, RDO sau ADO. De asemenea, SQL este ca mod standard managementul bazei de date este implementat în multe SGBD-uri, inclusiv Microsoft Accessși SQL Server.

instrucțiunea SELECT

Pentru a lucra cu baze de date, Microsoft Access folosește un limbaj de interogare care include o singură instrucțiune SELECT. Să ne uităm la câteva probleme legate de utilizarea sa. Sintaxă (incompletă) Instrucțiuni SELECTîn SQL Jet următoarele:

SELECTAȚI (* | tabel.* | [ tabel. ] câmp1 [, tabel. ] câmp2 [, …] ] )

DIN tabelul 1 ] [, …]

[IN baza de date externă]

[,…]]]

Instrucțiunea SELECT conține următoarele elemente de bază:

  • ? SELECT înseamnă că un set (tabel de date) trebuie selectat din unele tabele din baza de date.
  • ? Cuvintele opționale ALL, DISTINCT, DISTINCTROW și TOP sunt numite predicate și definesc selecția după cum urmează:

ALL specifică faptul că toate rândurile (chiar și cele cu valori duplicate) sunt trecute în set;

DISTINCT specifică faptul că numai rândurile duplicate sunt trecute în set;

DISTINCTROW specifică că setul de rezultate va include fiecare rând în care există o diferență în valoarea oricăruia dintre câmpurile din tabelele sursă (nu doar câmpurile specificate pentru a fi afișate în instrucțiunea SELECT);

TOP este folosit pentru a afișa un număr (fie exact sau procentual) al înregistrărilor de început sau de sfârșit dintr-un set de rezultate.

  • ? Lista (* | tabel.* | [ tabel. ] câmp1 [, tabel. ] câmp2 [, ...] ] ) (acoladele denotă aici o listă) constă din numele câmpurilor tabelului (tabelelor) de interogare. Un asterisc (*) înseamnă că toate câmpurile din tabel sunt selectate. Dacă o interogare specifică mai multe tabele, numele tabelului este folosit pentru a defini câmpul, separat de numele câmpului printr-un punct (.). Un câmp poate primi un nume „alias” (alias) folosind cuvânt cheie LA FEL DE.
  • ? După cuvântul FROM sunt indicate tabelele din care sunt selectate câmpurile specificate anterior. Aici table1 (,table2) este numele tabelului (sau tabelelor) care conțin datele, externaldatabase este numele bazei de date dacă baza de date curentă nu este utilizată.

Ne vom uita la elementele nebifate ale instrucțiunii SELECT pe măsură ce vom explora interogări mai complexe de tabel.

De exemplu folosind SELECT vom lucra cu baza de date Lab 3.mdb, a cărei creare și completare a fost discutată anterior munca de laborator.

Puteți învăța instrucțiunile SELECT, ca și alte instrucțiuni, în aplicațiile Access.

O notă finală înainte de a analiza instrucțiunile SQL se referă la modul în care aceste instrucțiuni sunt scrise într-un șir. Nu există reguli pentru scrierea instrucțiunilor SQL cu privire la poziția lor în șir. Puteți scrie instrucțiuni pe o singură linie sau pe mai multe.

Vom respecta următoarea regulă: fiecare clauză de tip SELECT, FROM, WHERE etc. va începe pe o linie nouă. Dacă este necesar, la linie nouă va fi indentat. Acest lucru face instrucțiunile SQL mai ușor de scris și mai ușor de înțeles.

Pentru a testa instrucțiunile SQL în Access, selectați opțiunea Interogări din partea stângă a ferestrei principale Access din meniul Obiecte și faceți dublu clic pe Creare o interogare în Vizualizare proiect. Fereastra care apare Adăugarea unui tabel la noi în acest caz, nu este necesar, deci ar trebui să fie închis.

Ignorând instrumentele Access discutate în laboratorul anterior pentru crearea unei interogări QBE, selectați comanda Mod SQL din meniul Vizualizare (Figura 1) pentru a obține în sfârșit acces la fereastra în care puteți tasta instrucțiuni SQL.

Figura 1. Selectarea comenzii SQL Mode

Vom studia instrucțiunea SELECT după principiul „de la simplu la complex”: mai întâi vom elimina toate elementele opționale din sintaxa completă a acestei instrucțiuni, iar apoi le vom folosi treptat, obținând interogări mai complexe. Dacă aruncăm toate clauzele opționale din listă (* | table.* | [ table. ] field1 [, table. ] field2 [, ...] ] ) și lăsăm doar elementul *, obținem cea mai simplă versiune a SELECT instrucțiune (interogare SQL), care va arăta ca (Fig. 2):

SELECT * FROM Produse;


Figura 2. Cea mai simplă cerereîn SQL

Rezultatul este prezentat în Fig. 3.


Figura 3. Rezultatul executării unei interogări simple

Selectarea câmpurilor specifice într-o interogare SQL

Cel mai adesea nu va trebui să obțineți un set cu toate câmpurile unuia (sau mai multor) tabele. De exemplu, din câmpul CodeProd din tabel

Produsele sunt destinate în primul rând comunicării cu alte tabele, așa că nu este adesea necesar să fie incluse într-o interogare SQL. În instrucțiunea SELECT, puteți specifica numele specifice ale câmpurilor utilizate într-un tabel.

De exemplu;

SELECT produs, unitate

DIN Produse;

Pentru a modifica interogarea, utilizați comanda SQL Mode din meniul View (Fig. 3.1)

Rezultatul interogării este prezentat în Figura 4.

Figura 4. Selectarea câmpurilor specifice

Puteți schimba anteturile:

DIN Produse;

Vezi rezultatul din Fig. 5.

Selectarea înregistrărilor specifice într-o interogare SQL

Cuvântul cheie WHERE din sintaxa instrucțiunii SELECT vă permite să specificați anumite tipuriînregistrări care ar trebui incluse în set.

De exemplu:

SELECTARE produs AS [Nume produs], Unitate AS [Unitate de măsură]

DIN Produse

WHERE Unitatea = "l";

Rezultatul eșantionării este prezentat în Fig. 6.

În zona cuvântului UNDE, puteți plasa o expresie condiționată complexă folosind semne operatii logice si functii. De exemplu:

DIN Produse UNDE Preț1 > 50 ȘI Preț1< 200;

SELECTAȚI Numele produsului ca [Numele produsului], Preț1 ca [Prețul de achiziție]

DIN Produse

WHERE Preț1 > 50 ȘI Len (NumeProdus)< 20;

In primul caz se solicita marfa al caror pret cu ridicata este in interval preturi angro(55-200), iar în al doilea - ale căror prețuri sunt mai mari de 50 de unități monetare și lungimea numelui nu depășește 20 de caractere.

Pe lângă operațiuni< и >, în instrucțiunea SELECT puteți folosi operatorii = (egal),<= (меньше или равно) и >= (mai mare sau egal cu), precum și ȘI, SAU și NU. Dar oportunități și mai mari de selectare a înregistrărilor necesare sunt oferite de operatori precum IS NULL, BETWEEN, IN și LIKE.

Operatorul IS NULL vă permite să găsiți înregistrări într-un tabel ale cărui câmpuri nu conțin date, de exemplu:

SELECTAȚI Numele produsului AS [Numele produsului], Preț1 AS [Prețul de achiziție]

DIN Produse

UNDE Preț2 ESTE NUL SAU Preț1< 50;

Operatorul BETWEEN vă permite să specificați intervalul în care se află datele unui anumit câmp, de exemplu:

SELECTAȚI Numele produsului ca [Numele produsului], Preț1 ca [Prețul de achiziție]

DIN Produse

UNDE Pret1 INTRE 42 SI 120;

Operatorul IN vă permite să specificați o listă care conține datele unui anumit câmp, de exemplu:

SELECTAȚI Numele produsului ca [Numele produsului], Preț1 ca [Prețul de achiziție]

DIN Produse

WHERE Preț1 ÎN (42.105.750)

De asemenea, puteți utiliza operatorul LIKE într-o instrucțiune SQL, de exemplu instrucțiunea:

SELECTAȚI Numele produsului ca [Numele produsului], Preț1 ca [Prețul de achiziție]

DIN Produse

WHERE Numele produsului, cum ar fi „(VCD)*”;

vă permite să preluați numai acele înregistrări ale căror primele cinci caractere din nume se potrivesc cu șirul „(VCD)”.

Operatorul LIKE poate fi folosit pentru căutarea contextuală, de exemplu, dacă utilizatorul intră șir de text, care conține o parte din numele produsului, atunci această linie poate fi utilizată cu ușurință ca șablon. Următoarea instrucțiune caută înregistrări în care titlul conține șirul „țintă” ca subșir:

SELECTAȚI Numele produsului ca [Numele produsului], Preț1 ca [Prețul de achiziție]

DIN Produse

WHERE Numele produsului LIKE „*țintă*”;

Operatorul NOT, care inversează expresie logică, poate fi folosit cu operatorii IS NULL, BETWEEN, IN, LIKE. În același timp, practic despre care vorbim despre operatorii IS NOT NULL, NOT BEWEEN, NOT IN și NOT LIKE, de exemplu, ca în următoarele patru declarații:

SELECTAȚI Numele produsului AS [Numele produsului], Prețul! AS [Preț de achiziție]

DIN Produse

UNDE Preț2 NU ESTE NUL SAU Preț1< 50;

SELECTAȚI Numele produsului ca [Numele produsului], Preț1 ca [Prețul de achiziție]

DIN Produse

UNDE Preț1 NU ÎNTRE 42 ȘI 120;

SELECTAȚI Numele produsului ca [Nume produs], Preț! ca [Preț de achiziție]

DIN Produse

WHERE Price1 NOT IN (42, 105,750);

SELECTAȚI Numele produsului ca [Numele produsului], Preț1 ca [Prețul de achiziție]

DIN Produse

UNDE Numele produsului NU LIKE „(VCD)*”;

Datele de interogare rezultate pot fi formatate folosind, de exemplu, funcția Format. Următoarea solicitare formatează datele folosind șirul „### ##0.00$”:

SELECTAȚI Numele produsului ca [Numele produsului],

Format (Preț1*1,2,"### ##0,00 rub") ca [Preț cu ridicata]

DIN Produse

UNDE Preț1< 100

Vă rugăm să rețineți că funcția Format primește produsul Price1*1.2 ca prim argument. Astfel, obținem un preț diferit de unul de bază.

Puteți utiliza funcțiile de conversie de șir pentru a formata datele de ieșire într-o interogare. De exemplu, următoarea interogare afișează numele produselor în majuscule, deoarece folosește funcția StrConv:

SELECT StrConv(Product,1) AS [Nume produs], Unit AS [Unitate de măsură]

DIN Produse;

Rezultatul unei astfel de solicitări este prezentat în Fig. 7.

Figura 7. Rezultatul cererii indicând formatul de prezentare a informațiilor

Selectarea datelor din mai mult de un tabel

Luați în considerare problema selectării mărfurilor dintr-o bază de date pentru un anumit depozit. Înainte să ne uităm la utilizarea cuvântului WHERE pentru a lega tabele, rețineți că într-o instrucțiune SELECT puteți precede numele câmpului specificând numele tabelului, care este separat de numele câmpului printr-un punct:

SELECTARE ( * | câmp 1 [, câmp 2 [, ...]])

De exemplu (Interogarea 6):

SELECT Products.Product AS [Nume produs], Products.Unit AS [Unitate de măsură]

DIN Produse;

Sau (Interogarea 7)

SELECT fila.Product AS [Nume produs], tab.Unitate AS [Unitate de măsură]

FROM fila Produse;

A doua instrucțiune folosită nume alternativ tabele (alias local), dar ambele instrucțiuni produc același set de rezultate.

Următoarea instrucțiune vă permite să obțineți denumirile (din tabelul Produse) și cantitățile (din tabelul Vânzări) de produse (rezultatul execuției este în Fig. 8):

DE LA Produse, Vânzări

WHERE Products.ProdCode = Sales.ProdCode;

Figura 8. Eșantionarea din două tabele

Acordați atenție expresiei Products.ProdCode = Sales.ProdCode.

Acesta este ceea ce este folosit pentru a lega tabelele Produse și Vânzări folosind câmpul cheieProdProd.

Rezultatul urmăririi instrucțiunilor anterioare seamănă cu o fișă de inventar fără a indica data vânzării. Următoarele instrucțiuni vă permit să obțineți nume și cantități numai pentru acele produse care au fost vândute după o dată dată (Fig. 9):

SELECT Products.Product AS [Nume produs], Vânzări.Cantitate AS [Cantitate]

DE LA Produse, Vânzări

WHERE Sales.SalesDate > #3/25/2003# AND Products.ProdCode = Sales.ProdCode;

Figura 9. Selectarea dintre două tabele cu limită de dată

Folosind aliasuri locale, puteți scurta instrucțiunea anterioară (Query10).

DIN Produse a, Vânzări b

UNDE b.SalesDate > ;

Afișează datele selectate într-o anumită ordine

Pentru a sorta datele, instrucțiunea SELECT conține cuvintele ORDER BY:

SELECTARE ( * | câmp 1 [, câmp 2 I, .-.]])

DIN tabelul 1 [, tabelul 2 [, ...]

[, câmpul2 ][, ...]]]

Aici, o clauză ORDER BY opțională a fost adăugată acelor elemente ale interogării SQL care au fost deja luate în considerare. După cum rezultă din sintaxa instrucțiunii SELECT, folosind cuvintele ASC și DESC, puteți schimba „direcția” de sortare („crescător” și „descendent”). Puteți sorta după mai multe câmpuri (întâi după unul, apoi după altul și așa mai departe) și chiar după diferite elemente ale aceluiași câmp folosind funcții.

Următoarea instrucțiune sortează setul de ieșire în ordinea descrescătoare a numărului de vânzări (Query11):

SELECTAȚI a.Produs AS [Nume produs], b.Cantitate AS [Cantitate]

DIN Produse a, Vânzări b

UNDE b.SalesDate > #3/25/2003# AND a.ProdCode = b.ProdCode

COMANDA DE A. DESC produs;

Funcții de agregare în instrucțiunea SELECT

Declarațiile ANSI SQL oferă așa-numitele funcții de agregare care determină numărul de înregistrări, calculează suma tuturor valorilor câmpurilor dintr-un set și găsesc valorile minime sau maxime, precum și valorile medii. Funcțiile de agregare includ funcțiile COUNT, SUM, MAX, MIN și AVG.

Funcția COUNT este utilizată pentru a determina numărul de înregistrări dintr-o interogare. De exemplu, o declarație pentru a calcula numărul de înregistrări din tabelul Produse ar putea fi scrisă după cum urmează:

SELECTARE COUNT(Produs) AS [Total articole]

DIN Produse;

În fig. Figura 10 arată rezultatul acestei interogări.

Figura 10. Numărarea numărului de produse

Funcția AVG dintr-o instrucțiune SELECT vă permite să găsiți media rândurilor dintr-o interogare. De exemplu, următoarea instrucțiune defineste prețul mediu vânzări pentru tranzacții finalizate după data specificată (Solicitare 13):

SELECT Format(AVG (Prețul de vânzare), „### ##0.00rub”) AS [Prețul mediu]

DIN Vânzări

WHERE DataVânzări > #3/25/2003#;

Gruparea datelor într-o instrucțiune SELECT

Seturile produse folosind instrucțiuni SELECT conțin adesea valori duplicate. Pentru baza de date pe care o luăm în considerare, acestea ar putea fi, de exemplu, numele produselor din interogare (Fig. 3.8). Aceste valori duplicate pot fi combinate în grupuri folosind funcții de agregare pentru grupuri.

Instrucțiunea SELECT folosește clauza GROUP BY pentru a grupa valorile împreună.

Următoarele instrucțiuni au ca rezultat o listă de produse vândute și cantitățile totale ale acestora (rezultatul este în Fig. 11):

DIN Produse a, Vânzări b

UNDE b.SalesDate > #3/25/2003# AND a.ProdCode = b.ProdCode

GRUPARE DUPĂ a.Produs;

Figura 11. Gruparea volumului vânzărilor pe nume de produse

Să presupunem că avem nevoie de informații despre cantitatea totală doar a acelor produse pentru care numărul vânzărilor este mai mic decât un anumit număr. Pentru a rula această interogare, nu putem folosi o clauză WHERE deoarece „funcționează” pe valorile datelor situate în tabel și trebuie să punem anumite restricții asupra datelor care sunt calculate. Pentru a rezolva o astfel de problemă, ar trebui să utilizați clauza HAVING, care este legată de clauza GROUP BY în același mod ca WHERE is to SELECT. Cu alte cuvinte, clauza HAVING impune anumite condiții asupra datelor selectate prin clauza GROUP BY.

Următoarele instrucțiuni vă permit să obțineți o listă de produse și numărul total de vânzări. Mai mult, lista include doar acele produse pentru care numărul total de vânzări este mai mic de 20 (rezultatul este în Fig. 12):

SELECTAȚI a.Product AS [Nume produs], SUM(b.Cantitate) AS [Cantitate]

DIN Produse a, Vânzări b

UNDE b.SalesDate > #3/25/2003# AND a.ProdCode = b.ProdCode

GRUPARE DUPĂ a.Produs

AVÂND SUMA(b.Cantitate)< 20;

Figura 12. Gruparea vânzărilor care nu depășesc o valoare dată

Subinterogări într-o instrucțiune SELECT

O subinterogare este o interogare care este plasată în interiorul unei alte interogări sau, mai degrabă, face parte din clauza WHERE (sau HAVING) a interogării principale și constă din paranteze rotunde. Subinterogările sunt uneori numite interogări imbricate. O interogare care conține o subinterogare se numește interogare complexă. Când se execută o interogare complexă, mai întâi se execută subinterogarea (de aceea este inclusă în paranteze!), iar apoi interogarea principală.

Ieșirea unei subinterogări este de obicei utilizată atunci când se evaluează expresia din clauza WHERE (sau HAVING) a interogării principale (în ceea ce privește acea subinterogare), folosind operatori precum =, >,<, о, IN, NOT IN, AND, OR. (Эти операторы можно использовать и внутри подзапроса.)

Este important să înțelegeți ce date sunt returnate de subinterogare deoarece sintaxa pentru utilizarea clauzei WHERE depinde de aceasta. Următoarele reguli trebuie respectate atunci când scrieți interogări complexe:

  • ? Clauza SELECT a unei subinterogări conține de obicei o singură coloană și, prin urmare, poate avea ca rezultat o matrice de valori omogene (numai valori șir, numai valori întregi etc.) sau doar o singură valoare. Este foarte rar să vezi cazuri în care sunt folosite mai multe coloane. Dacă o subinterogare returnează o matrice de valori, clauza WHERE corespunzătoare acelei subinterogări poate conține numai operatori cu mai multe valori, cum ar fi IN.
  • ? Clauza ORDER BY trebuie utilizată numai în interogarea principală. Într-o subinterogare, trebuie să utilizați o clauză GROUP BY pentru a ordona datele.
  • ? Nu este permisă utilizarea clauzei BETWEEN în interogarea principală

Sintaxa simplă de subinterogare pentru instrucțiunea SELECT este următoarea:

SELECTAȚI ( * I tabel.* | câmp1 [, câmp2 [, ...]])

DIN tabelul 1 [, tabelul 2 [, ...]

WHERE field1 operator

(SELECTARE (* I tabel.* I field1 [, field2 [, ...]])

DIN tabelul 1 [, tabelul 2 [, ...]

UNDE)

Cel mai simplu mod de a demonstra utilizarea unei subinterogări este dacă are o singură valoare ca rezultat. De exemplu, să presupunem că trebuie să obținem o listă de produse de la un furnizor ale cărui provizii sunt cele mai diverse (furnizează cel mai mare număr de articole).

Să ne amintim că schema de date (Fig. 13) a bazei de date Lab 3.mdb este aceeași ca în Lab 2.mdb.


Figura 13. Diagrama de date Lab 3.mdb

O interogare care leagă vânzările de produse la furnizori arată astfel:

SELECTAȚI a.Produs AS [Nume produs], b.Cantitate AS [Cantitate], d.Cod poștal AS [Furnizor]

FROM Produse a, Vânzări b, Consumabile c, Furnizori d

WHERE a.ProdCode = b.ProdCode AND b.ProdCode = c.ProdCode AND c.PostCode = d.PostCode;

Rezultatul acestuia este prezentat în Fig. 14.


Figura 14. Vânzări legate de furnizor

În primul rând, trebuie să identificăm acest furnizor care a furnizat cel mai mare număr de articole de produs. Să creăm o solicitare care va returna codul unui astfel de furnizor:

SELECTARE TOP 1 CodePost

DIN Rechizite

GROUP BY CodePost

ORDER BY COUNT(Prod Code) DESC

Clauza TOP 1 indică faptul că există o singură înregistrare în setul de rezultate și, deoarece setul este sortat (descrescător) după cantitățile totale de produse, rezultatul este codul furnizorului cu cele mai multe articole. Rezultatul unei astfel de solicitări este prezentat în Fig. 15.

Figura 15. Codul furnizorului cu cel mai mare număr de articole

Rămâne de pregătit o interogare care returnează o listă de produse vândute pentru codul de furnizor specificat, dar dacă anterior am fi specificat acest cod în mod explicit, acum îl definim într-o subinterogare (rezultatul este în Fig. 16):

SELECTAȚI a.Produs AS [Nume produs], b.Cantitate AS Cantitate, d.Cod poștal AS Furnizor

FROM Products AS a, Vânzări AS b, Supplies AS c, Furnizori AS d

UNDE a.Cod produs = b.Cod produs ȘI b.Cod produs = c.Cod produs ȘI c.Cod poștal = d.Cod poștal ȘI c.Cod poștal =

(SELECTARE TOP 1 CodePost

DIN Rechizite

GROUP BY CodePost

ORDER BY COUNT(ProdCode) DESC);

Figura 16. Vânzări de produse de la furnizorul cu cel mai mare număr de articole

Analiza unei astfel de cereri arată că numărul de articole vândute este semnificativ mai mic decât numărul de articole de produs furnizate de acest furnizor.

Prin înlocuirea d.CodePost în prima linie a cererii cu d. Furnizorul va primi rezultatul cu denumirea oficială a companiei (Fig. 17).

Unificarea treptată a bazelor de date a condus la necesitatea creării unui limbaj standard de acces la datele bazei de date, care ar putea fi utilizat pentru a funcționa într-un număr mare de tipuri diferite de medii computerizate. Un limbaj standard va permite utilizatorilor care cunosc un set de comenzi să le folosească pentru a crea, găsi, modifica și comunica informații, indiferent de serverul de baze de date utilizat sau de locația acestuia.

SQL (Structured Query Language) sau Structured Query Language, este un limbaj care face posibilă lucrarea cu date în baze de date relaționale. Standardul SQL este definit de ANSI (American National Standards Institute) precum și de ISO (International Organization for Standardization). Cu toate acestea, majoritatea programelor comerciale de baze de date extind SQL adăugând diferite caracteristici la limbaj pe care le consideră utile. Aceste completări nu sunt standardizate și adesea duc la dificultăți la trecerea de la un server de date la altul.

Pentru a accesa baza de date se folosesc interogări scrise în SQL. O interogare este o comandă care este trimisă către serverul bazei de date și care îi spune că trebuie să afișeze anumite informații din tabele în memorie. Aceste informații sunt de obicei trimise direct pe ecranul sau terminalul computerului, deși în cele mai multe cazuri pot fi trimise și către o imprimantă, stocate într-un fișier (ca obiect în memoria computerului) sau furnizate ca intrare către o altă comandă sau proces.

În ciuda numărului mare de varietăți ale acestui limbaj care există în prezent, logica funcționării sale este simplă. Este suficient să stăpânești comenzile de bază în cel puțin una dintre versiunile sale pentru a înțelege ulterior cu ușurință oricare dintre celelalte implementări ale sale.

Pentru a executa interogări SQL vom folosi SQL Management Studio. Când lansați Management Studio, apare următoarea fereastră (Fig. 25).

Orez. 25. Setarea parametrilor de conectare

Să ne conectăm la un server situat pe computerul local. Parametrul „Autentificare” specifică autentificarea la conectarea la server - dacă este selectată „Autentificare Windows”, setările de sistem vor fi folosite ca nume de utilizator și parolă.

Dacă totul este făcut corect, va apărea fereastra principală a programului. Pentru a comuta în modul cerere, trebuie să faceți clic pe butonul „Creare cerere” (Fig. 26).

Orez. 26. Comutați la modul de creare a interogării

Rețineți că vor fi create interogări care funcționează pe baza de date dedicată. După ce faceți clic pe butonul „Creare Query”, mediul SQL Management Studio ia forma prezentată în figură (Fig. 27). Observați butonul Run, care execută interogările introduse în câmpul text din dreapta și afișează rezultatul executării acestora.

SQL- un limbaj de interogare structurat creat de angajații IBM pentru baze de date relaționale la începutul anilor 1970 și apoi implementat în cadrul SGBD-urilor relaționale ale altor companii de dezvoltare. Ulterior, SQL a devenit standardul de facto în domeniul limbajelor de interogare pentru bazele de date relaționale.

În 1989, Institutul Național American de Standarde (ANSI) a dezvoltat standardul SQL-86 pe baza unei analize a diferitelor implementări SQL. În 1992, a apărut noua sa versiune - SQL-92 sau SQL2. Această versiune este implementată în aproape toate SGBD-urile moderne. O versiune a standardului SQL3 este în curs de dezvoltare.

SQL este un set de instrucțiuni care vă permit să selectați (instrucțiunea SELECT), să le modificați (instrucțiunea UPDATE) și să le ștergeți (instrucțiunea DELETE), precum și să introduceți date noi (instrucțiunea INSERT). În plus, acest limbaj include operatori pentru definirea variabilelor, crearea și apelarea procedurilor stocate, funcțiilor și procedurilor speciale - declanșatoare. În total, SQL conține mai mult de 100 de instrucțiuni și vă permite să dezvoltați aplicații complexe. Una dintre instrucțiunile SQL de bază este SELECT.

Instrucțiunea SELECT este concepută pentru a efectua interogări pentru a prelua date din baza de date. Sintaxa sa este prezentată mai jos:

SELECT Lista câmpurilor selectabile>

În această descriere sunt utilizate următoarele denumiri:

  • ? listă de tabele> - o construcție sintactică care necesită clarificări suplimentare;
  • ? - construcția sintactică între paranteze pătrate (aceasta este opțională și, în funcție de situație, poate fi sau nu utilizată);
  • ? ASC | DESC - prezența caracterului „|”. înseamnă că poate fi folosită construcția sintactică din stânga sauîn dreapta acestui simbol;
  • ? DICTINCT - indică necesitatea excluderii tuplurilor (înregistrărilor) identice din rezultat;
  • ? lista de câmpuri selectabile> - lista de atribute (câmpuri) care fac parte din relația rezultată. Pe lângă atribute, aici pot fi reprezentate și expresii;
  • ? lista de tabele> - lista de relatii (tabele) care sunt folosite in interogare;
  • ? = [[condiția conexiunii>]...]
  • ? [Condiție de selecție AYB> [A]>Ш|(F)...]
  • ? link condition> - folosit pentru a lega tabele utilizate în interogare;
  • ? condiție de selecție> - o expresie care determină ce tupluri (înregistrări) vor fi incluse în rezultat. Când compuneți această expresie, puteți utiliza operații aritmetice (+, -, x, /) și logice (ȘI, SAU, NU), precum și funcții SQL încorporate.

Textul cererii se termină cu semnul „;”.

Să formulăm cererea: „Trimiteți următoarele informații despre livrările de către contraparte cu codul 1: numărul facturii, data livrării.”

SELECT Nr. factură, data livrării

DE LA Livrare

WHERE Codul de contraparte=1;

În această interogare, lista câmpurilor selectabile> este reprezentată de atribute (câmpuri) Factura, data livrării, listă de tabele> - o relație (tabel) Livra, iar condiția de eșantionare> include o condiție de selecție> - Cod contraparte=1.

Datorită faptului că aici este folosit un singur tabel, nu există nicio condiție de conectare; Condiția conexiunii> va fi discutată în continuare.

Să ne uităm la un exemplu folosind mai multe relații (tabele). Să reformulam prima solicitare: „Afișați următoarele informații despre furnizarea de bunuri de către contrapărți: numărul facturii, numele contrapărții, data livrării.” În SQL este reprezentat astfel:

SELECTAȚI numărul facturii, data livrării, numele contrapărții FROM contraparte INNER JOIN Delivery ON contraparte. Counterparty code = Livrare.Cod Counterparty;

Aici condiția de conectare> este reprezentată de expresia ( Counterparty.Counterparty code = Livrare. codul contrapartidei). Indică ce atribute (câmpuri) sunt folosite pentru a lega tabele.

SQL vă permite să utilizați interogări pentru a obține atribute calculate - rezultatele calculelor pe alte atribute. Solicitarea „Afișează următoarele informații despre livrarea mărfurilor: numărul facturii, data livrării, codul produsului, cantitatea articolului” arată astfel:

SELECTAȚI Nr. factură, Data livrării, Codul produsului, Prețul furnizorului x Cantitate CA sumă Poziții FROM Livrare INNER JOIN Livrări speciale LA Livrare. Nr. factură = Livrare specială Nr. factură de livrare;

Când se compun atribute calculate, pot fi utilizate funcții încorporate:

COUNT(*) - numără numărul de tupluri (înregistrări); MAX(Atr) - returnează cea mai mare valoare a atributului Atr;

MIN(Atr) - returnează cea mai mică valoare a atributului Atr. Să ne uităm la un exemplu.

Este necesar să se determine cantitatea totală de mărfuri furnizate:

SELECTAȚI Codul Produsului, Suma(Cantitatea) AS Livrat FROM Livrări Speciale GROUP BY Codul Produsului;

În astfel de cazuri, SGBD utilizează așa-numita grupare de date. Toate tuplurile (înregistrările) sunt împărțite automat în grupuri conform criteriilor specificate și se efectuează aceleași calcule pentru fiecare grup. Caracteristicile grupării sunt specificate folosind următoarea construcție:

În plus, SQL vă permite să ordonați rezultatele interogărilor în ordine crescătoare sau descrescătoare a mai multor atribute (câmpuri) folosind un construct precum

Unde este o listă de atribute (câmpuri) în funcție de care este sortat rezultatul interogării; AS C (DESC) - un semn de ordonare în ordine crescătoare (descrescătoare).

Să sortăm înregistrările rezultatelor interogării în ordine descrescătoare:

SELECT Cod produs, Suma(Cantitatea) AS Livrat

DIN Livrari Speciale

GROUP BY Cod produs

COMANDA PENTRU Sumă (Cantitate) DESC;

Proiecta

Alăturați-vă pe , unde sunt relațiile (tabelele) conectate;

Definește o conexiune externă (stânga - stânga și dreapta - dreapta) sau internă (internă) a relațiilor (tabele).

O îmbinare interioară include în relația (tabel) rezultată doar acele tupluri (înregistrări) ale ambelor relații (tabele) pentru care este efectuată.

Să luăm în considerare o conexiune internă folosind exemplul de solicitare: „Determină numărul de livrări de către fiecare contraparte din director”. Folosind designul

SELECTAȚI Numele contrapărții, Număr (nr. factură) AS Cantitate

FROM Counterparty LEFT JOIN Livrare ON Counterparty. Counterparty code = Delivery.Counterparty code GROUP BY Counterparty.Name of Counterparty;

Stânga exterioarăîmbinarea include în relația rezultată (tabel) Toate tupluri (înregistrări) ale relației din stânga (tabelului). Din relația corectă (tabel), doar acele tupluri (înregistrări) pentru care este adevărat sunt incluse în rezultat. În cazurile în care această condiție nu este îndeplinită, în loc de tupluri (înregistrări) relației corecte (tabel), valorile NULL sunt scrise în rezultat.

Aceasta încheie prezentarea generală a principalelor constructe ale limbajului SQL. Interogările SQL complexe, precum și o serie de alți parametri, vor fi luate în considerare în continuare atunci când se rezolvă probleme specifice în paragrafele 3.4.5 și 3.4.6.

2. BAZELE LIMBAJULUI SQL

Unificarea treptată a bazelor de date a condus la necesitatea creării unui limbaj standard de acces la datele bazei de date, care ar putea fi utilizat pentru a funcționa într-un număr mare de tipuri diferite de medii computerizate. Un limbaj standard va permite utilizatorilor care cunosc un set de comenzi să le folosească pentru a crea, găsi, modifica și comunica informații, indiferent de serverul de baze de date utilizat sau de locația acestuia.

SQL (Structured Query Language) sau Structured Query Language,

este un limbaj care face posibilă lucrul cu date în baze de date relaționale. Standardul SQL este definit de ANSI (American National Standards Institute) precum și de ISO (International Organization for Standardization). Cu toate acestea, majoritatea programelor comerciale de baze de date extind SQL adăugând diferite caracteristici la limbaj pe care le consideră utile. Aceste completări nu sunt standardizate și adesea duc la dificultăți la trecerea de la un server de date la altul.

Pentru a accesa baza de date se folosesc interogări scrise în SQL. O interogare este o comandă care este trimisă către serverul bazei de date și care îi spune că trebuie să afișeze anumite informații din tabele în memorie. Aceste informații sunt de obicei trimise direct pe ecranul sau terminalul computerului, deși în cele mai multe cazuri pot fi trimise și către o imprimantă, stocate într-un fișier (ca obiect în memoria computerului) sau furnizate ca intrare către o altă comandă sau proces.

În ciuda numărului mare de varietăți ale acestui limbaj care există în prezent, logica funcționării sale este simplă. Este suficient să stăpânești comenzile de bază în cel puțin una dintre versiunile sale pentru a înțelege ulterior cu ușurință oricare dintre celelalte implementări ale sale.

Pentru a executa interogări SQL vom folosi SQL Management Studio. Când porniți Management Studio, apare următoarea fereastră

Orez. 25. Setarea parametrilor de conectare

Să ne conectăm la un server situat pe computerul local. Parametrul „Autentificare” specifică autentificarea la conectarea la server - dacă este selectată „Autentificare Windows”, setările de sistem vor fi folosite ca nume de utilizator și parolă.

Dacă totul este făcut corect, va apărea fereastra principală a programului. Pentru a trece la modul de solicitare, trebuie să faceți clic pe butonul „Creați cerere”.

Orez. 26. Comutați la modul de creare a interogării

Rețineți că vor fi create interogări care funcționează pe baza de date dedicată. După ce faceți clic pe butonul „Creare Query”, mediul SQL Management Studio ia forma prezentată în figură (Fig. 27). Observați butonul Run, care execută interogările introduse în câmpul text din dreapta și afișează rezultatul executării acestora.

2.1. Proiectare de bază de interogări SQL

Unde<условие>

Această operație este o alcătuire a operatorilor relaționali de proiecție, îmbinare și selecție. Proiecția este luată pe lista de atribute specificată, îmbinarea se realizează pe lista de relații specificată, selecția este determinată de condiția de selecție unde înregistrările.

Ca urmare a efectuării unei operații de îmbinare, datele din relațiile specificate în listă sunt reprezentate printr-un singur tabel. În acest tabel, dintre toate coloanele existente ale relațiilor originale ale listei de relații, rămân doar acele coloane care sunt specificate în lista de atribute și doar acele rânduri care îndeplinesc condiția where.

Deci, să scriem prima interogare și să apăsăm tasta F5 (articolul de meniu Interogare

– Execute): selectați * din Turiști;

Ca urmare, toate înregistrările din tabelul „Turiști” din baza de date sunt returnate.

nal BDTur_firmSQL.

Fereastra principală a programului arată ca (Fig. 27).

Orez. 27. Extragerea rândurilor din tabelul „Turiști”.

Această interogare a preluat toate coloanele tabelului. Dacă doriți să selectați doar coloana Nume, interogarea trebuie modificată după cum urmează:

selectează Nume din Turişti;

Rezultatul executării acestei solicitări este prezentat în Figura 28.

Pentru a afișa un anumit număr de înregistrări, utilizați următoarea interogare (Fig. 29):

selectează top 3 Numele din Turişti;

Primele trei înregistrări ale câmpului „Nume”, aflat în tabelul „Turiști”, sunt preluate. Vă rugăm să rețineți că numele nu sunt aranjate în ordine alfabetică, ci în ordinea în care au fost stocate în baza de date.

Puteți obține ordinea alfabetică folosind o clauză ordonată, care conține o listă de atribute, fiecare urmată fie de cuvântul cheie asc (sortați în ordine crescătoare) fie de cuvântul cheie dec (sortați în ordine descrescătoare). Acum, cererea anterioară ar putea arăta astfel:

selecteaza top 3 Nume din Turisti ordona dupa Nume asc;

Introducând operatorul procentual, putem obține procentul specificat de înregistrări din numărul total: selectați top 25 la sută Nume de familie din Turiști;

Pentru a selecta înregistrările care îndeplinesc o anumită condiție, folosim operația

torus unde:

selectați * din Tururi unde Preț > 27000;

Această interogare returnează toate înregistrările din tabelul „Tururi” în care câmpul „Preț” are o valoare mai mare de 27000 (Fig. 31).

Orez. 31. Selectarea înregistrărilor cu toate câmpurile după o valoare dată

Operatorul unde acceptă semnele de comparație<, >, >=, <=.

O selecție exactă numai dintr-un anumit set de valori este efectuată de operatorul in; în exemplul următor, sunt preluate doar acele înregistrări în care valoarea câmpului „Preț” este exact egală fie cu 10.000, fie cu 20.000, sau 30.000 (Fig. 32):

selectați * din Tururi unde prețul în (10000, 20000, 30000);

Orez. 32. Selectarea înregistrărilor după potrivirea exactă a valorilor câmpului Preț

Selectarea valorilor care se află în intervalul specificat se efectuează op-

ratator intre<первое_значение>și<второе_значение>(Fig. 33):

Selectați * din Tururi unde prețul este între 10000 și 30000;

Orez. 33. Selectarea înregistrărilor după valori în intervalul specificat în câmpul Preț

2.2. Funcții de agregare SQL

Atunci când se efectuează analiza statistică a bazelor de date, este necesar să se obțină informații precum numărul total de înregistrări, cele mai mari și cele mai mici valori ale unui anumit câmp al unei înregistrări, valoarea medie a câmpului etc. Această sarcină este efectuată folosind interogări care conțin așa-numitele funcții de agregare.

Funcții de agregare Ei calculează o valoare de „colectare” (sumă, medie, maximă, valoare minimă etc.) pentru grupuri date de rânduri de tabel. Grupurile de rânduri sunt definite de diferitele valori ale unui câmp(e) tabel dat. Gruparea se face folosind clauza grupare.

Să ne uităm la lista funcțiilor de agregare.

Count specifică numărul de intrări ale acestui câmp în grupul de rânduri.

sum calculează suma aritmetică a tuturor valorilor selectate pentru un anumit câmp.

avg calculează media aritmetică (media) a tuturor valorilor selectate pentru un anumit câmp.

max găsește cea mai mare dintre toate valorile selectate pentru un anumit câmp.

min găsește cea mai mică dintre toate valorile selectate pentru un anumit câmp.

Pentru a determina numărul total de înregistrări din tabelul Turiști, utilizați interogarea selectează numărul (*) din Turişti;

Rezultatul cererii este prezentat în Figura 34.

Rețineți că rezultatul interogării este un singur număr conținut în câmpul de nume care lipsește.

Orez. 34. Rezultatul interogării cu funcție de numărare

selectați Nume, numărați (Nume) din grupul de turiști după Nume;

Sintaxa pentru utilizarea altor operatori este aceeași - următoarele interogări preiau suma, media aritmetică, cele mai mari și cele mai mici valori ale câmpului „Preț” din tabelul „Tururi” (aici grupul de înregistrări specificat, ca în primul exemplu cu funcția de numărare, sunt toate înregistrările tabelului).

selectați suma(Prețul) din Tururi selectați media(Prețul) din Tururi selectați max(Prețul) din Tururi selectați min(Prețul) din Tururi

Dacă valoarea unui câmp poate fi nulă, atunci operatorul nul trebuie utilizat pentru a accesa astfel de câmpuri. Rețineți că valoarea nulă nu înseamnă că câmpul conține numărul 0 (zero) sau un șir de text gol. Există două moduri de a crea astfel de valori:

1) Microsoft SQL Server înlocuiește automat valoarea null dacă nu au fost introduse valori în valoarea câmpului și tipul de date pentru acel câmp nu împiedică atribuirea valorii null;

2) sau dacă utilizatorul introduce în mod explicit o valoare nul .

2.3. Operatorul de comparație de înregistrare ca

Operatorul de comparație ca este necesar pentru a căuta înregistrări folosind un model dat. Această sarcină este una dintre cele mai comune sarcini - de exemplu, căutarea unui client cu un nume de familie cunoscut într-o bază de date.

Să presupunem că în tabelul „Turiști” care conține câmpurile „Nume”, „Prenume” și „Patronimic”, doriți să găsiți înregistrările clienților

cu numele de familie care încep cu litera „I”.

Orez. 35. Interogare cu operator asemănător selectați Nume, Prenume, Patronimic de la Turiști unde Numele Ca „Și%”

Rezultatul acestei interogări va fi tabelul prezentat în Figura 35.

Operatorul like conține modele care vă permit să obțineți rezultate diferite (Tabelul 7).

Tabelul 7 La fel ca șabloanele de operator

2.4. Comenzi pentru definirea datelor SQL

Până acum, ne-am familiarizat doar cu munca unor comenzi din limbajul SQL pentru a extrage tabele și date din tabele, presupunând că tabelele în sine au fost create de cineva mai devreme. Aceasta este cea mai realistă situație în care un grup mic de oameni (designeri de baze de date) creează tabele care sunt apoi folosite de alte persoane. Aceste comenzi aparțin unei zone a SQL numită DML (Data Manipulation Language). Cu toate acestea, există o zonă specială a SQL numită DDL (Data Definition Language) care funcționează în mod special la crearea obiectelor de date.

Tabelele sunt create cu comanda create table. Această comandă creează un tabel gol. Comanda create table specifică numele tabelului, coloanele tabelului ca descrieri ale unui set de nume de coloane specificate într-o anumită ordine și poate defini, de asemenea, cheile primare și secundare ale tabelului. De asemenea, specifică tipurile de date și dimensiunile coloanelor. Fiecare tabel trebuie să conțină cel puțin o coloană.

Exemplu de comanda create table :create table ClientInfo (

FirstName varchar(20), LastName varchar(20), Adresa varchar(20), Telefon varchar(15));

Tipul varchar este conceput pentru a stoca caractere non-Unicode. Numărul din paranteze determină dimensiunea maximă a câmpului și poate varia de la 1 la 8000. Dacă valoarea câmpului introdusă este mai mică decât valoarea rezervată, la salvare va fi alocată o cantitate de memorie egală cu lungimea valorii. După rularea acestei solicitări, în fereastra Mesaje apare următorul mesaj:

Comenzile au fost finalizate cu succes.

După repornirea Management Studio, a apărut un nou tabel în lista de tabele (Fig. 36).

Deci, a fost creat un tabel format din patru câmpuri de tip varchar, iar pentru trei câmpuri a fost definită o lungime maximă de 20 de octeți, iar pentru unul - 15. Valorile câmpurilor nu sunt completate - acest lucru este indicat de valoarea Null.

Puteți șterge tabelul creat direct în inter-

Face Management Studio făcând clic dreapta și selectând „Șterge

se toarnă”. Orez. 36. Tabel creat în baza de date

2.5. Comenzi de modificare a datelor DML

Valorile pot fi plasate și eliminate din câmpuri folosind trei comenzi DML (Data Manipulation Language):

inserare (inserare),

actualizare (modificare),

şterge (şterge).

Comanda de inserare are propriile sale particularități.

1) Când specificați valori pentru anumite câmpuri, puteți utiliza cuvântul cheie DEFAULT în loc să utilizați orice valoare.

2) Inserarea unui șir gol are ca rezultat adăugarea unui spațiu mai degrabă decât o valoare

3) Șirurile și datele sunt date în apostrofe.

4) Puteți seta NULL în mod explicit sau puteți seta DEFAULT.

De exemplu:

inserați în ClientInfo (Prenume, Prenume, Adresă, Telefon) valori ("Petr","Petrov","Chehova 13","1234567");

Rularea acestei interogări o dată (apăsând o dată pe F5) are ca rezultat adăugarea unei înregistrări. Să mai adăugăm câteva intrări, schimbând valorile:

inserați în ClientInfo (Prenume, Prenume, Adresă, Telefon) valori ("Ivan","Ivanov","Naberejnaya 13","1234568");

inserați în ClientInfo (Prenume, Prenume, Adresă, Telefon) valori (null,"Sidorov","Naberejnaya 25","1234569");

Să extragem toate înregistrările tabelului creat (Fig. 37): selectați * din ClientInfo;

Orez. 37. Toate intrările din tabelul ClientInfo

Rețineți că a treia linie conține o valoare nulă și nu un șir de text

Comanda de actualizare vă permite să modificați valorile specificate ale înregistrărilor: update ClientInfo set FirstName = "Andrey" unde FirstName = "Petr";

În acest caz, în prima intrare a câmpului FirstName, valoarea Petr se va schimba în

Andrei (Fig. 38).

Orez. 38. Modificarea unei intrări

Rețineți că, dacă nu specificați o condiție care specifică valoarea de schimbat, comanda de actualizare va afecta toate înregistrările.

Comanda de ștergere elimină înregistrările dintr-un tabel. ștergeți din ClientInfo unde LastName ca „Petrov”;

Rezultatul acestei interogări va fi ștergerea primei înregistrări din tabel

Dacă nu specificați o condiție care specifică datele de șterse, toate datele din tabel vor fi șterse.

Interogările cu comenzile de inserare, actualizare și ștergere pot conține toate celelalte constructe SQL.

2.6. Întrebări și teme de testare pentru secțiunea 2

1. Scrieți interogări SQL pentru a afișa conținutul tuturor tabelelor bazei de date (fiecare tabel are propria sa interogare, vezi exemplul din secțiunea 2.1.select * din Turiști; ).

2. Adăugați sortarea după nume și prenume la solicitările de sarcini corespunzătoare la pasul 1.

3. Ce va fi afișat ca urmare a executării următoarei interogări:

selectați Nume, Prenume, Patronimic din Turiști ordonați după Prenume dec, Patronimic asc; ?

4. Scrieți o interogare SQL care vă va permite să selectați toți turiștii care locuiesc într-un anumit oraș. Utilizați sortarea la ieșire.

5. Numără turiștii cu aceleași nume.

7. Cum se stabilește prețul mediu pentru excursiile la Paris (de exemplu, prețul poate varia în funcție de sezon)?

8. Cum va arăta tabelul „Turiști” după ce ați completat următoarele

Comenzi SQL: update Turists set Name = "Vladimir"?

9. Ce se va întâmpla cu masa „Turiști” după execuție Comenzi SQL: ștergeți din turiști unde patronimic ca „Ivan”?

10.Ce se va întâmpla cu tabelul „Tururi” după executarea comenzii SQL: șterge din Tururi?

11. Folosind o interogare SQL în baza de date, aflați ce turiști nu au plătit încă pentru excursiile lor? Calculați numărul lor și suma totală a plății insuficiente.

12.Tipărește toate tururile oferite de agenția de turism în ordine alfabetică.

13. Folosind operatorul de actualizare, creați o comandă SQL pentru a redenumi orașul Ulyanovsk în Simbirsk în informațiile turistice.

14.Tipărește toate tururile oferite de agenția de turism cu anotimpurile.

15. Afișați informații complete despre turiștii care au achiziționat vouchere pentru un anumit tur și sezon.

16. Ținând cont de modificările aduse structurii bazei de date conform instrucțiunilor de la clauza 12 din secțiunea 1.5. construiți o interogare SQL care să afișeze informații complete de contact despre turiștii care au datorii de plătit pentru călătoriile lor.

17. Folosind operatorii de adăugare la baza de date, transferați informațiile relevante din relațiile „Turiști” și „Informații despre turiști” în relația

tion ClientInfo.

18.Formulați conținutul următoarelor interogări SQL în baza de date în limbaj natural:

selectează *din Turişti unde Namein ("Vladimir", "Ivan");selectează *din Sezonordonează după [Număr de locuri]dec ;

actualizare ClientInfoset FirstName = "Andrey" unde FirstName = NULL;

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva