LIMBAJUL SQL
Introducere
Limbajul SQL (Structured Query Language) reprezint, n prezent, unul dintre cele mai puternice limbaje structurate pentru interogarea bazelor de date relaionale. Exist un anumit grad de standardizare a limbajului SQL, mai multe sisteme de gestiune a bazelor de date recunoscnd principalele instruciuni ale acestuia (de exemplu: Oracle, Access, Sybase etc.). Pe plan mondial, standardul n domeniu este considerat American National Standards Institute (ANSI) SQL care are n vedere att aspectele de definire, interogare, manipulare a datelor, procesare a tranzaciilor, ct i caracteristicile complexe privind integritatea informaiilor, cursoarele derulante sau jonciunile externe.
SQL n Access
Sistemul de gestiune a bazelor de date ACCESS 2000 accept utilizarea limbajului de interogare SQL. Existena tehnicii grafice QBE (Query by Exampleinterogare prin exemplu) permite proiectarea facil a unor interogri complexe, informaia definit pe grila QBE fiind automat transformat ntr-o instruciune SQL. Dialectul ACCESS conine unele particulariti n raport de standardul ANSI SQL, fiind conceput mai mult pentru crearea interogrilor de selecie.
Reguli de sintax
Pentru a putea scrie corect o instructiune SQL n Access trebuie s se respecte urmtoarele reguli de sintax: orice comand se va ncheia cu punct ; ntr-o interogare unde se folosesc cmpuri din mai multe tabele, pentru a separa numele tabelului de numele cmpului, se va utiliza . dup modelul [Link]; parantezele drepte ncadreaz numele de cmpuri doar cnd acestea conin spaii sau simboluri neacceptate de SQL;
pentru a delimita parametrii dintr-o list, se utilizeaz
virgulele valorile de tip ir se marcheaz prin apostrof sau ghilimele inegalitile din cadrul clauzelor se vor specifica prin <> simbolurile ? i * sunt folosite pentru a desemna unul sau mai multe caractere de nlocuire pentru a evidenia valorile de tip data / timp se apeleaz la caracterul #
Etapele crerii unei interogri
din fereastra Database (Baza de date) se va selecta butonul
Queries (Interogri) ; pentru a crea interogarea SQL dorit va fi necesar, fie activarea butonului New (Nou), fie alegerea opiunii Create query in Design view (Creare interogare n vizualizare proiect); pentru a scrie interogarea SQL Access este necesar ca din meniul View utilizatorul s opteze pentru modul de vizualizare SQL View. n fereastra care apare se vor tasta instruciunile SQL specifice, respectnd sintaxa corespunztoare; interogarea SQL Access creat se poate lansa n execuie n dou moduri: prin utilizarea butonului din bara Query Design sau prin opiunea Run, din meniul Query.
Comenzile pentru definirea datelor (LDD)
Principalele comenzi SQL pentru definire a datelor sunt urmtoarele: CREATE DATABASE DROP DATABASE CREATE TABLE ALTER TABLE DROP TABLE
Comanda CREATE DATABASE are urmtoarea sintax: CREATE DATABASE nume_baza_de_date fiind utilizat pentru crearea unei noi baze de date. Access SQL nu accept o astfel de comand.
Comanda DROP DATABASE cu sintaxa: DROP DATABASE nume_baza_de_date este utilizat pentru tergerea bazei de date. Access SQL nu accept o astfel de comand.
Pentru crearea unei tabele se utilizeaz comanda: CREATE TABLE nume_tabela (cmp1 tip_data [NOT NULL], cmp2 tip_data [NOT NULL], cmp3 tip_data [NOT NULL]...); Printre cele mai importante tipuri de date folosite amintim: Character, Memo, Number, Integer, Decimal, Logical, Date, OLE Object etc.
Pentru modificarea structurii unui tabel se utilizeaz comanda ALTER TABLE cu sintax : ALTER TABLE nume_tabela ADD nume_cmp tip_data; Comanda DROP TABLE nume_tabela este folosit pentru a terge complet o tabel dintr-o baza de date (structura i valorile asociate).
Comenzi pentru selecia datelor
Pentru definirea interogrilor de selecie simple se utilizeaz urmtoarea sintax a instruciunii SELECT: SELECT [domeniu] lista_selectie FROM nume_tabela1, nume_tabela2,... [WHERE criteriul_de_selectie] [ORDER BY cmpuri_criteriu [ASC|DESC]]; Domeniu permite stabilirea modalitii de manipulare a nregistrrilor din baza de date i poate fi: ALL : permite includerea tuturor nregistrrilor ce ndeplinesc condiiile impuse. DISTINCT : are ca efect eliminarea nregistrrilor care conin duplicate n cmpurile selectate astfel, se va afia doar o apariie a datei multiple; DISTINCTROW are n vedere nregistrrile duplicate n ansamblul lor, nu numai pe cele care au cmpuri duplicate.
Lista_selectie cuprinde toate cmpurile care vor aprea n tabela cu rezultatele interogrii. Clauza FROM specific numele tabelei sau tabelelor care vor forma suportul interogrii. Clauza WHERE face interogrile mai selective, specificnd faptul c vor fi afiate numai nregistrrile care ndeplinesc criteriul descris. Clauza WHERE este opional i nu opereaz cu funcii totalizatoare. n cadrul condiiei din clauza WHERE pot fi utilizai operatorii : AND, OR, NOT, IN, BETWEEN, LIKE. Clauza ORDER BY utilizat atunci cnd se dorete ca rezultatele interogrii s fie ordonate n mod cresctor (ASC) sau descresctor (DESC).
n cadrul interogrilor de selecie simple SQL ACCESS se pot folosi i funcii totalizatoare. Cele mai importante funcii din aceast categorie sunt: COUNT : returneaz numrul de nregistrri care respect condiiile stabilite prin clauza WHERE, SUM : red suma tuturor valorilor dintr-un cmp; opereaz numai cu valori numerice, AVG : calculeaz valoarea medie a unui cmp numeric, MAX : permite determinarea celei mai mari valori dintr-un cmp, nu opereaz n cadrul clauzei WHERE; MIN : duce la obinerea celei mai mici valori a unui cmp, rmne valabil i aici restricia privind clauza WHERE.
Pentru definirea interogrilor de selecie agregate se utilizeaz urmtoarea sintax a instruciunii SELECT:
SELECT [domeniu] f_agreg(nume_camp) as alias [,lista_selectie]] FROM nume_tabela1, nume_tabela2,... GROUP BY camp_grupare [HAVING criteriu_grupare] [ORDER BY campuri_criteriu [ASC|DESC]];
n cadrul listei de selecie se pot defini i alias-uri. Acestea reprezint un pseudonim (nume) asociat unui cmp care este argument al funciei agregat, astfel : cmp AS alias. Clauza GROUP BY precizeaz cmpul sau cmpurile pe baza crora se va efectua gruparea nregistrrilor. Clauza HAVING se refer la criteriul care va fi aplicat cmpului-definit ca argument al funciei agregat. Altfel spus, cnd se folosete clauza GROUP BY i este necesar i o condiie, se va utiliza clauza HAVING.
Asocieri
Limbajul SQL ofer posibilitatea de a grupa i folosi date din tabele diferite. Jonciunile se pot clasifica n: - jonciuni CROSS mai puin utilizat, cu rol n ilustrarea elementelor specifice proprietilor combinatorii ale asocierilor; - jonciuni de ECHIVALEN, cea mai folosit, presupune folosirea clauzei WHERE asociat cu o egalitate dorit; - jonciuni de NEECHIVALEN, care face apel n clauza WHERE la oricare operator de comparare n afar de semnul egal.
Sintaxa general pentru jonciunile echivalente i neechivalente este:
SELECT [domeniu] lista_selectie FROM nume_tabela1, nume_tabela2 WHERE criteriul_asociere [ORDER BY cmpuri_criteriu [ASC|DESC]];
Deoarece n aceste instruciunile SQL se utilizeaz cmpuri ce fac parte din tabele diferite, este necesar ntotdeauna specificarea tabelei de care aparin. Forma general de descriere a unui astfel de cmp va fi urmtoarea:
nume_tabel.nume_cmp.
O alt abordare privete jonciunile ca fiind: interne (INNER JOIN) i externe (OUTER JOIN). Jonciunile tip INNER JOIN determin o asociere a nregistrrilor din tabele, astfel nct s rezulte un numr total de nregistrri egal cu produsul numrului de nregistrri din fiecare tabel. Jonciunile externe (OUTER) sunt de dou tipuri: de stnga (LEFT OUTER JOIN) i de dreapta (RIGHT OUTER JOIN), fiind destul de puin utilizate.
Jonciunile au urmtoarea sintax: SELECT [domeniu] lista_selectie FROM nume_tab1 {INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tabe2 ON criteriul_de_asociere [{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tab3 ON criteriul_de_asociere]... [WHERE criteriul_de_selectie] [ORDER BY cmpuri_criteriu [ASC|DESC]]; INNER, LEFT OUTER, RIGHT, OUTER se refera la tipurile de jonciuni; JOIN specific tabela care va fi asociat (nume_tab2, nume_tab3...) tabelei precizat n clauza FROM; ON criteriul de asociere arat relaia dintre cmpurile pe care se bazeaz jonciunea.
Combinrile
Cnd utilizatorul dorete s vad rezultatele mai multor interogri SELECT n acelai timp, prin combinarea ieirilor lor, poate utiliza facilitatea UNION a limbajului de interogare SQL. Sintax general: SELECT lista_cmpuri FROM tabela1 UNION SELECT lista_campuri FROM tabela2 [GROUP BY camp_de_grupare] [HAVING criteriul_de_agregare] [UNION] [ORDER BY camp_criteriu_de_sortare];
Instruciunile care genereaz interogri UNION se caracterizeaz prin urmtoarele restricii: numrul de cmpuri din lista de cmpuri asociat fiecrei instruciuni SELECT i UNION SELECT trebuie s fie acelai; este permis doar o dat utilizarea clauzei ORDER BY, dup ultima instruciune UNION SELECT; secvena de nume din fiecare list de cmpuri trebuie s corespund unor intrri identice.
Comenzi pentru manipularea datelor
INSERT Sintaxa comenzii prezint dou forme: INSERTVALUES i INSERT SELECT. INSERT INTO tab (cmp1, cmp2...) VALUES (valoare1,valoare2...);
Trebuie s se respecte urmtoarele reguli: valorile menionate n clauza VALUES vor avea acelai tip cu cmpurile specificate n clauza INTO, mrimea valorii corespunztoare fiecrui cmp va fi mai mica dect dimensiunea cmpului, daca un cmp are definiia NOT NULL, va fi obligatorie introducerea unei valori pentru acesta.
INSERT INTO nume_tab1 (cmp1, cmp2...) SELECT [domeniu] [lista selectie] from nume_tab2 [WHERE criteriu];
Reguli suplimentare: fraza SELECT nu poate extrage nregistrri din tabela destinaie; numrul i natura cmpurilor menionate n clauza INTO trebuie s fie aceleai cu numrul i natura cmpurilor returnate de instruciunea SELECT.
Comanda DELETE are urmtoarea sintax: DELETE FROM tabela [WHERE criteriu]; terge parial sau total nregistrrile din tabele.
Comanda UPDATE are urmtoarea sintax: UPDATE tabela SET cmp1 = valoare1 [,cmp2 = valoare2]... [WHERE criteriul_de_actualizare]; Aceasta are att scopul de a insera noi nregistrri, ct si de a modifica valorile cmpurilor din nregistrrile existente.