Sunteți pe pagina 1din 13

Limbajul SQL SQL este un instrument pentru organizarea, administrarea i obinerea informaiilor stocate ntr-o baz de date.

Numele SQL este o abreviere pentru Structured Query Language. Din motive istorice, SQL se pronun de obicei sequel dar se utilizeaz, de asemenea, i pronunia "S.Q.L." . Aa cum arat i numele, SQL este un limbaj utilizat pentru a interaciona cu baza de date. De fapt, SQL lucreaz numai cu un anumit tip de baze de date, numite baze de date relaionale.

Figura 1.1 Utilizarea limbajului SQL pentru accesul la la baza de date Figura 1.1 ne arat cum lucreaz SQL. Sistemul informatic din figur conine o baz de date care stocheaz informaiiile importante ale ntreprinderii. (De exemplu, date depre produse, vanzri, pli etc.). Cnd trebuie s obinem date din baza de date, utilizm limbajul SQL pentru a efectua o cerere ctre DBMS. DBMS (SGBD) proceseaz cererea SQL, obine datele cerute i ni le returneaz. Acest proces de solicitare de date din baza de date i de obinere (recepionare) a rezultatelor se numete interogare a bazei de date (database query) de aici i denumirea de Structured Query Language. Utilizarea denumirii de Structured Query Language este, n prezent, oarecum improprie. 1. n primul rnd, SQL este mai mult dect un instrument de interogare, dei acesta a fost scopul su iniial iar obinerea informaiilor stocate n baza de date este, n continuare, una dintre funciile sale cele mai importante. SQL este utilizat pentru a controla toate funciile pe care DBMS (SGBD) le pune la dispoziia utilizatorilor, incluznd : Definirea datelor. SQL permite utilizatorilor s defineasc structura datelor stocate n baza de date, precum i relaiile dintre aceste date. Obinerea datelor. SQL utilizatorilor sau programelor de aplicaie s obin i s utilizeze informaiile stocate n baza de date.

Manipularea datelor. SQL utilizatorilor sau programelor de aplicaie s actualizeze baza de date, prin adugarea de noi date, tergerea sau modificarea datelor existente Controlul accesului. SQL poate fi utilizat pentru a restriciona dreptul utilizatorilor de a obine, aduga sau modifica datele, protejnd astfel datele stocate mptriva accesului neautorizat. Partajarea datelor. SQL este utilizat pentru a coordona accesul concurent al utilizatoriilor la date, garantnd astfel c ei nu vor interfera. Integritatea datelor. SQL permite definirea restriciilor de integritate n baza de date, protejndu-le astfel mpotriva incorectudinii datorate actualizrilor inconsistente sau cderilor sistemului. SQL este un limbaj cuprinztor pentru controlul i interaciunea cu DBMS. 2. n al doilea rnd, SQL nu este un limbaj de programare complet, ca limbajele C, C++, Java ntruct nu conine instruciuni de control (IF, FOR etc.). SQL este un sublimbaj pentru baze de date, cuprinznd aproximativ patruzeci de instruciuni specializate pentru efectuarea operaiilor asupra bazelor de date. Aceste instruciuni SQL pot fi integrate n alte limbaje, cum sunt Cobol i C (pentru a extinde funcionalitile acestora permindu-le accesul la baze de date) sau pot fi trimise explicit ctre SGBD pentru a fi procesate (ca n cazul limbajelor C, C++, Java). 3. SQL nu este un limbaj structurat, mai ales dac l comparm cu limbajele puternic structurate, ca C, Pascal sau Java. Instruciunile SQL seamn cu propoziiile din limba englez i se termin cu caracterul ; . SQL este un limbaj standard pentru utilizarea bazelor de date relaionale. SQL este att un limbaj puternic ct i uor de nvat. Rolul limbajului SQL SQL nu este un produs de sine stttor ci este parte integrat a unui SGBD ; este un limbaj i un instrument pentru comunicarea cu SGBD. Figura 1.2 ne arat cteva dintre componentele unui SGBD (DBMS) tipic i cum SQL acioneaz ca un liant ntre acestea, pentru a le interconecta. Motorul de baze date este componeta pricipal ("inima") a SGBD-ului, responsabil pentru structura, stocarea i obinerea datelor din baza de date. El accept cereri SQL de la alte componente ale SGBD-ului (cum sunt utilitarele pentru realizarea formularelor, ntocmirea rapoartelor, interogarea interactiv), de la programe de aplicaie sau chiar de la alte calculatoare. Aa cum arat figura, SQL ndeplinete mai multe roluri : SQL este un limbaj de interogare interactiv . Utilizatorul scrie comenzi SQL ntr-un program SQL interactiv pentru a obine date i pentru a le afia pe ecran ; se obine astfel un instrument uor de folosit pentru interogarea ad-hoc a bazei de date. SQL este un limbaj de programare pentru baze de date. Programatorii includ comenzi SQL n programele lor pentru a accesa baza de date. Att programele de aplicaie scrise de ctre utilizator ct i programele utilitare (cum sunt cele pentru realizarea formularelor sau ntocmirea de rapoarte) utilizeaz aceast tehnic pentru a accesa baza de date. 2

Figura 1.2 Componentele unui DBMS tipic SQL este un limbaj de administrare a bazelor de date. Administratorul bazei de date utilizeaz SQL pentru a defini structura bazei de date i pentru a controla accesul la datele stocate. SQL este un limbaj client/server. Programele pentru PC-uri (Personal Comuter) utilizeaz SQL pentru a comunica prin reea cu serverul de baze de date care partajeaz datele. Acest arhitectur client/server a devenit foarte popular pentru aplicaiile de ntreprindere. SQL este un limbaj de accesare a datelor prin intemediul Internetului. Serverele Web care interacioneaz cu datele pe care le stocheaz i serverele de aplicaii Internet utilizeaz SQL ca un limbaj standard pentru accesarea datelor. SQL este un limbaj pentru baze de date distribuite. Sistemele de gestiune a bazelor de date distribuite utilizeaz SQL pentru a ajuta distribuirea datele pe mai multe calculatoare interconectate. Softul SGBD de pe fiecare sistem de calcul utilizeaz SQL pentru a comunica cu celelalte sisteme, trimind cereri pentru accesarea datelor. SQL este un limbaj gateway ("poart") pentru baze de date. ntr-o reea care reunete produse SGBD diferite, SQL este adesea utilizat ntr-o poart care permite unui tip de SGBD s comunice cu unul de un alt tip.

SQL apare astfel ca un instument util i puternic, care permite accesul persoanelor, programelor de aplicaie i sistemelor de calcul la datele stocate ntr-o baz de date relaional. Instruciuni Limbajul SQl conine aproximativ 40 de instruciuni. Fiecare instruciune presupune o aciune specific asupra bazei de date, cum ar fi crearea unei noi tabele, obinerea informaiilor sau inserarea de noi date n baza de date. Toate instruciunile SQL au aceeai form de baz, ilustrat n Figura 1.3.

Figura 1.3 Structura unei instruciuni SQL Principalele instruciuni SQL Instruciune Manipularea Datelor SELECT date INSERT DELETE UPDATE date Definirea Datelor CREATE TABLE Adaug o nou tabel la baza de date 4 Extrage (obine) informai din baza de Adaug linii noi n baza de date terge linii din baza de date Modific datele existente n baza de Descriere

DROP TABLE ALTER TABLE existente CREATE VIEW DROP VIEW CREATE INDEX DROP INDEX CREATE SCHEMA DROP SCHEMA CREATE DOMAIN ALTER DOMAIN DROP DOMAIN Controlul Accesului GRANT REVOKE utilizatorilor Controlul Tranzaciilor COMMIT

terge o tabel din baza de date Modific structura unei tabele deja Adaug o nou vedere la baza de date terge o vedere din baza de date Creeaz un index pentru o coloan terge indexul asociat unei coloane Adaug o nou schem la baza de date terge o schem din baza de date Creeaz un nou domeniu de valori Modific definiia unui domeniu terge un domeniu din baza de date

Acord drepturi de acces utilizatorilor terge drepturile de acces ale

ncheie tranzacia curent tranzacia curent i se sistemului dinainte

ROLLBACK Se renun la revine la starea de nceperea tranzaciei SET TRANSACTION date pentru SQL Programatic DECLARE

Definete caracteristicile accesului la tranzacia curent

Definete un cursor pentru o interogare

EXPLAIN o interogare

Descrie planul de acces la date pentru

OPEN Deschide un cursor pentru a obine datele unei interogri FETCH interogri CLOSE Extrage o linie din rezultatul unei nchide un cursor

Fiecare instruciune SQL ncepe cu un verb, un cuvnt rezervat care descrie ce face instruciunea. . CREATE, INSERT, DELETE, i COMMIT sunt verbele obinuite. Instruciunea continu cu una sau mai multe clauze. O clauz poate specifica datele asupra crora opereaz instruciunea sau poate furniza mai multe detalii asupra a ceea ce face instruciunea. Fiecare clauz incepe cu un cuvnt rezervat, cum sunt WHERE, FROM, INTO i HAVING. Unele clauze sunt opionale n timp ce altele sunt obligatorii. Structura i coninutul variaz de la o clauz la alta. Multe dintre clauze conin nume de tabele sau coloane ; unele dintre ele pot conine cuvinte cheie suplimentare, constante sau expresii. Tipuri de dat Standardul ANSI/ISO SQL precizeaz care sunt tipurile de dat care pot fi stocate n baza de date i manipulate de ctre limbajul SQL. Standardul iniial, SQL1, specifica numai un set minimal de tipuri de dat. Standardul SQL2 extinde lista, incluznd iruri de caractere de lungime variabil, date calendaristice i timp, iruri de bii i alte tipuri. SGBD-urile actuale pot prelucra o varietate larg de tipuri de dat i exist diferene considerabile ntre tipurile de dat suportate de SGBD-uri diferite. Tipurile de dat tipice includ : ntregi. Numere zecimale Numere care au parte fracionar dar care trebuie calculat exact. Numere n virgul mobil Numere reale exprimate n form tiinific i care pot fi calculate cu aproximaie. iruri de caractere cu lungime fix. iruri de caractere cu lungime variabil. Sume de bani. Date calendaristice i timp. Date de tip boolean. Text lung- iruri de caractere cu lungime mai mare de 32.000 sau 65.000 de caractere. iruri de bii Utilizate pentru reprezentarea n memorie a imaginilor video, a secvenelor de cod executabil etc. Interogri simple

Interogrile reprezint "inima" limbajului SQL. Instruciunea SELECT, care este utilizat pentru a exprima interogrile, este cea mai puternic i complex dintre instruciunile SQL. Cu toate c instruciunea SELECT ne ofer multiple opiuni, vom pleca de la interogri simple i apoi von construi interogri din ce n ce mai complexe. Acest paragraf trateaz interogri SQL care extrag date dintr-o singur tabel.

Instruciunea SELECT Instruciunea SELECT extrage date din baza de date i le returneaz utilizatorului sub form de "rezultat al interogrii ". Exemplele prezentate n continuare se refer la o baz de date pentru o companie mic de distribuie. Baza de date, prezentat n Figura 1.4, stocheaz informaii despre : Clieni - Persoane care cumpr produse ale companiei. Comenzi Comenzi fcute de clienii companiei. Ageni de vnzri Persoane care vnd produsele companiei. Birouri de vnzri Birourile n care lucreaz agenii de vnzri.

Figura 1.4 Baza de date pentru compania de distribuie S se afieze birourile de vnzri mpreun cu vnzrile curente.

Instruciunea SELECT pentru o interogare simpl ca aceasta, include doar dou clauze obligatorii. Clauza SELECT pecizeaz numele coloanelor cerute; clauza FROM precizeaz tabelele care conin aceste coloane. Cmpuri calculate n plus fa de colanele ale cror valori se extrag direct din baza de date, o interogare SQL poate include coloane calculate, a cror valoare este determinat pe baza valorilor stocate n baza de date. Pentru a obine o coloan calculat specificm o expresie QSL n lista de selecie. O expresie SQL poate include adunri, scderi, nmuliri i mpriri. n plus, se pot utilize parantezele pentru a construi expresii mai complexe. Coloanele referite n expresii artimetice trebuie s fie de tip artimetic. Dac ncercm s adunm, scdem, nmuli sau mpri coloane care conin date de tip text, SQL va raporta o eroare. S se afieze oraul, regiunea i cantitatea aflat peste/sub planul de vnzri pentru fiecare birou.

Pentru a procesa interogarea, SQL parcurge birourile, genernd n rezultat cte o linie pentru fiecare linie din tabela OFFICES. Primele dou coloane ale rezultatului vin direct din tabela OFFICES. A treia coloan a rezultatului interogrii este calculat, linie cu linie, pe baza valorilor liniei curente din tabela OFFICES.

Figura 1.5 Procesarea unei interogri simple (fr clauza WHERE) Conceptual, SQL proceseaz interogarea parcurgnd tabela specifica n clauza FORM, linie cu linie, aa cum se arat n Figura 1.5. Pentru fiecare linie, SQL ia valorile coloanelor cerute n lista de selecie i produce o singur linie n rezultatul interogrii. Astfel, pentru fiecare linie din tabel exist o linie n rezultatul interogrii. S se afieze valoarea total pentru fiecare produs.

S se afieze numele, cota i valoarea mrit cu 3% din vnzrie anuale, pentru fiecare agent de vnzri.

10

Multe dintre produsele SQL furnizeaz operaii aritmetice suplimentare, operaii cu iruri de caractere i funcii predefinite care pot fi utilizate n expresiile SQL. Acestea pot fi utilizate n lista de selecie. S se afieze numele, luna i anul naterii pentru fiecare agent de vnzri.

Constantele SQL pot fi utilizate, de asemenea, n lista de selecie. Acest lucru poate fi util n obinerea de rezulatate ale interogrilor care s fie uor de citit i interpretat S se afieze vnzrile, pentru fiecare ora.

Prima i a treia coloan conin valori din tabela OFFICE. A doua coloan conine, ntotdeauna, un ir de caractere constant. Selectarea tuturor coloanelor Uneori este convenabil s afism coninutul tuturor coloanelor unei tabele. n particular, acest lucru poate fi util n cazul n care dorim s cunoatem repede structura unei tabele i 11

datele pe care aceasta le conine. Prin convenie, pentru a afia toate coloanele, plasm un asterisc ( * ) n locul listei de selecie. S se afieze toate informaiile din tabela OFFICES.

Rezultatul inerogrii conine toate cele ase coloane ale tabele OFFICES, n aceeai ordine de la stnga-la-dreapta ca i n tabela respectiv. Standardul ANSI/ISO SQL precizeaz c o instruciune SELECT poate avea fie o selecie de tip "all column" fie o list de selecie, dar nu pe amndou. Urmtoarea interogare produce acelai rezultat ca SELECT * FROM OFFICES.

Linii duplicate Dac o interogare include cheia primar a unei tabele n lista de selecie atunci fiecare linie din rezultat va fi unic (deoarece cheia primar are valori diferite pentru fiecare linie). Dac cheia primar nu este inclus n rezultatul interogrii atunci pot aprea linii duplicat. Considerm urmatoarea interogare : S se afieze numrul angajatului (MGR) pentru toi manageii birourilor de vnzri.

Rezultatul interogrii are cinci linii (cte una pentru fiecare birou) dar dou dintre ele sunt duplicat. De ce? Deoarece Larry Fitch conduce att biroul din Los Angeles ct i pe cel din Denver iar numrul su de angajat (108) apare n ambele linii din tabela OFFICE. 12

Putem elimina linii duplicate din rezultatul interogrii prin adugarea cuvntului rezervat DISTINCT n instruciunea SELECT, naintea listei de selecie. n continuare, este prezentat o nou versiune a interogrii anterioare n care sunt eliminate liniile duplicat din rezultat.

13