LIMBAJUL SQL

22
LIMBAJUL SQL LIMBAJUL SQL

description

LIMBAJUL SQL. Introducere. Limbajul SQL (Structured Query Language) reprezintă, în prezent, unul dintre cele mai puternice limbaje structurate pentru interogarea bazelor de date relaţionale. - PowerPoint PPT Presentation

Transcript of LIMBAJUL SQL

LIMBAJUL SQLLIMBAJUL SQLLIMBAJUL SQLLIMBAJUL SQL

IntroducereIntroducereLimbajul Limbajul SQLSQL (Structured Query Language) reprezintă, în (Structured Query Language) reprezintă, în

prezent, unul dintre cele mai puternice limbaje structurate prezent, unul dintre cele mai puternice limbaje structurate pentru interogarea bazelor de date relaţionale.pentru interogarea bazelor de date relaţionale.

Există un anumit grad de standardizare a limbajului SQL, Există un anumit grad de standardizare a limbajului SQL, mai multe sisteme de gestiune a bazelor de date recunoscând mai multe sisteme de gestiune a bazelor de date recunoscând principalele instrucţiuni ale acestuia (de exemplu: Oracle, principalele instrucţiuni ale acestuia (de exemplu: Oracle, Access, Sybase etc.). Access, Sybase etc.).

Pe plan mondial, standardul în domeniu este considerat Pe plan mondial, standardul în domeniu este considerat American National Standards Institute (ANSI) SQLAmerican National Standards Institute (ANSI) SQL care are care are în vedere atât aspectele de definire, interogare, manipulare a în vedere atât aspectele de definire, interogare, manipulare a datelor, procesare a tranzacţiilor, cât şi caracteristicile datelor, procesare a tranzacţiilor, cât şi caracteristicile complexe privind integritatea informaţiilor, cursoarele complexe privind integritatea informaţiilor, cursoarele derulante sau joncţiunile externe. derulante sau joncţiunile externe.

SQL în AccessSQL în Access

Sistemul de gestiune a bazelor de date ACCESS Sistemul de gestiune a bazelor de date ACCESS 2000 acceptă utilizarea limbajului de interogare SQL. 2000 acceptă utilizarea limbajului de interogare SQL.

Existenţa tehnicii grafice QBE (Query by Example-Existenţa tehnicii grafice QBE (Query by Example-interogare prin exemplu) permite proiectarea facilă a interogare prin exemplu) permite proiectarea facilă a unor interogări complexe, informaţia definită pe grila unor interogări complexe, informaţia definită pe grila QBE fiind automat transformată într-o instrucţiune QBE fiind automat transformată într-o instrucţiune SQL. SQL.

Dialectul ACCESS conţine unele particularităţi în Dialectul ACCESS conţine unele particularităţi în raport de standardul ANSI SQL, fiind conceput mai raport de standardul ANSI SQL, fiind conceput mai mult pentru crearea interogărilor de selecţie.mult pentru crearea interogărilor de selecţie.

Reguli de sintaxăReguli de sintaxăPentru a putea scrie corect o instructiune SQL Pentru a putea scrie corect o instructiune SQL în în

Access trebuie să se respecte următoarele reguli de sintaxă:Access trebuie să se respecte următoarele reguli de sintaxă:

– oorice comandrice comandă se va încheia cu “ă se va încheia cu “;;””

– într-o interogare unde se folosesc câmpuri din mai într-o interogare unde se folosesc câmpuri din mai multe tabele, pentru a separa numele tabelului de multe tabele, pentru a separa numele tabelului de numele câmpului, se va utiliza “numele câmpului, se va utiliza “..” după modelul ” după modelul tabel.câmptabel.câmp;;

– parantezele drepteparantezele drepte încadrează numele de câmpuri încadrează numele de câmpuri doar când acestea conţin spaţii sau simboluri doar când acestea conţin spaţii sau simboluri neacceptate de SQL;neacceptate de SQL;

• pentru a delimita parametrii dintr-o listă, se utilizează pentru a delimita parametrii dintr-o listă, se utilizează virgulele virgulele

• valorile de tip şir se marchează prin valorile de tip şir se marchează prin apostrofapostrof sau sau ghilimele ghilimele

• inegalităţile din cadrul clauzelor se vor specifica prin inegalităţile din cadrul clauzelor se vor specifica prin “<>” “<>”

• simbolurile simbolurile ?? şi şi ** sunt folosite pentru a desemna unul sunt folosite pentru a desemna unul sau mai multe caractere de înlocuire sau mai multe caractere de înlocuire

• pentru a evidenţia valorile de tip data / timp se pentru a evidenţia valorile de tip data / timp se

apelează la caracterul apelează la caracterul ##

Etapele creării unei interogăriEtapele creării unei interogări• din fereastra din fereastra Database (Baza de date)Database (Baza de date) se va selecta butonul se va selecta butonul

Queries (Interogări)Queries (Interogări) ; ; • pentru a crea interogarea pentru a crea interogarea SQLSQL dorită va fi necesară, fie dorită va fi necesară, fie

activarea butonului activarea butonului New (Nou),New (Nou), fie alegerea opţiunii Create fie alegerea opţiunii Create query in query in Design view (Creare interogare în vizualizare Design view (Creare interogare în vizualizare proiect);proiect);

• pentru a scrie interogarea SQL Access este necesar ca din pentru a scrie interogarea SQL Access este necesar ca din meniul meniul ViewView utilizatorul să opteze pentru modul de vizualizare utilizatorul să opteze pentru modul de vizualizare SQL View. În fereastra care apare se vor tasta instrucţiunile SQL View. În fereastra care apare se vor tasta instrucţiunile SQL specifice, respectând sintaxa corespunzătoare; SQL specifice, respectând sintaxa corespunzătoare;

• interogarea SQL Access creată se poate lansa în execuţie în interogarea SQL Access creată se poate lansa în execuţie în două moduri: prin utilizarea butonului din bara Query două moduri: prin utilizarea butonului din bara Query Design sau prin opţiunea Run, din meniul Query.Design sau prin opţiunea Run, din meniul Query.

Comenzile pentru definirea datelor (LDD)Comenzile pentru definirea datelor (LDD)

Principalele comenzi SQL pentru definire a Principalele comenzi SQL pentru definire a datelor sunt următoarele: datelor sunt următoarele:

CREATE DATABASE CREATE DATABASE

DROP DATABASEDROP DATABASE

CREATE TABLECREATE TABLE

ALTER TABLEALTER TABLE

DROP TABLEDROP TABLE

Comanda Comanda CREATE DATABASECREATE DATABASE are următoarea are următoarea sintaxă:sintaxă:

CREATE DATABASE nume_baza_de_dateCREATE DATABASE nume_baza_de_date fiind fiind utilizată pentru crearea unei noi baze de date. Access SQL utilizată pentru crearea unei noi baze de date. Access SQL nu acceptă o astfel de comandă.nu acceptă o astfel de comandă.

Comanda Comanda DROP DATABASEDROP DATABASE cu sintaxa: cu sintaxa:

DROP DATABASE nume_baza_de_dateDROP DATABASE nume_baza_de_date este utilizată este utilizată pentru ştergerea bazei de date. Access SQL nu acceptă o pentru ştergerea bazei de date. Access SQL nu acceptă o astfel de comandă.astfel de comandă.

Pentru crearea unei tabele se utilizează comanda: Pentru crearea unei tabele se utilizează comanda: CREATE TABLE nume_tabela (câmp1 tip_data [NOT CREATE TABLE nume_tabela (câmp1 tip_data [NOT

NULL], câmp2 tip_data [NOT NULL], câmp3 tip_data NULL], câmp2 tip_data [NOT NULL], câmp3 tip_data [NOT NULL]...);[NOT NULL]...);

Printre cele mai importante tipuri de date folosite amintim: Printre cele mai importante tipuri de date folosite amintim: Character, Memo, Number, Integer, Decimal, Logical, Date, Character, Memo, Number, Integer, Decimal, Logical, Date, OLE Object etc. OLE Object etc.

Pentru modificarea structurii unui tabel se utilizează Pentru modificarea structurii unui tabel se utilizează comanda comanda ALTER TABLEALTER TABLE cu sintaxă : cu sintaxă :

ALTER TABLE nume_tabela ADD nume_câmp ALTER TABLE nume_tabela ADD nume_câmp tip_dattip_dataa;;

Comanda Comanda DROP TABLEDROP TABLE nume_tabela este folosită pentru nume_tabela este folosită pentru a şterge complet o tabelă dintr-o baza de date (structura şi a şterge complet o tabelă dintr-o baza de date (structura şi valorile asociatevalorile asociate).).

Pentru definirea Pentru definirea interogărilor de selecţie simpleinterogărilor de selecţie simple se utilizează se utilizează următoarea sintaxă a instrucţiunii SELECT: următoarea sintaxă a instrucţiunii SELECT:

SELECT [domeniu] lista_selectie SELECT [domeniu] lista_selectie FROM nume_tabela1, nume_tabela2,... FROM nume_tabela1, nume_tabela2,... [WHERE criteriul_de_selectie] [WHERE criteriul_de_selectie]

[ORDER BY câmpuri_criteriu [ASC|DESC]];[ORDER BY câmpuri_criteriu [ASC|DESC]];DomeniuDomeniu permite stabilirea modalităţii de manipulare a permite stabilirea modalităţii de manipulare a

înregistrărilor din baza de date şi poate fi: înregistrărilor din baza de date şi poate fi: – ALL : permite includerea tuturor înregistrărilor ce îndeplinesc ALL : permite includerea tuturor înregistrărilor ce îndeplinesc condiţiile impuse. condiţiile impuse.

– DISTINCT : are ca efect eliminarea înregistrărilor care conţin DISTINCT : are ca efect eliminarea înregistrărilor care conţin duplicate în câmpurile selectate astfel, se va afişa doar o apariţie a duplicate în câmpurile selectate astfel, se va afişa doar o apariţie a datei multiple; datei multiple;

– DISTINCTROW are în vedere înregistrările duplicate în DISTINCTROW are în vedere înregistrările duplicate în ansamblul lor, nu numai pe cele care au câmpuri duplicate. ansamblul lor, nu numai pe cele care au câmpuri duplicate.

Comenzi pentru selecţia datelorComenzi pentru selecţia datelor

Lista_selectieLista_selectie cuprinde toate câmpurile care vor apărea cuprinde toate câmpurile care vor apărea în tabela cu rezultatele interogării.în tabela cu rezultatele interogării.

Clauza Clauza FROMFROM specifică numele tabelei sau tabelelor specifică numele tabelei sau tabelelor care vor forma suportul interogării. care vor forma suportul interogării.

ClauzaClauza WHERE WHERE face interogările mai selective, face interogările mai selective, specificând faptul că vor fi afişate numai înregistrările care specificând faptul că vor fi afişate numai înregistrările care îndeplinesc criteriul descris. Clauza WHERE este opţională îndeplinesc criteriul descris. Clauza WHERE este opţională şi nu operează cu funcţii totalizatoare. În cadrul condiţiei din şi nu operează cu funcţii totalizatoare. În cadrul condiţiei din clauza WHERE pot fi utilizaţi operatorii : AND, OR, NOT, clauza WHERE pot fi utilizaţi operatorii : AND, OR, NOT, IN, BETWEEN, LIKE. IN, BETWEEN, LIKE.

ClauzaClauza ORDER BY ORDER BY utilizată atunci când se doreşte ca utilizată atunci când se doreşte ca rezultatele interogării să fie ordonate în mod crescător rezultatele interogării să fie ordonate în mod crescător (ASC) sau descrescător (DESC). (ASC) sau descrescător (DESC).

În cadrul interogărilor de selecţie simple SQL În cadrul interogărilor de selecţie simple SQL ACCESS se pot folosi şi funcţii totalizatoare. Cele mai ACCESS se pot folosi şi funcţii totalizatoare. Cele mai importante funcţii din această categorie sunt: importante funcţii din această categorie sunt:

COUNT : returnează numărul de înregistrări care COUNT : returnează numărul de înregistrări care respectă condiţiile stabilite prin clauza WHERE, respectă condiţiile stabilite prin clauza WHERE,

SUM : redă suma tuturor valorilor dintr-un câmp; SUM : redă suma tuturor valorilor dintr-un câmp; operează numai cu valori numerice, operează numai cu valori numerice,

AVG : calculează valoarea medie a unui câmp AVG : calculează valoarea medie a unui câmp numeric, numeric,

MAX : permite determinarea celei mai mari valori MAX : permite determinarea celei mai mari valori dintr-un câmp,dintr-un câmp, nu operează în cadrul clauzei WHERE; nu operează în cadrul clauzei WHERE;

MIN : duce la obţinerea celei mai mici valori a unui MIN : duce la obţinerea celei mai mici valori a unui câmp, rămâne valabilă şi aici restricţia privind clauza câmp, rămâne valabilă şi aici restricţia privind clauza WHERE. WHERE.

Pentru definirea Pentru definirea interogărilor de selecţie agregateinterogărilor de selecţie agregate se utilizează se utilizează următoarea sintaxă a instrucţiunii SELECT:următoarea sintaxă a instrucţiunii SELECT:

SELECT [domeniu] f_agreg(nume_camp) as alias [,lista_selectie]SELECT [domeniu] f_agreg(nume_camp) as alias [,lista_selectie]FROM nume_tabela1, nume_tabela2,... FROM nume_tabela1, nume_tabela2,... GROUP BY camp_grupareGROUP BY camp_grupare

[HAVING criteriu_grupare][HAVING criteriu_grupare] [ORDER BY campuri_criteriu [ASC|DESC]];[ORDER BY campuri_criteriu [ASC|DESC]];

În cadrul listei de selecţie se pot defini şi În cadrul listei de selecţie se pot defini şi alias-urialias-uri. Acestea . Acestea reprezintă un pseudonim (nume) asociat unui câmp care este reprezintă un pseudonim (nume) asociat unui câmp care este argument al funcţiei agregat, astfel : câmp AS alias.argument al funcţiei agregat, astfel : câmp AS alias.

Clauza Clauza GROUP BYGROUP BY precizează câmpul sau câmpurile pe baza precizează câmpul sau câmpurile pe baza cărora se va efectua gruparea înregistrărilor. cărora se va efectua gruparea înregistrărilor.

Clauza Clauza HAVINGHAVING se referă la criteriul care va fi aplicat se referă la criteriul care va fi aplicat câmpului-definit ca argument al funcţiei agregat. Altfel spus, când câmpului-definit ca argument al funcţiei agregat. Altfel spus, când se foloseşte clauza GROUP BY şi este necesară şi o condiţie, se va se foloseşte clauza GROUP BY şi este necesară şi o condiţie, se va utiliza clauza HAVING. utiliza clauza HAVING.

AsocieriAsocieriLLimbajul SQL oimbajul SQL oferferă posibilitatea de a grupa şi ă posibilitatea de a grupa şi

folosi date din tabele diferite. folosi date din tabele diferite. Joncţiunile se pot clasifica în:Joncţiunile se pot clasifica în:- - joncţiuni CROSSjoncţiuni CROSS mai puţin utilizată, cu rol în mai puţin utilizată, cu rol în

ilustrarea elementelor specifice proprietăţilor ilustrarea elementelor specifice proprietăţilor combinatorii ale asocierilor;combinatorii ale asocierilor;

- - joncţiuni de ECHIVALENŢĂjoncţiuni de ECHIVALENŢĂ, cea mai , cea mai folosită, presupune folosirea clauzei WHERE folosită, presupune folosirea clauzei WHERE asociată cu o egalitate dorită;asociată cu o egalitate dorită;

- - joncţiuni de NEECHIVALENŢĂ, joncţiuni de NEECHIVALENŢĂ, care face care face apel în clauza WHERE la oricare operator de apel în clauza WHERE la oricare operator de comparare în afară de semnul egal.comparare în afară de semnul egal.

Sintaxa generală pentru joncţiunile Sintaxa generală pentru joncţiunile echivalente şi neechivalente este: echivalente şi neechivalente este:

SELECT [domeniu] lista_selectieSELECT [domeniu] lista_selectie

FROM nume_tabela1, nume_tabela2FROM nume_tabela1, nume_tabela2

WHERE criteriul_asociereWHERE criteriul_asociere

[ORDER BY câmpuri_criteriu [ASC|DESC]];[ORDER BY câmpuri_criteriu [ASC|DESC]];

Deoarece în aceste instrucţiunile SQL se Deoarece în aceste instrucţiunile SQL se utilizează câmpuri ce fac parte din tabele utilizează câmpuri ce fac parte din tabele diferite, este necesară întotdeauna diferite, este necesară întotdeauna specificarea tabelei de care aparţin. specificarea tabelei de care aparţin.

Forma generală de descriere a unui astfel Forma generală de descriere a unui astfel de câmp va fi următoarea: de câmp va fi următoarea:

nume_tabelă.nume_câmp.nume_tabelă.nume_câmp.

O altă abordare priveşte joncţiunile ca fiind: O altă abordare priveşte joncţiunile ca fiind: interneinterne (INNER JOIN) şi (INNER JOIN) şi externeexterne (OUTER JOIN). (OUTER JOIN).

Joncţiunile tip INNER JOINJoncţiunile tip INNER JOIN determină o asociere determină o asociere a înregistrărilor din tabele, astfel încât să rezulte un a înregistrărilor din tabele, astfel încât să rezulte un număr total de înregistrări egal cu produsul numărului număr total de înregistrări egal cu produsul numărului de înregistrări din fiecare tabelă.de înregistrări din fiecare tabelă.

Joncţiunile externe (OUTER)Joncţiunile externe (OUTER) sunt de două tipuri: sunt de două tipuri: de stânga (LEFT OUTER JOIN) şi de dreapta (RIGHT de stânga (LEFT OUTER JOIN) şi de dreapta (RIGHT OUTER JOIN), fiind destul de puţin utilizate. OUTER JOIN), fiind destul de puţin utilizate.

JoncJoncţiunile au următoarea sintaxă:ţiunile au următoarea sintaxă:

SELECT [domeniu] lista_selectie SELECT [domeniu] lista_selectie FROM nume_tab1 FROM nume_tab1 {INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tab2 {INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tab2 ON criteriul_de_asociere ON criteriul_de_asociere [{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tab3 [{INNER|LEFT OUTER|RIGHT OUTER} JOIN nume_tab3 ON criteriul_de_asociere]... ON criteriul_de_asociere]... [WHERE criteriul_de_selectie] [WHERE criteriul_de_selectie] [ORDER BY câmpuri_criteriu [ASC|DESC]];[ORDER BY câmpuri_criteriu [ASC|DESC]];

– INNER, LEFT OUTER, RIGHT, OUTERINNER, LEFT OUTER, RIGHT, OUTER se refera lase refera la tipurile de joncţiuni;tipurile de joncţiuni;

– JOINJOIN specifică tabela care va fi asociatăspecifică tabela care va fi asociată (nume_tab2, (nume_tab2, nume_tab3...) nume_tab3...) tabelei precizată în clauzatabelei precizată în clauza FROM; FROM;

– ONON criteriul de asocierecriteriul de asociere arată relaţia dintre câmpurile pe arată relaţia dintre câmpurile pe care se bazează joncţiunea.care se bazează joncţiunea.

CombinărileCombinările Când utilizatorul doreşte să vadă rezultatele mai Când utilizatorul doreşte să vadă rezultatele mai

multor interogări SELECT în acelaşi timp, prin multor interogări SELECT în acelaşi timp, prin combinarea ieşirilor lor, poate utiliza facilitatea UNION combinarea ieşirilor lor, poate utiliza facilitatea UNION a limbajului de interogare SQLa limbajului de interogare SQL..

Sintaxă generală:Sintaxă generală:

SELECT lista_câmpuri FROM tabela1SELECT lista_câmpuri FROM tabela1

UNION SELECT lista_campuri FROM tabela2UNION SELECT lista_campuri FROM tabela2

[GROUP BY camp_de_grupare][GROUP BY camp_de_grupare]

[HAVING criteriul_de_agregare][HAVING criteriul_de_agregare]

[UNION…][UNION…]

[ORDER BY camp_criteriu_de_sortare];[ORDER BY camp_criteriu_de_sortare];

Instrucţiunile care generează interogări Instrucţiunile care generează interogări UNION se caracterizează prin următoarele UNION se caracterizează prin următoarele restricţii:restricţii:

•numărul de câmpuri din lista de câmpuri numărul de câmpuri din lista de câmpuri asociată fiecărei instrucţiuni SELECT şi UNION asociată fiecărei instrucţiuni SELECT şi UNION SELECT trebuie să fie acelaşi;SELECT trebuie să fie acelaşi;

•este permisă doar o dată utilizarea clauzei este permisă doar o dată utilizarea clauzei ORDER BY, după ultima instrucţiune UNION ORDER BY, după ultima instrucţiune UNION SELECT;SELECT;

•secvenţa de nume din fiecare listă de secvenţa de nume din fiecare listă de câmpuri trebuie să corespundă unor intrări câmpuri trebuie să corespundă unor intrări identice.identice.

ComenziComenzi pentru manipularea datelor pentru manipularea datelorINSERTINSERTSintaxa comenzii prezintă două forme:Sintaxa comenzii prezintă două forme:INSERT…VALUESINSERT…VALUES şi şi INSERT… SELECTINSERT… SELECT..

INSERT INTO INSERT INTO tabtab (câmp1, câmp2...) (câmp1, câmp2...) VALUES (valoare1,valoare2...);VALUES (valoare1,valoare2...);

Trebuie sTrebuie săă se respecte u se respecte următoarele reguli:rmătoarele reguli:• valorile menţionate în clauza VALUES vor valorile menţionate în clauza VALUES vor

avea acelaşi tip cu câmpurile specificate în clauza avea acelaşi tip cu câmpurile specificate în clauza INTO, INTO,

•mărimea valorii corespunzătoare fiecărui mărimea valorii corespunzătoare fiecărui câmp va fi mai mica decât dimensiunea câmp va fi mai mica decât dimensiunea câmpului, câmpului,

•daca un câmp are definiţia NOT NULL, va fi daca un câmp are definiţia NOT NULL, va fi obligatorie introducerea unei valori pentru obligatorie introducerea unei valori pentru acesta.acesta.

INSERT INTO nume_tab1 (câmp1, câmp2...) INSERT INTO nume_tab1 (câmp1, câmp2...)

SELECT [domeniu] [lista selectie]SELECT [domeniu] [lista selectie]

from nume_tab2 [WHERE criteriu];from nume_tab2 [WHERE criteriu];

Reguli suplimentare:Reguli suplimentare:

•fraza SELECT nu poate extrage înregistrări din fraza SELECT nu poate extrage înregistrări din tabela destinaţie;tabela destinaţie;

•numărul şi natura câmpurilor menţionate în numărul şi natura câmpurilor menţionate în clauza INTO trebuie să fie aceleaşi cu numărul şi clauza INTO trebuie să fie aceleaşi cu numărul şi natura câmpurilor returnate de instrucţiunea natura câmpurilor returnate de instrucţiunea SELECT.SELECT.

Comanda Comanda DELETEDELETE are următoarea sintaxă: are următoarea sintaxă:

DELETE FROM tabela [WHERE criteriu]; DELETE FROM tabela [WHERE criteriu];

Şterge parţial sau total înregistrările din tabele.Şterge parţial sau total înregistrările din tabele.

Comanda Comanda UPDATEUPDATE are următoarea sintaxă: are următoarea sintaxă:

UPDATE tabelaUPDATE tabela

SET câmp1 = valoare1 [,câmp2 = valoare2]...SET câmp1 = valoare1 [,câmp2 = valoare2]...

[WHERE criteriul_de_actualizare][WHERE criteriul_de_actualizare];;

Aceasta are atât scopul de a insera noi înregistrări, Aceasta are atât scopul de a insera noi înregistrări, cât si de a modifica valorile câmpurilor din cât si de a modifica valorile câmpurilor din înregistrările existente. înregistrările existente.