Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Baze de date


Qdidactic » stiinta & tehnica » informatica » baze de date
Limbajul SQL



Limbajul SQL


Limbajul SQL


Limbajul SQL (Structured Query Language) este unul din limabjele relationale de cereri care formeaza nucleul multor sisteme de gestiune a bazelor de date.

Majoritatea instructiunilor din SQL sunt executabile, ele pot fi interpretate si executate imediat, sau pot fi incluse in diferite aplicatii scrise in limbaje de programare: APL, BASIC, C, COBOL, etc. Intre cele doua moduri de utilizare exista mici diferente.

S    SQL interpretabil

Aplicatia din SQUARE de forma:



A1,A2,,AnRB1,B2,,Bm(q1b1,q2,b2,,qmbm)

Se exprima in SQL astfel:

SELECT A1,A2,,An

FROM R

WHERE B1q1b1 AND B2q2b2 AND Bmqmbm


O cerere de tipul: listeaza cumparatorii care au contul negativ se scrie sub forma:

SELECT NUME

FROM CUMPARATORI

WHERE CONT<0

Dupa WHERE poate sa apara o formula care sa cuprinda atribute ale relatiilor ce urmeaza dupa FROM si constante legate intre ele prin operatii si comparatii aritmetice, operatori booleeni, operatii cu multimi sau operatii de apartenenta la multimi. Unele relatii ce apar in conditia de dupa WHERE pot fi obtinute, la randul lor, printr-o constructie de forma SELECT-FROM-WHERE. Forma generala de cautare a instructiunii SELECT este:

SELECT [DISTINCT] elemente

FROM tabele

[WHERE conditie]

[GROUP BY campuri [ HAVING conditie ]]

[ORDER BY campuri ]


In acest limbaj, la proiectie, nu sunt eliminate duplicatele. Pentru a elimina duplicatele se pune dupa SELECT optiunea DISTINCT. Drept elemente pot sa apara valori selectate sau expresii construite cu aceste valori. Daca sunt luate in considerare toate campurile tabloului, se va pune caracterul „*” dupa SELECT in locul listei elementelor selectate. Conditia de dupa WHERE poate sa contina operatori de comparatie, operatori booleeni eventual cu paranteze pentru schimbarea ordinii de evaluare. Pentru campurile indicate in scopul ordonarii se poate specifica daca trebuie sa apara crescator prin ASC (ordinea implicita) sau descrescator prin DESC. Campurile se pot indica atat prin nume cat si prin numarul ce indica pozitia lor in tabel. Este permisa folosirea functiilor agregat COUNT, SUM, AVG, MAX si MIN, care se pot aplica relatiilor unare avand ca rezultat numarul, suma, media, cel mai mare si respectiv cel mai mic element din cele carora li s-a aplicat functia respectiva, cu eliminarea duplicatelor daca functia este precedata de DISTINCT. Functiile agregat se pot aplica unor grupe de elemente indicate prin GROUP BY si eventual selectate prin conditia din HAVING.

In conditiile din instructiunea SELECT pot fi utilizate constructii de forma:

camp LIKE cuvant

camp NOT LIKE cuvant

camp IS FULL

camp IS NOT FULL

unde camp este de tipul cuvant si cuvant poate sa contina caracterul „_”, care inlocuieste orice caracter sau „%”, care inlocuieste orice cuvant. Rezultatul este o valoare de adevar dupa cum camp contine o valoare sir de caractere ce se conformeaza modului de alcatuire din cuvant sau nu, respectiv contine sau nu valoarea null. IN sau NOT IN se folosesc pentru a indica apartenenta sau nu la o multime. EXIST sau NOT EXIST se folosesc pentru a verifica existenta sau inexistenta unui element intr-o multime si se poate aplica UNION intre doua selectii pentru a realiza reuniunea celor doua relatii ce rezulta in urma operatiilor de selectie.

Raspunsul la cererea: listeaza numele magazinelor, marfurile si preturile tuturor magazinelor care vand cel putin o marfa comandata de Ionescu Iosif se poate obtine prin urmatoarea succesiune de expresii:

SELECT UNIQUE NUMEMAG,MARFA,PRET

FROM MAGAZINE

WHERE MARFA IN

SELECT MARFA

FROM COMENZI

WHERE NUME= Ionescu Iosif

Se pot atribui nume unor tupluri ale unor relatii folosite ca variabile libere ce pot fi utilizate in celelalte parti componente ale cereri.

SELECT FROM R T WHERE da numele T unui tuplu al relatiei R, acest nume putand fi folosit dupa SELECT sau dupa WHERE, T.A semnificand valoarea componentei A a tuplului T.

Unei cereri de tipul:listeaza toate magazinele care vand toate marfurile comandate de Ionescu Iosif  i se poate obtine raspunsul prin urmatoarea succesiune de expresii:


SELECT NUMEMAG

FROM MAGAZINE M

WHERE

(SELECT MARFA

FROM MAGAZINE

WHERE NUMEMAG=M.NUMEMAG)

CONTAINS

(SELECT MARFA

FROM COMENZI

WHERE NUME= Ionescu Iosif

Daca dupa FROM apare o lista de relatii R1,R2,,Rn, se considera toate combinatiile de tupluri t1,t2,,tn, cu ti din Ri. pentru toate acesle combinatii care indeplinesc conditiile care urmeaza dupa WHERE se include, la iesire, lista componentelor specificate dupa SeLECT. Aparitia unei stelute dupa SELECT indica selectarea tuturor atributelor ce apar in tuplurile implicate ulterior si lipsa lui WHERE indica o conditie mereu adevarata (sunt selectate toate tuplurile relatiilor impplicate).

Cererea: listeaza numele magazinelor, marfurile si preturile tuturor magazinelor care vand cel putin o marfa comandata de Ionescu Iosif se poate obtine si prin urmatoarea succesiune de expresii:

SELECT NUMEMAG,MAGAZINE,MARFA,PRET

FROM MAGAZINE,COMENZI

WHERE NUME = Ionescu Iosif AND MAGAZINE.MARFA=COMENZI.MARFA


Cele cinci operatii de baza din algebra relationala pot fi exprimate astfel:

1.     Reuniunea relatiilor R si S:

(SELECT*

FROM R)

UNION

(SELECT*

FROM S)

2.     Diferenta relatiilor R si S:

(SELECT*

FROM R)

MINUS

(SELECT*

FROM S)

3.     produsul cartezian:

SELECT*FROM R,S

4.     Proiectia:

SELECT UNIQUE A1,A2,,Ak

FROM R

5.     Selectia:

SELECT*

FROM R

WHERE F

Se poate atribui un nume R relatieirezultate ca o cerere precedand acesta cerere cu o comanda:

ASSIGN TO R: selectie

Definirea unei relatii se face cu instructiunea CREATE TABLE, in care se specifica numele tabelului care se creeaza, numele si tipurile de date ale atributelor sale, campurile care sunt componente ale cheii primare si ale unor chei straine impreuna cu corespondentele lor. Au forma generala:

CREATE TABLE tabel

(definire_camp [,definire_camp]

[,PRIMARY KEY (campuri)]

[,FOREIGN KEY (camp) REFERENCES tabel

[,FOREIGN KEY (camp) REFERENCES tabel]])

unde definire_camp este de forma:

camp tip_date [NOT NULL]

si tip_date poate fi:

INTEGER pentru intreg pe un cuvant;

SMALLINT pentru un intreg pe un semicuvant;

DECIMAL(p,q) pentru numar zecimal cu precizie de p cifre si avand punctul zecimal la q cifre la dreapta;

FLOAT (p) pentru numar real cu p cifre binare de precizie;

CHARACTER (n) pentru cuvinte de n octeti;

VARCHAR (n) pentru cuvinte de cel mult n octeti;

GRAPHIC (n) pentru cuvinte cu n caractere de cate 16 biti;

VARGRAPHIC (n) pentru cuvinte de cel mult n caracterede cate 16 biti;

DATE pentru exprimarea datei;

TIME pentru exprimarea orei;

TIMESTAMP pentru exprimarea in microsecunde a unei combinatii de data si ora;

Pentru baza de date a unei retele de magazine se pot defini urmatoarele tabele:

CREATE TABLE MAGAZINE

(NR_MAG CHAR(5) NOT NULL,

NUME_MAG CHAR(209 NOT NULL,

STARE SMALLINT NOT NULL,

ORAS CHAR(15) NOT NULL,

PRIMARY KEY (NR_MAG));

CREATE TABLE MARFA

(COD CHAR(6) NOT NULL,

DENUMIRE CHAR(20) NOT NULL,

CULOARE CHAR(6) NOT NULL,

GREUTATE SMALLINT NOT NULL,

ORAS CHAR(15) NOT NULL,

PRIMARY KEY (COD));

CREATE TABLE VANDUT

(NR_MAG CHAR(6) NOT NULL,

COD CHAR(6) NOT NULL,

CANTITATE INTEGER NOT NULL,

PRIMARY KEY (NR_MAG, COD),

FOREIGN (NR_MAG) REFERENCES MAGAZINE,

FOREIGN KEY (COD) REFERENCES MARFA;

Instructiunea CREATE TABLE produce la nivel fizic fisiere ce corespund tabelelor definite si care initial sunt vide. Definirea unor tabele virtuale utilizate ca vederi se face printr-o instructiune analoaga CREATE VIEW, iar crearea unui index pentru un tabel dat se face prin CREATE INDEX. Instructiunile DROP TABLE, DROP VIEW si DROP INDEX sunt folosite pentru eliminarea unor elemente din baza de date de tip tabel, vedere, index. Indecsii sunt creati si eliminati de administratorul de sistem si sunt utilizati automat  in cererile utilizatorilor.

Forma generala a instructiunilor precedente este:

CREATE VIEW vedere [ ( coloana [, coloana ] ) ]

AS subcerere

[ WITH CHECK OPTION ]

CREATE [ UNIQUE ] INDEX index

ON tabel ( camp [ ordine ] [, camp [ ordine ] ]) [ CLUSTER ];

DROP TABLE tabel;

DROP VIEW vedere;

DROP INDEX index;

In care WITH CHECK OPTION indica verificarea conditiilor din definirea vederii in momentul executarii operatiilor UPDATE si INSERT, UNIQUE specifica necesitatea de a avea un singur tuplu in tabel pentru valorile campurilor specificate in index. Ordine poate fi ASC pentru crescator sau DESC pentru descrescator, ordinea fiind considerata fiind cea lexicografica. CLUSTER presupune gruparea tuplurilor dupa adresele date de index, putand sa apara in cel mult un index pentru fiecare tabel in parte. Eliminarea unui tabel produce eliminarea automata a tuturor vederilor in care el este implicat.

Intr-un tabel se poate adauga un nou camp la dreapta, prin utilizarea instructiunii ALTER TABLE, cu forma generala:

ALTER TABLE tabel ADD camp tip_date;

Sistemul adauga automat valoarea null pentru tuplurile deja existente in tabel si permite folosirea unor valori corespunzatoare pentru tuplurile adaugate sau modificate.

Instructiunile de prelucrare a datelor din SQL sunt: SELECT, UPDATE – pentru reactualizari, DELETE – pentru eliminari de tupluri, INSERT – pentru adaugarea de noi tupluri. Ele se aplica unei multimi de inregistrari.

Forma generala a instructiunii UPDATE:

UPDATE tabel

SET camp=expresie [, camp=expresie]

[ WHERE conditie ];


Forma generala a instructiunii DELETE:

DELETE

FROM tabel

[ WHERE conditie];

Forma generala a instructiunii INSERT:

INSERT

INTO tabel [( camp [, camp])]

VALUES (valoare [, valoare]);

Sau

INSERT

INTO tabel [( camp [, camp])]

subconditie;

S    SQL programabil


In cazul utilizarii comenzilor SQL in programele scrise in diferite limbaje de programare se aplica reguli suplimentare:

toate instructiunile din SQL interpretabil pot fi folosite de SQL progamabil;

instructiunile SQL sunt precedate de EXEC SQL si sunt urmate de un simbol de terminare (;);

o instructiune executabila SQL poate sa apara oriunde apare o instructiune executabila din limbajul gazda;

in instructiunile SQL pot fi incluse referinte la variabile din programul gazda, acestea fiind precedate de ; pentru a le deosebi de numele SQL;

tabelele utilizate trebuie declarate in program prin instructiuni DECLARE TABLE specifice limbajului;

executarea unei instructiuni SQL presupune incarcarea in program a unei informatii plasata in aria de comunicare EXEC SQL INCLUDE SQLCA; aceasta va contine valoarea 0 daca instructiunea s-a efectuat corect sau o valoare negativa daca exista erori;

intre tipul variabilelor din program si tipul variabilelor din baza de date trebuie sa existe concordanta;

in program pot exista variabile ce reprezinta si nume de coloane in baza de date.

Pentru efectuarea operatiilor din SQL programabil se foloseste un cursor. Fara cursor se pot efectua instructiunile SELECT singular (cu selectarea unui singur tuplu), UPDATE (fara forma CURRENT), DELETE (fara forma CURRENT) si INSERT.

Pentru selectarea mai multor tupluri  se declara mai intai un cursor de forma:

EXEC SQL DECLARE cursor CURSOR

FOR instructiune-selectare

[FOR UPDATE OF coloana [, coloana ]]

[ORDER BY coloana [, coloana ]];

care este o instructiune declarativa, deci neexecutabila. Se poate folosi ORDER BY numai in absenta lui FOR UPDATE pentru a indica ordinea in care sunt considerate tuplurile. Pentru a activa cursorul se foloseste instructiunea:


EXEC SQL OPEN cursor;

Cate un tuplu este selectat pe rand prin instructiunea:

EXEC SQL FETCH cursor INTO tinta [, tinta];

unde tinta este de forma :variabila [: variabila ] si da numele variabilei ce primeste valoarea corespunzatoare campului din tuplul selectat. Daca nu mai sunt tupluri de selectat, se executa SQLCODE=+100 si nu se mai intorc alte date .

Dezactivarea cursorului se face printr-o instructiune de forma:

EXEC SQL CLOSE cursor;

Valorile variabilelor ce apar in definirea cursorului sunt luate in considerare numai la activarea cursorului; schimbarile ce apar inainte de o reactivare a cursorului sunt neoperante.

Cursorul mai poate fi utilizat si in formele CURRENT ale instructiunilor UPDATE si DELETE, avand formele:

EXEC SQL UPDATE tabel

SET camp=expresie [, camp=expresie]

WHERE CURRENT OF cursor;

EXEC SQL DELETE

FROM tabel

WHERE CURRENT OF cursor;

care se aplica tuplului indicat de cursor. Aceste operatii nu se pot aplica daca la definirea cursorului, in SELECT apare UNION sau ORDER BY sau daca el defineste o vedere ce nu se poate modifica. Daca se fac modificari, toate campurile ce sunt modificate cu UPDATE se trec in FOR UPDATE o data cu modificarea cursorului.


Tesztarea conditiilor de operare a instructiunilor cu cursor se poate face si prin instructiunea:

EXEC SQL WHENEVER conditie actiune;

Unde conditie poate fi NOT FOUND sau SQLERROR iar actiunea poate fi CONTINUE sau GO TO.

Modificarile devin efectivenumai dupa executarea unei comenzi COMMIT ce este facuta automat sau prin program. Modificarile pot fi anulate prin comanda ROLLBACK automat sau prin program.





Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright