Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • știri
  • Scopul limbajului SQL. Operatori de manipulare a datelor

Scopul limbajului SQL. Operatori de manipulare a datelor

Structure Query Language (SQL) a fost creat ca urmare a dezvoltării modelului de date relaționale și este în prezent standardul de limbaj de facto pentru DBMS relațional. Limbajul SQL de astăzi este susținut de un număr mare de SGBD de diferite tipuri.

Numele limbajului SQL este de obicei pronunțat prin literele „es-q-el”. Numele mnemonic „See-Quel” este uneori folosit.

Limbajul SQL oferă utilizatorului (cu un efort minim din partea lui) următoarele caracteristici:

Creați baze de date și tabele cu o descriere completă a structurii acestora

Efectuați operațiuni de bază de manipulare a datelor: inserarea, modificarea, ștergerea datelor

Efectuați atât interogări simple, cât și complexe.

Limbajul SQL este complet relațional.

Structura și sintaxa comenzilor sale sunt destul de simple, iar limbajul în sine este universal, adică sintaxa și structura comenzilor sale nu se schimbă la trecerea de la un SGBD la altul.

Limbajul SQL are două componente principale:

DDL (Data Definition Language) pentru definirea structurilor bazei de date și controlul accesului la date

DML (Data Manipulation Language) este folosit pentru a prelua și actualiza datele.

SQL este un limbaj non-procedural, adică atunci când îl utilizați, trebuie să specificați ce informații vor fi obținute, și nu cum pot fi obținute. Comenzile SQL sunt cuvinte obișnuite în limba engleză (SELECT, INSERT etc.). Luați în considerare mai întâi instrucțiunile SQL DML:

SELECT - preluarea datelor din baza de date

INSERT - inserarea datelor într-un tabel

UPDATE - actualizarea datelor dintr-un tabel

DELETE - ștergerea datelor dintr-un tabel

instrucțiunea SELECT

Instrucțiunea SELECT efectuează acțiuni echivalente cu următoarele operații de algebră relațională: select, project și join.

Cea mai simplă interogare SQL care o folosește arată astfel:

SELECT COL_name FROM tbl

Cuvântul cheie select este urmat de o listă de coloane separate prin virgulă ale căror date vor fi returnate ca rezultat al interogării. Cuvântul cheie from specifică din ce tabel (sau vizualizare) sunt preluate datele.

Rezultatul unei interogări de selectare este întotdeauna un tabel, care se numește tabel cu rezultate. Mai mult, rezultatele unei interogări executate cu o instrucțiune select pot fi folosite pentru a crea un tabel nou. Dacă rezultatele a două interogări pe tabele diferite au același format, acestea pot fi combinate într-un singur tabel. De asemenea, tabelul obținut în urma unei interogări poate deveni subiect de interogări ulterioare.

Pentru a selecta toate coloanele și toate rândurile unui tabel, este suficient să emiti un SELECT * FROM tbl;

Luați în considerare un tabel de produse care conține informații despre preț pentru diferite produse:

Solicitați rezultatul

SELECT * FROM Produs;

va fi întregul produs de masă.

Puteți selecta anumite coloane ale unui tabel folosind o interogare

SELECT col1, col2, … , coln FROM tbl;

Deci, rezultatul interogării

SELECTează tipul, prețul din produs;

va fi o masă

Se apelează și la lista coloanelor din instrucțiunea select dacă este necesar să se schimbe ordinea coloanelor din tabelul rezultat:

Pentru a selecta doar acele rânduri de tabel care îndeplinesc anumite restricții, se folosește cuvântul cheie special unde, urmat de o condiție logică. Dacă intrarea îndeplinește această condiție, este inclusă în rezultat. În caz contrar, intrarea este eliminată.

De exemplu, selectarea acelor produse din tabelul Produs al căror preț satisface condiția Preț<3200, можно осуществить, используя запрос

SELECTAȚI * DIN Produs unde Preț<3200;

Rezultatul lui:

Condiția poate fi compusă și combinată folosind operatorii logici NOT , AND, OR, XOR, de exemplu: unde id_ Price>500 AND Price<3500. Допускается также использование выражений в условии: where Price>(1+1) și constante de șir: unde name= "autobalances".

Utilizarea constructului BETWEEN var1 AND var2 vă permite să verificați dacă valorile unei expresii se încadrează în intervalul de la var1 la var2 (inclusiv aceste valori):

SELECTAȚI * FROM Produs la care Prețul INTRE 3000 SI 3500;

Prin analogie cu operatorul NOT BETWEEN, există operatorul NOT IN.

Numele de coloane specificate în clauza SELECT pot fi redenumite. Pentru aceasta se folosește cuvântul cheie AS, care, totuși, poate fi omis, întrucât este implicit subînțeles. De exemplu, o cerere

SELECT Tip AS model, Type_id AS num FROM Product unde Type_id =3

va reveni (numele de alias trebuie scrise fără ghilimele):

Operatorul LIKE este pentru a compara un șir cu un model:

SELECT * FROM tbl unde col_name LIKE "abc"

Această interogare returnează numai înregistrări care conțin valoarea șirului abc în coloana col_name.

În model sunt permise două caractere wildcard: „_” și „%”. Primul dintre ele înlocuiește un caracter arbitrar din șablon, iar al doilea înlocuiește o secvență de caractere arbitrare. Deci, „abc%” se potrivește cu orice șir care începe cu abc, „abc_” se potrivește cu orice șir de 4 caractere care începe cu abc, „%z” se potrivește cu orice șir care se termină cu z și, în final, „%z%” - secvențe de caractere care conțin z.

Puteți găsi toate înregistrările în tabelul Produs, unde valoarea Tip începe cu litera „a” după cum urmează:

SELECT * FROM Produs unde Tip LIKE „a%”;

cântare de camion

Dacă șirul de căutare conține un caracter wildcard, atunci trebuie să specificați un caracter de control în clauza ESCAPE. Acest caracter de control trebuie utilizat în modelul înainte de caracterul wildcard, indicând faptul că acesta din urmă trebuie tratat ca un caracter obișnuit. De exemplu, dacă doriți să găsiți toate valorile care conțin caracterul „_” într-un anumit câmp, atunci modelul „%_%” va returna toate înregistrările din tabel. În acest caz, șablonul trebuie scris după cum urmează:

"%|_%" ESCAPE "|"

Pentru a verifica dacă valoarea se potrivește cu șirul „20%”, puteți utiliza următorul operator:

LIKE „20#%” ESCAPE „#”

Operatorul IS NULL vă permite să verificați absența (prezența) unei valori NULL în câmpurile unui tabel. Utilizarea operatorilor normali de comparare în aceste cazuri poate duce la rezultate incorecte, deoarece comparația cu NULL are ca rezultat UNKNOWN (necunoscut). Astfel, condiția de selecție ar trebui să arate astfel:

unde col_name ESTE NULL în loc de unde col_name=NULL.

Rezultatul implicit de preluare returnează înregistrările în aceeași ordine în care sunt stocate în baza de date. Dacă doriți să sortați înregistrările după una dintre coloane, trebuie să utilizați clauza ORDER BY, după care este indicat numele acestei coloane:

SELECT * FROM tbl ORDER BY col_name;

Ca rezultat al acestei interogări, înregistrările vor fi returnate în ordinea crescătoare a valorii atributului col_name.

Înregistrările pot fi, de asemenea, sortate după mai multe coloane. Pentru a face acest lucru, numele lor trebuie specificate după ORDER BY, separate prin virgule:

SELECTAȚI * FROM tbl ORDER BY col_name1, col_name2.

Înregistrările vor fi sortate după câmpul col_name1; dacă există mai multe înregistrări cu aceeași valoare în coloana col_name1, atunci acestea vor fi sortate după câmpul col_name2.

Dacă doriți să sortați înregistrările în ordine inversă (de exemplu, după dată descrescătoare), trebuie să specificați ORDER BY col_name DESC.

Pentru sortarea directă, există cuvântul cheie ASC, care este acceptat ca valoare implicită.

Dacă rezultatul selecției conține sute și mii de înregistrări, producția și procesarea acestora necesită o perioadă semnificativă de timp.

Prin urmare, informațiile sunt adesea paginate și prezentate utilizatorului în bucăți. Paginarea este utilizată cu cuvântul cheie limită urmat de numărul de intrări de afișat. Următoarea interogare preia primele 10 înregistrări în timp ce sortează simultan înapoi în câmpul col_name1:

SELECTAȚI * FROM tbl ORDER BY col_name1 DESC LIMIT 10

Pentru extragerea următoarelor 10 înregistrări, cuvântul cheie limit este folosit cu două valori: prima specifică poziția din care se va afișa rezultatul, iar a doua specifică numărul de înregistrări de preluat:

SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10,10

Pentru a prelua următoarele 10 înregistrări, utilizați construcția LIMIT 20, 10.

In acest capitol...

  • Ce este SQL
  • Concepții greșite SQL
  • O privire asupra diferitelor standarde SQL
  • Introducere în comenzile SQL standard și cuvintele rezervate
  • Reprezentând numere, simboluri, date, ore și alte tipuri de date
  • Valori nule și restricții
  • Utilizarea SQL într-un sistem client/server
  • SQL pe web

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

Ce este SQL și ce nu este

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

Cu alte cuvinte, SQL este neprocedurale limba. Pentru a-l folosi pentru a rezolva o problemă, spuneți SQL, ce anume ai nevoie de parcă ai vorbi cu geniul din lampa lui Aladin. Și nu trebuie să spui Cum obține ceea ce vrei pentru tine. Sistemul de management al bazei de date (DBMS) va decide singur cum să vă îndeplinească cel mai bine cererea.

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

Pentru a ilustra ce am vrut să spun când am spus „spune sistemului exact ce vrei”, să presupunem că ai un tabel ANGAJAT cu datele angajaților și vrei să selectezi din el toate rândurile care se potrivesc cu toți angajații „senior”. Lucrătorii „seniori” pot însemna orice persoană care are peste 40 de ani sau care câștigă mai mult de 60.000 de dolari pe an. Selectarea de care aveți nevoie poate fi făcută folosind următoarea interogare:

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

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

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

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

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

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

Structured Query Language (limbaj de interogare structurat) sau SQL- este un limbaj de programare declarativ pentru utilizare în baze de date cvasi-relaționale. Multe dintre caracteristicile originale ale SQL au fost preluate de calculul tuplu, dar extensiile recente ale SQL includ din ce în ce mai multă algebră relațională.
SQL a fost creat inițial de IBM, dar mulți furnizori și-au dezvoltat propriile dialecte. A fost adoptat ca standard de Institutul Național American de Standarde (ANSI) în 1986 și de ISO în 1987. În standardul limbajului de programare SQL, ANSI a declarat că pronunția oficială a SQL este „es cue el”. Cu toate acestea, mulți specialiști în baze de date au folosit pronunția „slang” „Sequel”, reflectând numele inițial al limbii, Sequel, care a fost schimbat ulterior din cauza conflictelor privind mărcile comerciale și denumirea la IBM. Programare pentru incepatori.
limbaj de programare SQL a fost revizuită în 1992 și această versiune este cunoscută sub numele de SQL-92. Apoi 1999 a fost revizuit din nou pentru a deveni SQL: 1999 (AKA SQL3). Programare pentru manechini. SQL 1999 acceptă obiecte care nu erau suportate anterior în alte versiuni, dar abia la sfârșitul anului 2001, doar câteva sisteme de gestionare a bazelor de date au suportat implementări SQL: 1999.
SQL, deși este definit ca ANSI și ISO, are multe variații și extensii, dintre care majoritatea au propriile caracteristici, cum ar fi implementarea „PL/SQL” a corporației Oracle sau implementarea Sybase și Microsoft numită „Transact-SQL”, care poate încurcă utilizatorul.bazele programării. De asemenea, nu este neobișnuit ca implementările comerciale să omite suportul pentru caracteristicile cheie ale standardului, cum ar fi tipuri de date, cum ar fi data și ora, în favoarea unora dintre ele. Ca rezultat, spre deosebire de ANSI C sau ANSI Fortran, care de obicei pot fi portate de la platformă la platformă fără modificări structurale majore, interogările limbajului de programare SQL pot fi portate rareori între diferite sisteme de baze de date fără modificări majore. Majoritatea oamenilor din domeniul bazelor de date cred că această lipsă de interoperabilitate este intenționată pentru a oferi fiecărui dezvoltator propriul sistem de gestionare a bazelor de date și a lega cumpărătorul de o anumită bază de date.
După cum sugerează și numele, limbajul de programare SQL este conceput pentru un scop specific, limitat - interogarea datelor conținute într-o bază de date relațională. Ca atare, este un set de instrucțiuni de limbaj de programare pentru crearea de mostre de date, mai degrabă decât un limbaj procedural precum C sau BASIC, care sunt concepute pentru a rezolva o gamă mult mai largă de probleme. Extensiile de limbaj precum „PL/SQL” sunt concepute pentru a aborda această limitare prin adăugarea de elemente procedurale la SQL, păstrând în același timp beneficiile SQL. O altă abordare este de a permite interogărilor SQL să încorporeze comenzile limbajului de programare procedural și să interacționeze cu baza de date. De exemplu, Oracle și alții acceptă limbajul Java în baza de date, în timp ce PostgreSQL permite ca funcțiile să fie scrise în Perl, Tcl sau C.
O glumă SQL: „SQL nu este nici structurat, nici limbaj”. Ideea glumei este că SQL nu este un limbaj Turing. .

Selectați * din T
C1 C2
1 A
2 b
C1 C2
1 A
2 b
Selectați C1 din T
C1
1
2
C1 C2
1 A
2 b
Selectați * din T unde C1=1
C1 C2
1 A

Având în vedere un tabel T, o interogare Select * din T va afișa toate elementele tuturor rândurilor din tabel.
Din același tabel, o interogare Select C1 from T va afișa elementele din coloana C1 a tuturor rândurilor din tabel.
Din același tabel, interogarea Select * din T unde C1=1 va afișa toate elementele tuturor rândurilor unde valoarea coloanei C1 este „1”.

Cuvinte cheie SQL

Cuvintele SQL sunt împărțite într-un număr de grupuri.

Primul este Limbajul de manipulare a datelor sau DML(limbaj de gestionare a datelor). DML este un subset al limbajului folosit pentru a interoga bazele de date, pentru a adăuga, actualiza și șterge date.

  • SELECT este una dintre cele mai frecvent utilizate comenzi DML și permite utilizatorului să specifice o interogare ca descriere a rezultatului dorit ca set. Interogarea nu specifică modul în care ar trebui să fie prezentate rezultatele - traducerea interogării într-o formă care poate fi făcută în baza de date este sarcina sistemului de baze de date, mai precis a optimizatorului de interogări.
  • INSERT este folosit pentru a adăuga rânduri (set formal) la un tabel existent.
  • UPDATE este folosit pentru a modifica valorile datelor dintr-un rând de tabel existent.
  • DELETE specifică rândurile existente care trebuie eliminate din tabel.

Se poate spune că alte trei cuvinte cheie se încadrează în grupul DML:

  • BEGIN WORK (sau START TRANZACȚIA, în funcție de dialectul SQL) poate fi folosit pentru a marca începutul unei tranzacții de bază de date care fie va rula complet, fie nu va rula deloc.
  • COMMIT afirmă că toate modificările de date după comiterea operațiunii sunt salvate.
  • ROLLBACK specifică că toate modificările datelor de la ultima comitere sau rollback ar trebui să fie distruse, până la punctul în care a fost trimis în baza de date ca „rollback”.

COMMIT și ROLLBACK sunt utilizate în domenii precum controlul tranzacțiilor și blocările. Ambele instrucțiuni completează toate tranzacțiile curente (seturi de operațiuni de bază de date) și eliberează toate blocările la modificarea datelor din tabele. Prezența sau absența unei instrucțiuni BEGIN WORK sau similare depinde de implementarea particulară a SQL.

Al doilea grup de cuvinte cheie se referă la grup Data Definition Language sau DDL (Data Definition Language). DDL permite utilizatorului să definească noi tabele și elemente aferente. Majoritatea bazelor de date SQL comerciale au propriile extensii DDL care permit controlul asupra elementelor non-standard, dar de obicei vitale ale unui anumit sistem.
Principalele puncte ale DDL sunt comenzile de creare și ștergere.

  • CREATE specifică obiectele (cum ar fi tabelele) care urmează să fie create în baza de date.
  • DROP specifică ce obiecte existente în baza de date vor fi abandonate, de obicei permanent.
  • Unele sisteme de baze de date acceptă și comanda ALTER, care permite utilizatorului să modifice un obiect existent în moduri diferite, cum ar fi adăugarea de coloane la un tabel existent.

Al treilea grup de cuvinte cheie SQL este Limbajul de control al datelor sau DCL (Limbajul de control al datelor). DCL este responsabil pentru drepturile de acces la date și permite utilizatorului să controleze cine are acces pentru a vizualiza sau manipula datele din baza de date. Există două cuvinte cheie principale aici:

  • GRANT - permite utilizatorului să efectueze operațiuni
  • REVOKE - elimină sau restricționează capacitatea utilizatorului de a efectua operațiuni.

Sisteme de baze de date folosind SQL

  • InterBase
  • MySQL
  • Oracol
  • PostgreSQL
  • SQL Server

Cum să devii un profesionist în dezvoltarea de site-uri web și să începi să câștigi? Cursuri video ieftine cu o introducere introductivă.

LIMBAJ SQL: MANIPULARE DATE

IN ACEASTA PRELEGERE...

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

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

· Înregistrarea declarațiilor limbajului SQL.

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

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

· aplicarea clauzei WHERE pentru selectarea rândurilor care satisfac diverse condiții;

sortarea rezultatelor executării interogării folosind constructul ORDER BY;

utilizarea funcțiilor de agregare ale limbajului SQL;

Gruparea datelor selectate folosind constructul GROUP BY;

Utilizarea subinterogărilor

Utilizarea îmbinărilor de tabele

· aplicarea operaţiilor cu mulţimi (UNIRE, INTERSECT, CU EXCEPŢIA).

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

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

Acest capitol folosește definiția ISO a limbajului SQL.

Introducere în SQL

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

Scopul limbajului SQL

Orice limbaj conceput pentru a funcționa cu baze de date ar trebui să ofere utilizatorului următoarele caracteristici:

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



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

Efectuați interogări simple și complexe.

În plus, limbajul bazei de date ar trebui să rezolve toate sarcinile de mai sus cu un efort minim din partea utilizatorului, iar structura și sintaxa comenzilor sale ar trebui să fie destul de simple și accesibile pentru învățare.

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

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

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

· Limbajul de manipulare a datelor (DML) pentru eșantionarea și actualizarea datelor.

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

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

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

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

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

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

De exemplu:

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

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

SELECT, [Nume obiect], [Cost];

DE LA [Vânzări]

UNDE [Cost] > 10000;

· Limbajul SQL poate fi folosit de o gamă largă de utilizatori, inclusiv de administratori de baze de date (DBA), directori de companie, programatori de aplicații și mulți alți utilizatori finali din diferite categorii.

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

Istoria limbajului SQL

Istoria modelului de date relaționale, și indirect a limbajului SQL, a început în 1970 cu publicarea unei lucrări fundamentale a lui E. F. Codd, care la acea vreme lucra la IBM Research Laboratory din San Jose. În 1974, D. Chamberlain, care a lucrat în același laborator, a publicat o definiție a unei limbi numită „Structured English Query Language” sau SEQUEL. În 1976, a fost lansată o versiune revizuită a acestui limbaj, SEQUEL/2; ulterior, numele său a trebuit să fie schimbat în SQL din motive legale - abrevierea SEQUEL era deja folosită de filologi. Dar până în ziua de azi, mulți oameni încă pronunță abrevierea SQL ca „sequel”, deși oficial se recomandă să o citiți ca „es-kyu-el”.

În 1976, pe baza limbajului SEQUEL / 2, IBM a lansat un prototip DBMS numit „System R”. Scopul acestui studiu a fost de a testa fezabilitatea implementării modelului relațional. Printre alte aspecte pozitive, dezvoltarea limbajului SQL în sine poate fi considerată cel mai important rezultat al acestui proiect, însă rădăcinile acestui limbaj se întorc la limbajul SQUARE (Specifying Queries as Rational Expressions), care a fost predecesorul Proiectul System R. Limbajul SQUARE a fost dezvoltat ca instrument de cercetare pentru implementarea algebrei relaționale prin fraze compuse în limba engleză.

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

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

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

În 1982, Institutul Național de Standarde al SUA (ANSI) a început să lucreze la Relation Database Language (RDL) pe baza documentelor conceptuale primite de la IBM. În 1983, Organizația Internațională pentru Standardizare (ISO) s-a alăturat acestei lucrări. Eforturile comune ale ambelor organizații au culminat cu lansarea standardului de limbaj SQL. Numele RDL a fost abandonat în 1984, iar schița de limbaj a fost reproiectată pentru a aproxima implementările existente ale limbajului SQL.

Versiunea originală a standardului, care a fost lansată de ISO în 1987, a provocat un val de critici. În special, Date, un cunoscut cercetător în acest domeniu, a subliniat că standardul a omis caracteristici importante, inclusiv facilități de integritate referențială și unii operatori relaționali.

În plus, el a remarcat redundanța excesivă a limbii - aceeași interogare ar putea fi scrisă în mai multe versiuni diferite. Majoritatea criticilor au fost recunoscute drept corecte, iar ajustările necesare au fost făcute standardului chiar înainte de publicarea acestuia. Cu toate acestea, s-a decis că este mai important să se lanseze standardul cât mai curând posibil, astfel încât să poată servi drept bază comună pe care atât limbajul în sine, cât și implementările sale să se poată dezvolta în continuare, decât să aștepte până când toate caracteristicile pe care diferiți experți le pot dezvolta. considera obligatorii au fost definite si convenite.pentru o astfel de limba.

În 1989, ISO a publicat un addendum la standard care definea funcțiile de suport pentru integritatea datelor. În 1992, a fost lansată prima revizuire majoră a standardului ISO, denumită uneori SQL2 sau SQL-92. Deși unele dintre caracteristici au fost definite pentru prima dată în acest standard, multe dintre ele au fost deja implementate integral sau parțial în una sau mai multe implementări comerciale ale limbajului SQL.

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

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

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

Deși conceptele originale ale limbajului SQL au fost dezvoltate de IBM, importanța acestuia i-a determinat foarte curând pe alți dezvoltatori să-și creeze propriile implementări. Există literalmente sute de produse bazate pe SQL disponibile pe piață astăzi și auziți despre lansarea din ce în ce mai multe versiuni tot timpul.

Funcționalitatea limbajului SQL

Principalele funcționalități ale limbajului SQL sunt prezentate mai jos.

Definirea datelor. Această funcție SQL este o descriere a structurii de date suportate și a organizării relațiilor relaționale (tabele). Pentru implementarea acestuia sunt destinati operatorii pentru crearea unei baze de date, crearea tabelelor si accesarea datelor.

Crearea bazei de date. Instrucțiunea CREATE DATABASE este utilizată pentru a crea o nouă bază de date. Structura instrucțiunilor specifică numele bazei de date care urmează să fie creată.

Crearea de tabele. Tabelul de bază este creat folosind instrucțiunea CREATE TABLE. Acest operator specifică numele câmpurilor, tipurile de date pentru acestea, lungimea (pentru unele tipuri de date). SQL utilizează următoarele tipuri de date:

INTEGER este un număr întreg;

CHAR - valoarea caracterului;

VARCHAR - valoarea caracterului, sunt stocate doar caracterele nevide;

DECIMAL - număr zecimal;

FLOAT - număr în virgulă mobilă;

DOUBLE PRECISION - virgulă flotantă de dublă precizie;

DATETIME - data și ora;

BOOL este o valoare booleană.

Declarația de creare a tabelului specifică restricții asupra valorilor coloanei și asupra tabelului. Posibilele restricții sunt prezentate în tabel. 4.8

Tabelul 4.8 Restricții privind datele definite

Pentru un model de date relaționale, este esențial să specificați o cheie străină (FOREIGNKEY). Când declarați chei străine, trebuie să impuneți constrângeri adecvate asupra coloanei, cum ar fi NOT NULL.

Într-o instrucțiune SQL, CHECK denotă constrângeri semantice care asigură integritatea datelor, cum ar fi limitarea setului de valori valide pentru o anumită coloană.

Nu puteți utiliza instrucțiunea create table de mai multe ori pe același tabel. Dacă, după crearea sa, s-au găsit inexactități în definiția sa, atunci se pot face modificări folosind instrucțiunea ALTER TABLE. Această declarație are scopul de a schimba structura unui tabel existent: puteți elimina sau adăuga un câmp la un tabel existent.

Manipulare de date. SQL permite unui utilizator sau aplicație să modifice conținutul unei baze de date prin inserarea de date noi, ștergerea sau modificarea datelor existente.

Inserarea de date noi este o procedură pentru adăugarea de rânduri la o bază de date și se realizează folosind instrucțiunea INSERT.

Modificarea datelor implică modificări ale valorilor într-una sau mai multe coloane ale unui tabel și se efectuează folosind instrucțiunea UPDATE. Exemplu:

SET suma=suma+1000,00

UNDE suma>0

Eliminarea rândurilor din tabel se face folosind instrucțiunea DELETE. Sintaxa operatorului este:

DE LA masă

Clauza WHERE este opțională, totuși, dacă nu este inclusă, atunci toate înregistrările din tabel vor fi șterse. Este util să folosiți instrucțiunea SELECT cu aceeași sintaxă ca și instrucțiunea DELETE pentru a verifica dinainte ce înregistrări vor fi șterse.

Asigurarea integritatii datelor. Limbajul SQL vă permite să definiți constrângeri de integritate destul de complexe, a căror satisfacție va fi verificată pentru toate modificările bazei de date. Controlul asupra rezultatelor tranzacțiilor, gestionarea erorilor care apar și coordonarea lucrului paralel cu baza de date a mai multor aplicații sau utilizatori este asigurat de instrucțiunile COMMIT (remediază încheierea cu succes a tranzacției curente și începutul uneia noi) și ROLLBACK necesitatea unei rollback - restaurarea automată a stării bazei de date la începutul tranzacției)

Eșantionarea datelor- una dintre cele mai importante funcții ale bazei de date, care corespunde instrucțiunii SELECT. Un exemplu de utilizare a operatorului a fost discutat în secțiunea anterioară.

În SQL, puteți crea secvențe imbricate de interogări (subinterogări). Există anumite tipuri de interogări care sunt cel mai bine implementate folosind subinterogări. Aceste interogări includ așa-numitele verificări ale existenței. Să presupunem că doriți să obțineți date despre studenții care nu au un scor de „șapte”. Dacă se returnează un set gol, atunci aceasta înseamnă un singur lucru - fiecare elev are cel puțin o astfel de evaluare.

Legătura de tabele. Instrucțiunile SQL vă permit să preluați date din mai mult de un tabel. O modalitate de a face acest lucru este să legați tabelele pe un singur câmp comun.

Instrucțiunea SELECT trebuie să conțină o restricție privind coincidența valorilor unei anumite coloane (câmp). Apoi numai acele rânduri în care se potrivesc valorile coloanei specificate vor fi preluate din tabelele aferente. Numele coloanei este indicat numai împreună cu numele tabelului; în caz contrar, operatorul va fi ambiguu.

Puteți utiliza alte tipuri de legături de tabele: operatorul INTER JOIN (inner join) asigură prezența în setul de înregistrări rezultat, potrivirea valorilor în câmpurile aferente. Îmbinările externe (OUTER JOIN) vă permit să includeți în rezultatul interogării toate rândurile dintr-un tabel și rândurile corespunzătoare din altul

Controlul accesului. SQL asigură sincronizarea procesării bazei de date de către diverse programe de aplicație, protecția datelor împotriva accesului neautorizat.

Accesul la date într-un mediu multi-utilizator este guvernat de declarațiile GRANT și REVOKE. În fiecare instrucțiune, trebuie să specificați utilizatorul, obiectul (tabel, vizualizare), în raport cu care sunt setate permisiunile și permisiunile în sine. De exemplu, instrucțiunea GRANT oferă utilizatorului X posibilitatea de a prelua date din tabelul PRODUCT:

Acordați SELECTARE PE PRODUS LUI X

Declarația REVOKE revocă toate permisiunile acordate anterior.

Încorporarea SQL în programele de aplicație. Aplicațiile reale sunt de obicei scrise în alte limbi care generează cod SQL și îl transmit DBMS ca text ASCII.

Standardul IBM pentru produsele SQL specifică utilizarea SQL încorporat. Când scrieți un program de aplicație, textul acestuia este un amestec de comenzi ale limbajului principal de programare (de exemplu, C, Pascal, Cobol, Fortran, Assembler) și comenzi SQL cu un prefix special, de exemplu. ExecSQL. Structura instrucțiunilor SQL a fost extinsă pentru a se adapta variabilelor limbajului gazdă în constructele SQL.



Procesorul SQL modifică forma programului în conformitate cu cerințele compilatorului limbajului principal de programare. Funcția unui compilator este de a traduce (traduce) un program dintr-un limbaj de programare sursă într-un limbaj apropiat unui limbaj de mașină. După compilare, programul aplicat (aplicația) este un modul independent.

Dialecte SQL

În SGBD relațional modern, dialectele limbajului SQL sunt folosite pentru a descrie și manipula datele. Un subset al limbajului SQL care vă permite să creați și să descrieți o bază de date se numește DDL (Data Definition Language).

SQL a fost inițial numit SEQUEL (Structured English Query Language), apoi SEQUEL/2 și apoi doar SQL. Astăzi, SQL este standardul de facto pentru sistemele de management al bazelor de date relaționale.

Primul standard de limbaj a apărut în 1989 - SQL-89 și a fost susținut de aproape toate SGBD-urile relaționale comerciale. Era de natură generală și permitea o interpretare largă. Avantajele SQL-89 pot fi considerate standardizarea sintaxei și semanticii operatorilor de selecție și manipulare a datelor, precum și fixarea mijloacelor de limitare a integrității bazei de date. Cu toate acestea, lipsea o secțiune atât de importantă precum manipularea schemei bazei de date. Incompletitudinea standardului SQL-89 a dus la apariția în 1992 a următoarea versiune a limbajului SQL.

SQL2 (sau SQL-92) acoperă aproape tot ce aveți nevoie: manipularea schemei bazei de date, gestionarea tranzacțiilor și a sesiunilor, arhitecturi client-server sau instrumente de dezvoltare a aplicațiilor.

Următorul pas în dezvoltarea limbajului este varianta SQL 3. Această versiune a limbajului este completată de un mecanism de declanșare, definirea unui tip de date arbitrar și o extensie de obiect.

În prezent, există trei niveluri de limbă: începător, intermediar și complet. Mulți furnizori de baze de date folosesc propriile implementări de SQL, bazate cel puțin pe nivelul inițial al standardului ANSI relevant și care conțin unele extensii specifice unui anumit SGBD. În tabel. 4.9 prezintă exemple de dialecte SQL.

Tabelul 4.9 Dialecte SQL

SGBD Limbajul de interogare
Sistemul DBMS R SQL
DB2 SQL
Acces SQL
SYBASE SQL oriunde watcom-sql
SYBASE SQL Server Transact_SQL
MySQL SQL
Oracol PL/SQL

Bazele de date orientate pe obiecte folosesc limbajul de interogare obiect OQL (Object Query Language). Limbajul OQL s-a bazat pe comanda SQL2 SELECT și a adăugat capacitatea de a trimite o interogare la un obiect sau o colecție de obiecte, precum și capacitatea de a apela metode într-o singură interogare.

Compatibilitatea multor dialecte SQL utilizate determină compatibilitatea DBMS. Astfel, SGBD-ul SYBASE SQL Anywhere este cât se poate de compatibil pentru un SGBD din această clasă cu SGBD-ul SYBASE SQL Server. Una dintre laturile acestei compatibilități este suportul în SYBASE SQL Anywhere a unui astfel de dialect al limbajului SQL precum Transact SQL. Acest dialect este folosit în SYBASE SQL Server și poate fi folosit în SYBASE SQL Anywhere împreună cu propriul dialect al limbajului SQL - watcom-sql.

întrebări de testare

1. Cum poate fi clasificat un SGBD?

2. Ce modele de baze de date există?

3. Care sunt principalele elemente ale modelelor infologice?

4. Ce tipuri de relații există între entități?

5. Ce sunt diagramele ER și pentru ce sunt folosite?

6. Ce vă permite să faceți procedura de normalizare a tabelului?

7. Care sunt limbajul și instrumentele software ale SGBD?

8. Ce tip de SGBD este MS Access?

9. Care sunt principalele obiecte ale MS Access DBMS?

10. Pentru ce sunt folosite instrucțiunile SQL de bază?

Top articole similare