Sunteți pe pagina 1din 43

Limbajul SQL

curs

LIMBAJUL STRUCTURAT DE INTEROGARE


SQL (Structured Query Language) este limbajul standard pentru bazele de date (BD) relaionale ANSI 1986 ISO 1992 Peste o sut de sisteme de gestiune a bazelor de date (SGBD) accept recunosc limbajul SQL.
5/21/2010 Luminita SCRIPCARIU 2

PROPRIETI
Este un limbaj neprocedural cu format liber care permite: crearea bazei de date relaionale structurarea relaiilor prin componenta sa de definire a datelor (DDL) efectuarea operaiilor elementare asupra BD (inserare, tergere, modificare a datelor) efectuarea interogrilor asupra BD, prin componenta de manipulare a datelor (DML) controlul tranzaciilor i al accesului la BD.
5/21/2010 Luminita SCRIPCARIU 3

IMPLEMENTRI SQL
Prima implementare comercial a unui SGBD relaional bazat pe SQL a fost realizat de corporaia ORACLE. Ulterior au aprut sute de produse de BD bazate pe SQL i dialecte ale acestuia (MySQL, PostgreSQL, MS SQL etc). SGBD relaionale: MS Access, Oracle, Ingres i altele.
5/21/2010 Luminita SCRIPCARIU 4

MBUNTIRI
definirea de noi componente precum standardul de acces la BD de la distan (RDA Remote Data Access) i sistemul de dicionare de resurse informaionale (IRDS Information Resource Dictionary System) suport pentru BD distribuite n reea, programarea orientat-obiect i acceptarea extensiilor definite de ctre utilizator.
5/21/2010 Luminita SCRIPCARIU 5

OBSERVAII
conine comenzi de definire i regsire a datelor (CREATE TABLE, SELECT TABLE, DELETE, INSERT etc.) nu conine instruciuni pentru controlul fluxului datelor (IF ... THEN ... ELSE, GO TO, DO etc.).

5/21/2010

Luminita SCRIPCARIU

OBSERVAII
Limbajul SQL folosete termenii de tabele, coloane i rnduri n locul celor de relaii, atribute i nregistrri. O instruciune SQL include cuvinte rezervate i cuvinte definite de utilizator, insensibile la formatul caracterelor (upper case, lower case). SQL este sensibil la formatul literelor (case sensitive) numai n cazul nregistrrilor din BD.
5/21/2010 Luminita SCRIPCARIU 7

REGULI SQL (1)


Fiecare clauz a unei instruciuni trebuie scris pe o linie nou, cu separare prin virgul. Dac o clauz are mai multe pri, fiecare dintre acestea este scris pe o linie nou i indentat pentru a indica relaia cu linia superioar. Fiecare instruciune se ncheie prin caracterul punct i virgul.
5/21/2010 Luminita SCRIPCARIU 8

REGULI SQL (2)


Majusculele sunt utilizate pentru cuvintele rezervate (SELECT, INSERT, DELETE, GRANT etc.). Literele mici sunt folosite pentru termenii proprii utilizatorului (denumiri de tabele, coloane, cmpuri etc.). Valorile se scriu ntre paranteze rotunde, separate prin virgule. Valorile literale sunt ncadrate de apostroafe.
5/21/2010 Luminita SCRIPCARIU 9

REGULI SQL (3)


Se utilizeaz punctul . ca separator ntre numele tabelei i numele cmpului, atunci cnd o interogare folosete ca surse mai multe tabele (SELECT clienti.id); Se ncadreaz cu paranteze drepte [ ] nume de ] tabele sau cmpuri interspaiate sau care conin caractere neaceptate de SQL (SELECT clienti.[nume client]); Valorile de tip dat/timp se vor nscrie ntre caractere diez #. Caracterele de nlocuire generice sunt ? sau *.
5/21/2010 Luminita SCRIPCARIU 10

Identificatorii SQL
lucreaz cu setul de caractere prestabilit de ISO: litere mari (A Z), litere mici (az), cifre (0 9), liniua de subliniere (_ underscore). Numele de identificatori sunt case sensitive i nu trebuie s depeasc lungimea maxim impus (tipic, 128 de caractere) ncep cu o liter i nu cu alt caracter (cifr, alt semn etc.) Nu conin spaii libere.
5/21/2010 Luminita SCRIPCARIU 11

Ce include vocabularul SQL?


Instruciuni: determin executarea unei aciuni (SELECT; iuni CREATE; INSERT; DELETE; UPDATE). Clauze: restricioneaz aria valoric a entitilor care particip la o interogare (WHERE; ORDER BY; GROUP BY; HAVING). Funcii: mbuntesc capacitile SQL de a manipula datele (Sum; Max; Avg; Count). Operatori: efectueaz operaii aritmetice sau logice asupra datelor.
5/21/2010 Luminita SCRIPCARIU 12

TIPURI DE DATE SQL

Caracter bit numeric:


exact:

CHAR, VARCHAR [lungime] BIT, BIT VARYING [lungime]

NUMERIC [precizie [, scala]] DECIMAL sau DEC [precizie [, scala]] INTEGER sau INT SMALL INTEGER sau SMALLINT aproximativ: FLOAT [precizia] REAL DOUBLE PRECISSION
5/21/2010 Luminita SCRIPCARIU 13

OBSERVAII
Parametrii unui tip de date se scriu ntre paranteze rotunde dup cuvntul care l definete. Precizia se exprim ca numr de cifre din mantis (partea ntreag). Scala se exprim ca numr de cifre din exponent (numr de zecimale). Numrul de cifre din cmpul principal este separat prin virgul de numrul de zecimale prin care se exprim o valoare.
5/21/2010 Luminita SCRIPCARIU 14

ALTE TIPURI DE DATE SQL

data i ora
DATE TIME [precizie_or] [WITH TIME ZONE] TIMESTAMP [precizie_or] [WITH TIME ZONE] Interval INTERVAL{{cmp_de_start TO cmp_final} cmp_data_ora }

5/21/2010

Luminita SCRIPCARIU

15

OBSERVAIE
Cmpurile din instruciunea INTERVAL sunt de forma: YEAR|MONTH|DAY|HOUR|MINUTE [precizie]

Exemplu: Instruciunea SQL: INTERVAL YEAR(1) TO MONTH Semnific un interval de la 0 ani i 0 luni (timpul prezent) la 9 ani i 11 luni. Numrul de ani poate fi scris n acest caz cu o singur cifr.
5/21/2010 Luminita SCRIPCARIU 16

INSTRUCIUNI SQL DE DEFINIRE


CREATE DATABASE, DROP DATABASE CREATE TABLE, ALTER TABLE, DROP TABLE CREATE DOMAIN, ALTER DOMAIN, DROP DOMAIN CREATE VIEW, DROP VIEW CREATE INDEX, DROP INDEX

5/21/2010

Luminita SCRIPCARIU

17

FORMAT
CREATE TABLE nume_tabel {(nume_coloan tip_de_date [NOT NULL] [UNIQUE] [DEFAULT opiune_prestabilit] [CHECK (condiie)] [, ...] [PRIMARY KEY (list_de_coloane),] {[UNIQUE (list_de_coloane),] [,...]} {[FOREIGN KEY (list_de_coloane_chei_strine), REFERENCES nume_tabel_printe [(list_de_coloane_chei_candidat)], [MATCH { PARTIAL | FULL} [ON UPDATE aciune_referenial] [ON DELETE aciune_referenial]} {[CHECK (condiie)] [,]})}
5/21/2010 Luminita SCRIPCARIU 18

EXEMPLU
CREATE TABLE proprietati( cod_proprietate DEC(5,0) NOT NULL UNIQUE, zona VARCHAR(20) NOT NULL, tip VARCHAR(10) NOT NULL, pret INT, cod_agent DEC(3,0), cod_proprietar DEC(6,0) NOT NULL, PRIMARY KEY (cod_proprietate), FOREIGN KEY (cod_agent) REFERENCES agenti ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (cod_proprietar) REFERENCES proprietari);

5/21/2010

Luminita SCRIPCARIU

19

FORMAT
ALTER TABLE nume_tabel [ADD [COLUMN] nume_coloan tip_de_date [NOT NULL] [UNIQUE] [DEFAULT opiune_prestabilit] [CHECK (condiie)] [DROP [COLUMN] nume_coloan [RESTRICT | CASCADE]] [ADD [CONSTRAINT [nume_constrngere]] definiie_constrngere] [DROP CONSTRAINT nume_constrngere [RESTRICT | CASCADE]] [ALTER [COLUMN] SET DEFAULT opiune_ prestabilit] [ALTER [COLUMN] DROP DEFAULT]

5/21/2010

Luminita SCRIPCARIU

20

CREAREA UNUI DOMENIU


CREATE DOMAIN nume_domeniu AS tip_de_date [DEFAULT opiune_prestabilit] [CHECK (condiie)]; Tipul datelor poate fi declarat separat sub forma unui domeniu de valori i utilizat pentru mai multe variabile de acelai tip. La crearea tabelului se specific n locul tipului datelor, numele domeniului scris cu majuscule.
5/21/2010 Luminita SCRIPCARIU 21

Instruciunea DROP
Elimin articole din BD sau integral BD:
DROP ARTICOL nume_articol [RESTRICT|CASCADE]

Opiunea RESTRICT nu permite tergerea articolului dac de acesta depind alte date din BD. Opiunea CASCADE determin tergerea acelui articol din BD precum i a tuturor datelor care depindeau de acesta. Permite actualizarea structurii BD dup o perioad mai lung de timp sau atunci cnd se reproiecteaz aceasta.
5/21/2010 Luminita SCRIPCARIU 22

Indexul
Este o structur care ofer acces accelerat la nregistrrile din BD, pe baza valorilor dintr-una sau mai multe coloane ale unui tabel: CREATE [UNIQUE] INDEX nume_index ON nume_tabel (coloana [ASC|DESC] [, ])

5/21/2010

Luminita SCRIPCARIU

23

Modificarea structurii de coloane a unui tabel


ALTER TABLE nume_tabel [ADD [COLUMN] nume_coloan tip_de_date [NOT NULL] [UNIQUE] [DEFAULT opiune_prestabilit] [CHECK (condiie)] [DROP [COLUMN] nume_coloan [RESTRICT | CASCADE]] [ADD [CONSTRAINT [nume_constrngere]] definiie_constrngere] [DROP CONSTRAINT nume_constrngere [RESTRICT | CASCADE]] [ALTER [COLUMN] SET DEFAULT opiune_ prestabilit] [ALTER [COLUMN] DROP DEFAULT]

5/21/2010

Luminita SCRIPCARIU

24

INSTRUCIUNI SQL DE MANIPULARE


SELECT - interogarea BD; INSERT - introducere de noi nregistrri n BD; UPDATE - reactualizarea BD; DELETE - tergerea de nregistrri din BD.

5/21/2010

Luminita SCRIPCARIU

25

Instruciunea SELECT ...


SELECT [ALL|DISTINCT|DISTINCTROW] {*|coloana [AS nume_nou]|[funcie agregat(cmp) [AS alias]] [, ]} FROM nume_tabel_sau_vedere [alias] [,] [WHERE condiie de selecie sau compunere] [GROUP BY lista_de_coloane] [HAVING condiie] [ORDER BY lista_de coloane {ASC/DESC}];
5/21/2010 Luminita SCRIPCARIU 26

DOMENIUL
Mulimea nregistrrilor din BD asupra creia opereaz selecia. ALL (implicit) include toate nregistrrile care ndeplinesc condiiile impuse. DISTINCT elimin nregistrrile care au valori duplicate n cmpurile selectate (se va afia doar o apariie a datei multiple). DISTINCTROW elimin nregistrrile duplicate n ansamblul lor.

5/21/2010

Luminita SCRIPCARIU

27

Clauze
Clauza FROM precizeaz tabela, tabelele sau interogrile deja create din care fac parte cmpurile ce fac obiectul proieciei BD (,) Clauza WHERE precizeaz criteriul de selecie sub forma unei expresii. Clauza este opional i nu opereaz cu funcii totalizatoare. Clauza GROUP BY precizeaz cmpul sau cmpurile pe baza crora se va efectua gruparea nregistrrilor. Astfel, se pot executa funciile agregate descrise n lista de selecie pentru fiecare dintre grupurile de nregistrri.
5/21/2010 Luminita SCRIPCARIU 28

Clauze
Clauza ORDER BY precizeaz criteriul de ordonare a nregistrrilor selectate. Fiecare cmp precizat n Clauza ORDER BY constituie o cheie de sortare (sensul sortrii se precizeaz prin ASC (implicit) sau DESC) Clauza HAVING se refer la restricia aplicat cmpului de grupare. Clauza WHERE acioneaz nainte de gruparea nregistrrilor, n timp ce HAVING activeaz restricia dup gruparea acestora.
5/21/2010 Luminita SCRIPCARIU 29

OPERATORI SCALARI
operatorii aritmetici: *, /, +, operatorul de transformare a tipului de date: CAST(tip1 AS tip2) concatenarea de iruri: ||

5/21/2010

Luminita SCRIPCARIU

30

FUNCII SPECIFICE
funcia de lungime: BIT_LENGTH, CHAR_LENGTH identificarea utilizatorului curent:USER identificarea sesiunii: SESSION_USER identificarea sistemului: SYSTEM_USER scrierea cu litere mici: LOWER scrierea cu majuscule: UPPER data sau timpul curent: CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP
5/21/2010 Luminita SCRIPCARIU 31

FUNCII DE GRUP
se aplic pe o coloan ntreag i genereaz o singur valoare:
COUNT SUM AVG MIN MAX numrare sumare calculul valorii medii deducerea valorii minime deducerea valorii maxime.

5/21/2010

Luminita SCRIPCARIU

32

Clauza WHERE
poate fi urmat de unul din urmtoarele 5 predicate:
Compararea valorilor folosind operatorii de comparare (=, <, >, <=, >=, <>, !=) i/sau operatorii logici (AND, OR, NOT); Testarea domeniului de valori al unei expresii (BETWEEN/NOT BETWEEN); Testarea apartenenei la o mulime de valori (IN/ NOT IN); Corespondena la un anumit model (LIKE/NOT LIKE); Testarea condiiei de null (IS NULL/IS NOT NULL).
5/21/2010 Luminita SCRIPCARIU 33

LIKE/NOT LIKE
simbolul procent (%) reprezint un ir de zerouri sau de mai multe caractere caracterul liniu de subliniere ( _ ) reprezint un caracter singular. Exemplu: WHERE nume=A% selecteaz toate nregistrrile al cror nume ncep cu litera A.
5/21/2010 Luminita SCRIPCARIU 34

Clauza ORDER BY
poate ordona nregistrrile cresctor sau descresctor, alfabetic sau numeric, pe baza uneia sau a mai multor coloane. Prima coloan constituie cheia major de sortare urmtoarele sunt chei minore de sortare.

5/21/2010

Luminita SCRIPCARIU

35

Exemplu
SELECT proprietate_proprietar_agent.localitate, proprietate_proprietar_agent.tip, proprietate_proprietar_agent.suprafata, proprietate_proprietar_agent.agent.nume, proprietate_proprietar_agent.agent.prenume FROM proprietate_proprietar_agent WHERE ((proprietate_proprietar_agent.localitate)="iasi");
5/21/2010 Luminita SCRIPCARIU 36

Compunerea (Join)
Se utilizeaz n clauza WHERE (pentru selecia nregistrrilor) asociat cu o egalitate a valorilor n cmpurile de legtur. Exemplu: SELECT A.a2,A.a3, B.b2 WHERE A.a1=B.a1;
Tabela A a1 a2 a3 a4 a5 a6 Tabela B b1 b2 b3 b4 b5 a1

5/21/2010

Luminita SCRIPCARIU

37

INNER JOIN sau echivalent (echicompunere) este aceea n care liniile unui tabel sunt combinate cu liniile altui tabel, rezultnd un numr total de linii egal cu produsul numrului de linii din fiecare tabel (cazul 1 din Join Properties). LEFT OUTER JOIN (1 n) include toate nregistrrile din tabela A (cardinalitate 1) i numai acele nregistrri din tabela B (cardinalitate n) pentru care valorile atributelor cheie (a1) sunt a1 egale (cazul 2 din Join Properties). RIGHT OUTER JOIN (1 n) include toate nregistrrile din tabela B (cardinalitate n) i numai acele nregistrri din tabela A (cardinalitate 1) pentru care valorile atributelor cheie (a1) sunt a1 egale (cazul 3 din Join Properties).
5/21/2010 Luminita SCRIPCARIU 38

Exemplu
SELECT produs.id_produs, produs.denumire, achizitii.data_ach, Round([Pret_Nou]*0.8) AS [Pret redus] FROM (produs INNER JOIN achizitii ON produs.id_produs = achizitii.id_produs) INNER JOIN preturi_noi ON produs.id_produs = preturi_noi.id_produs WHERE (((achizitii.data_ach)<#2/1/2010#));
5/21/2010 Luminita SCRIPCARIU 39

INSTRUCIUNEA INSERT
INSERT INTO nume_tabel [(list_de_coloane)] VALUES (list_de_valori); INSERT INTO nume_tabel [(list_de_coloane)] SELECT ;

5/21/2010

Luminita SCRIPCARIU

40

EXEMPLU
INSERT INTO agenti (nume, prenume, cnp, filiala) VALUES (popescu, marius, 1900102111111, iasi);

5/21/2010

Luminita SCRIPCARIU

41

INSTRUCIUNEA UPDATE
UPDATE nume_tabel SET coloana_1=valoare_1[,coloana_2=valoare_2 ] [WHERE condiie]; exemplu: UPDATE agenti SET salariu = salariu*1,05 WHERE vechime >= 3;
5/21/2010 Luminita SCRIPCARIU 42

INSTRUCIUNEA DELETE

DELETE FROM nume_tabel [WHERE condiie];

5/21/2010

Luminita SCRIPCARIU

43

S-ar putea să vă placă și