Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

SQL - Limbajul SQL, Etapele crearii unei interogari, Comenzi pentru definirea datelor, Instructiunile de selectie a datelor

SQL

1 Limbajul SQL

Unul dintre cele mai puternice limbaje structurate pentru interogarea bazelor de date relationale il constituie in prezent SQL (Structured Query Language). Acesta, pronuntat cel mai adesea de catre utilizatorii lui in formula abreviata 'sequel', a devenit chiar un standard pentru o gama din ce in ce mai larga de sisteme de gestiune a bazelor de date. Limbajul SQL permite o comunicare complexa si rapida a utilizatorului cu bazele de date, in functie de cerintele si restrictiile acestuia. Pe langa manipularea si regasirea datelor, se efectueaza si operatii complexe privind actualizarea si administrarea bazei de date.

Exista un anumit grad de standardizare a limbajului SQL, mai multe sisteme de gestiune a bazelor de date recunoscand principalele instructiuni ale acestuia (de exemplu: Oracle, Access, Sybase etc.). Pe plan mondial, standardul in domeniu este considerat ANSI (American National Standards Institute) SQL care are in vedere atat aspectele de definire, interogare, manipulare a datelor, procesare a tranzactiilor, cat si caracteristicile complexe privind integritatea informatiilor, cursoarele derulante sau jonctiunile externe. Multi producatori de sisteme de gestiune a bazelor de date furnizeaza propriile extensii ale limbajului SQL, asigurandu-si astfel exclusivitatea.



Sistemul de gestiune a bazelor de date ACCESS 2000 accepta utilizarea limbajului de interogare SQL. Existenta tehnicii grafice QBE (Query by Example-interogare prin exemplu) permite proiectarea facila a unor interogari complexe. Informatia definita pe grila QBE va fi automat transformata intr-o instructiune SQL. Dialectul ACCESS contine unele particularitati in raport de standardul ANSI SQL, fiind conceput mai mult pentru crearea interogarilor de selectie.

In acest capitol tratam in detaliu doar primele trei categorii de instructiuni, si anume cele care privesc definirea, manipularea si selectia informatiilor din bazele de date.

Pentru a putea scrie corect o instructiune SQL in ACCESS 2000 este necesara respectarea stricta a unor reguli de sintaxa. Amintim in continuare cateva dintre acestea:

orice comanda se va incheia cu ; ;

intr-o interogare unde se folosesc campuri din mai multe tabele, pentru a separa numele tabelului de numele campului, se va utiliza . dupa modelul: tabel.camp ;

parantezele drepte incadreaza numele de campuri doar cand acestea contin spatii sau simboluri neacceptate de SQL ;

pentru a delimita parametrii dintr-o lista, se utilizeaza virgulele ;

valorile de tip sir se marcheaza prin apostrof sau ghilimele ;

inegalitatile din cadrul clauzelor se vor specifica prin "<>";

simbolurile ? si * sunt folosite pentru a desemna unul sau mai multe caractere de inlocuire;

pentru a evidentia valorile de tip data/timp se apeleaza la caracterul #;

2 Etapele crearii unei interogari

In crearea si respectiv executarea unei interogari ACCESS 2000 construita prin utilizarea de instructiuni SQL se parcurg, de fiecare data, mai multe etape de baza:

din fereastra Database se va selecta butonul Queries (Interogari) ;

pentru a crea interogarea SQL dorita va fi necesara, fie activarea butonului New, fie alegerea optiunii Create query in Design view;

in cazul in care utilizatorul a folosit butonul New, acum va trebui sa aleaga din fereastra New Query, optiunea Design View

foarte importanta este alegerea in continuare (cu ajutorul butonului Add) a tabelelor (Tables), interogarii (Queries) sau a ambelor categorii de obiecte (Both) care vor reprezenta suportul interogarii SQL. De mentionat faptul ca se pot utiliza mai multe tabele (interogari) din fereastra Show Table;

pentru a scrie interogarea SQL Access este necesar ca din meniul View utilizatorul sa opteze pentru modul de vizualizare SQL View. In fereastra care apare se vor tasta instructiunile SQL specifice, respectand sintaxa corespunzatoare;

interogarea SQL Access creata se poate lansa in executie in doua moduri: prin utilizarea butonului din bara Query Design sau prin optiunea Run, din meniul Query.

Pe ecranul calculatorului va fi afisat in final rezultatul interogarii SQL; utilizatorul il va analiza si interpreta in functie de propriile cerinte si restrictii informationale.

In cazul in care cererea de interogare SQL ACCESS are erori de sintaxa sau determina obtinerea de rezultate eronate, va trebui sa se revina in modul de afisare SQL View pentru a se face corectiile necesare.

3 Comenzi pentru definirea datelor

Principalele comenzi SQL pentru definirea datelor sunt urmatoarele:

CREATE DATABASE,

DROP DATABASE,

CREATE TABLE,

ALTER TABLE,

DROP TABLE.

Comanda CREATE DATABASE are urmatoarea sintaxa: CREATE DATABASE nume_baza_de_date fiind utilizata pentru crearea unei noi baze de date.



Comanda DROP DATABASE nume_baza_de_date este utilizata pentru stergerea bazei de date.

Pentru crearea unei tabele se utilizeaza comanda CREATE TABLE nume_tabela (camp1 tip_data [NOT NULL], camp2 tip_data [NOT NULL], camp3 tip_data [NOT NULL])

Printre cele mai importante tipuri de date folosite amintim: Character, Memo, Number, Integer, Decimal, Logical, Date, OLE Object etc.Numele tabelei trebuie sa fie unic in cadrul bazei de date, neputand fi unul din cuvintele rezervate. Totodata, acesta poate avea si anumite restrictii privind: numarul de caractere din care este format, utilizarea anumitor simboluri, folosirea literelor mari sau mici, natura caracterului de inceput etc. Aceleasi cerinte apar si pentru numele campurilor; in plus exista posibilitatea duplicarii lor in cadrul bazei de date, dar se pastreaza unicitatea in tabela. Clauza NOT NULL arata ca in campul respectiv nu se memoreaza valori de tip NULL.

Exemplu: Se creeaza tabela Vanzari cu urmatoarea structura a inregistrarii: numar (tip numeric), cod marfa (tip numeric), data vanzarii (tip data calendaristica), localitatea (tip caracter). Exemplu: Se creeaza tabela Vanzari cu urmatoarea structura a inregistrarii: numar (tip numeric), cod marfa (tip numeric), data vanzarii (tip data calendaristica), localitatea (tip caracter). In campul data vanzarii nu se vor memora valori de tip NULL.

CREATE TABLE VANZARI(Nr Number, Cod_m Number, Data_v Date NOT NULL, Localit Char)

Pentru modificarea structurii unui tabel se utilizeaza comanda ALTER TABLE cu urmatoarea sintaxa (simplificata): ALTER TABLE nume_tabela ADD nume_camp tip_data. In aceasta varianta se adauga in structura tabelei campul specificat in comenda.

Exemplu: Se adauga in tabela Personal_Vanzare un nou camp numit Telefon: ALTER TABLE PERSONAL_VANZARE ADD Telefon Integer

Comanda DROP TABLE nume_tabela este folosita pentru a sterge complet o tabela dintr-o baza de date (structura si valorile asociate).

4 Instructiunile de selectie a datelor

Instructiunile de selectie reprezinta una dintre categoriile cele mai importante ale limbajului de interogare SQL ACCESS. Indiferent daca sunt simple sau complexe, punctul de plecare il constituie fraza SELECT, prin care se regasesc si se afiseaza informatiile dorite de utilizator.

Pentru definirea interogarilor de selectie simple se utilizeaza urmatoarea sintaxa a instructiunii SELECT:

SELECT [domeniu] lista_selectie
FROM nume_tabela1, nume_tabela2,
[WHERE criteriul_de_selectie]
[ORDER BY campuri_criteriu [ASC|DESC]]
[GROUP BY camp_de_grupare
[HAVING criteriul_de_ grupare]]
.

Domeniu permite stabilirearea modalitatii de manipulare a inregistrarilor din baza de date asupra careia se efectueaza selectia si poate fi:

ALL : permite includerea tuturor inregistrarilor ce indeplinesc conditiile impuse. Cum frazele SELECT tabela si SELECT ALL tabela au practic acelasi rezultat, calificativul ALL este destul de rar utilizat;

DISTINCT : are ca efect eliminarea inregistrarilor care contin duplicate in campurile selectate astfel se va afisa doar o aparitie a datei multiple;

DISTINCTROW are in vedere inregistrarile duplicate in ansamblul lor, nu numai pe cele care au campuri duplicate.

Lista_selectie cuprinde toate campurile care vor aparea in tabela cu rezultatele interogarii. Campurile adaugate in randul Field din grila Query a machetei grafice QBE, care au marcata caseta de validare Show, sunt aceleasi cu cele mentionate in lista de selectie.In scrierea interogarilor de selectie simple SQL ACCESS este posibila si folosirea functiilor totalizatoare. Cele mai importante functii din aceasta categorie sunt:

COUNT : returneaza numarul de inregistrari care respecta conditiile stabilite prin clauza WHERE,

SUM : reda suma tuturor valorilor dintr-un camp; opereaza numai cu valori numerice,

AVG : calculeaza valoarea medie a unui camp numeric,

MAX : permite determinarea celei mai mari valori dintr-un camp,

MIN : duce la obtinerea celei mai mici valori a unui camp ramane valabila si aici restrictia privind clauza WHERE.

In cadrul listei de selectie se pot defini si alias-uri. Acestea reprezinta un pseudonim (nume) asociat unui camp astfel : camp AS alias. functiei agregat

Clauza FROM Specifica numele tabelei sau tabelelor care vor forma suportul interogarii. Daca in lista_selectie se includ campuri din mai multe tabele, in fata numelui acestora trebuie precizata tabela din care fac parte. Asa cum aratam la regulile de sintaxa, pentru separarea numelor de tabele, se utilizeaza semnul , (virgula). Trebuie sa precizam faptul ca in cadrul acestei clauze se pot mentiona pe langa tabele, ca surse de informatii pentru interogarile SQL, si interogari care au fost deja create.



Clauza WHERE Face interogarile mai selective, specificand faptul ca vor fi afisate numai inregistrarile care indeplinesc criteriul descris. Parametrul criteriul de selectie este o expresie care contine un operator de tip text (sir) sau numeric, in functie de tipul campului. Clauza WHERE este optionala si nu opereaza cu functii totalizatoare. In cadrul conditiei din clauza WHERE apar pot fi utilizati operatorii : AND, OR, NOT, IN, BETWEEN, LIKE. Apeland la acestia, este posibila construirea unor conditii mai complexe.

Clauza ORDER BY Utilizata atunci cand se doreste ca rezultatele interogarii sa fie ordonate in mod crescator (ASC) sau descrescator (DESC). Sortarea este optionala si se poate realiza dupa unul sau mai multe campuri_criteriu (definite drept chei de sortare). Componenta BY a clauzei nu poate sa lipseasca atunci cand se doreste sortarea rezultatelor interogarii SQL ACCESS !

Clauza GROUP BY Precizeaza campul sau campurile pe baza carora se va efectua gruparea inregistrarilor. In acelasi timp, prin intermediul acestei clauze, se pot executa functiile agregate descrise in lista de selectie pentru fiecare dintre grupari (constituite pe baza campurilor de grupare). Echivalentul acestei clauze in macheta grafica QBE de constructie a interogarii il reprezinta randul Total.

Clauza HAVING Se refera la criteriul care va fi aplicat campului-definit ca argument al functiei agregat. Altfel spus, cand se foloseste clauza GROUP BY si este necesara si o conditie, se va utiliza clauza HAVING. Spre deosebire de WHERE, care actioneaza inainte de a se efectua gruparea inregistrarilor, HAVING va opera dupa definirea acesteia. De remarcat faptul ca se admite utilizarea unei functii agregat care nu apare in lista de selectie, precum si apelarea la mai multe criterii de grupare.

O facilitate deosebit de importanta a limbajului SQL o reprezinta posibilitatea de a grupa si folosi date din tabele diferite. Operatiile de asociere induse de clauza JOIN au ca rezultat producerea tuturor combinatiilor posibile, pentru continutul informational al fiecarei tabele. Noile inregistrari care rezulta in urma jonctiunii vor deveni disponibile pentru selectiile ulterioare. La o asociere pot participa mai mult de doua tabele.

Principala modalitate de realizarea a jonctiunii este sintetizata de urmatoarea sintaxa:

SELECT [domeniu] lista_selectie
FROM nume_tabela1 JOIN nume_tabela2
ON criteriul_de_asociere
[ JOIN nume_tabela3
ON criteriul_de_asociere]
[WHERE criteriul_de_selectie]
[ORDER BY campuri_criteriu [ASC|DESC]]

Semnificatia elementelor de sintaxa descrise mai sus este urmatoarea:

INNER, LEFT OUTER, RIGHT, OUTER se refera la tipurile de jonctiuni (INNER JOIN, interna de tip echivalent, LEFT OUTER JOIN, externa de stanga, RIGHT OUTER JOIN, externa de dreapta). De remarcat faptul ca SQL ACCESS accepta scrierea interogarilor externe fara specificarea explicita a lui OUTER,

JOIN specifica tabela care va fi asociata (nume_tabela2, nume_tabela3) tabelei precizata in clauza FROM,

ON criteriul de asociere arata relatia dintre campurile pe care se bazeaza jonctiunea. Unul se afla in tabela asociata, iar celalalt exista intr-o alta tabela din lista cu numele tabelelor. Expresia criteriul_de_asociere contine un operator de comparatie (=,<,>,<>,<=,>=)si va returna valorile logice TRUE sau FALSE.

Jonctiunile tip INNER JOIN determina o asociere a inregistrarilor din tabele, astfel incat sa rezulte un numar total de inregistrari egal cu produsul numarului de inregistrari din fiecare tabela.



Jonctiunile externe (OUTER) sunt de doua tipuri: de stanga (LEFT OUTER JOIN) si de dreapta (RIGHT OUTER JOIN), fiind destul de putin utilizate. Echivalentul QBE al acestor categorii de jonctiuni este alegerea optiunilor 1, 2 sau 3, din caseta Join Properties, care au fost explicate intr-un capitol precedent.

5 Instructiunile pentru manipularea datelor

Cele mai importante instructiuni sunt: INSERT, UPDATE si DELETE.

Comanda INSERT se foloseste pentru adaugarea de inregistrari dintr-o tabela in alta. Prin aceasta interogare de adaugare nu se pot insera date dintr-o tabela in ea insasi; operatia ar fi totusi posibila printr-o selectare prealabila a datelor initiale intr-un tabel temporar, urmata de modificarea si readucerea lor in tabelul de la care s-a plecat.

Sintaxa comenzii este urmatoarea:

INSERT INTO nume_tabela (camp1, camp2)
VALUES (valoare1,valoare2

In acest caz se adauga o inregistrare intr-o tabela, mentionandu-se campurile si valorile asociate acestora. Ca particularitate se remarca inserarea unei singure inregistrari la un moment dat. Prima forma a lui INSERT se utilizeaza pentru operatii simple care presupun lucrul cu un numar redus de inregistrari. Dupa lansarea in executie a interogarii apare un mesaj de avertizare privind adaugarea noii inregistrari in baza de date si caracterul ireversibil al acestei operatii.

In cadrul acestui tip de inserare a datelor trebuie sa se respecte urmatoarele reguli:

valorile mentionate in clauza VALUES vor avea aceeasi natura cu campurile specificate in clauza INTO,

marimea valorii corespunzatoare fiecarui camp va fi mai mica decat dimensiunea campului,

nu va fi obligatorie specificarea denumirii campurilor, deoarece SQL ACCESS va asocia listei de valori campurile in ordinea din structura inregistrarii (prima valoare se va introduce in primul camp, a doua valoare, in al doilea camp s.a.m.d.)

daca un camp are definitia NOT NULL, va fi obligatorie introducerea unei valori pentru acesta.

Comanda DELETE are urmatoarea sintaxa:
DELETE FROM nume_tabela [WHERE criteriul_de_stergere] se materializeaza in interogarea actiune de stergere partiala sau totala a inregistrarilor din tabele. In acelasi timp se va sterge doar continutul tabelei nu si aceasta (pentru eliminarea tabelei se va apela la instructiunea DROP TABLE).

Comanda UPDATE are urmatoarea sintaxa:

UPDATE nume_tabela
SET nume_camp1 = valoare1 [,nume_camp2 = valoare2]
[WHERE criteriul_de_actualizare]

Aceasta are atat scopul de a insera noi inregistrari, cat si de a modifica valorile campurilor din inregistrarile existente. Ca si in cazul instructiunii INSERT, se va urmari daca in campul cu valori de actualizat sunt permise numai valori unice. Atunci cand se doreste actualizarea datelor din mai multe campuri se foloseste virgula ca separator intre campuri si valorile acestora. Se pot utiliza mai multe conditii WHERE apeland la operatorul logic AND pentru a limita actualizarea la inregistrari mai bine specificate.

6 Cereri de interogare imbricate

Scrierea unei interogari in cadrul alteia duce la aparitia unei subinterogari; setul de rezultate obtinut de la o interogare va constitui argument pentru o alta. Utilizatorul poate astfel sa creeze legaturi intre mai multe interogari SQL ACCESS, pe baza unor campuri unice, cu rol de cautare in structura tabelelor. Subinterogarile inlocuiesc interogarile imbricate din versiunile precedente, cu performante mult imbunatatite. Pot fi construite si prin varianta de lucru a machetei grafice QBE Access.

Cea mai simpla subinterogare are sintaxa urmatoare:

SELECT * FROM Tabela1
WHERE Tabela1.nume_ camp =
(SELECT nume_camp FROM Tabela2 WHERE criteriul_de_selectie);

Tabela1 si Tabela2 vor avea un camp comun (nume_camp) care va reprezenta de fapt campul de legatura ce sta la baza construirii subinterogarii. Clauza SELECT din subinterogare va avea acelasi numar de campuri si de natura similara cu cele din clauza WHERE a interogarii externe.