Documente Academic
Documente Profesional
Documente Cultură
Curs SQL
Contents
1.
2.
3.
4.
2.
3.
4.
Tipuri de date pentru obiecte mari date pentru obiecte mari .................................................... 4
5.
5.
6.
2.
3.
4.
5.
7.
8.
2.
3.
9.
10.
11.
13.
1.
2.
3.
4.
Operatorul IN............................................................................................................................. 13
5.
6.
7.
8.
14.
1.
15.
1.
2.
1.
16.
1. Definire SQL
SQL este acronimul pentru Structured Query Language si este un limbaj standard pentru
comunicarea cu bazele de date relationale.
Query inseamna interogare si este o cerere (intrebare) adresata bazei de date. Se spune
ca SQL este un limbaj declarativ, neprocedural, datorita faptului ca rezultatele dorite se
obtin direct si nu prin aplicarea unor proceduri prestabilite ce contin instructiuni
executate secvential. Deseori SQL se foloseste in combinatie cu limbajul PHP sau alte
limbaje.
In ciuda simplitatii sale, SQL este un limbaj foarte puternic, care:
poate obtine accesul la date stocate n mai multe tabele
poate filtra datele dorite
si poate sorta, rezuma si afisa rezultatele
Multe dintre aplicaiile baze de date sunt construite folosind modelul clasic clientserver.
Modelul este caracterizat de cele dou componente:
o client-ul foloseste interfaa,
o server-ul conine baza de date.
2
Cel mai frecvente sunt situatiile in care baza de date este instalata intr-un aranjament
client-server (si nu in acelasi SGBD-database management sistem).
Intr-un aranjament client-server:
o Sistemul DBMS (sau SGBD) ruleaza pe un server, care este un sistem de calcul
partajat;
o Fisierele care compun baza de date din punct de vedere fizic sunt stocate pe
server;
o Utilizatorii folosesc statii de lucru numite clienti. Clientul trebuie sa aiba o
conexiune de retea la baza de date (care poate fi plasata chiar pe Internet). Pe
calculatoarele client trebuie sa functioneze un soft prin intermediul careia acesta
sa poata face cereri si primi rezultatul acestora. Acest gen de soft se cheama
client SQL.
Nimic nu opreste faptul de a instala clientul SQL pe acelasi calculator cu sisemul DBMS.
Un DBMS foarte utilizat si datorita faptului ca e open source si free este MySQL.
MySQL ruleaza si pe parte de server si pe parte de client, inca un avantaj la MySQL. Acest
SGBD ruleaza in linie de comanda sub diferite sisteme de operare: Windows sau Linux.
Un caz aparte este SGBD ACCESS care are clientul incorporat, acest sistem fiind destinat
firmelor mici, mijlocii sau uzului personal.
Fiecare instructiune incepe cu o comanda, de obicei sub forma unui singur cuvant, care
aproape intodeauna este un verb (exemplu instructiunea SELECT);
Fiecare instructiune se termina cu un delimitator, care este de obicei, un caracter ;.
Instructiunile sunt organizate in clauze iar acestea strebuie sa apara intr-o anumita
ordine (SELECT FROM WHERE);
Instructiunea SQL precum, cuvintele cheie si cuvintele rezervate in SQL sunt scrise cu
majuscule;
Virgulele sunt folosite pentru separarea articolelor dintr-o lista;
Sirurile de caractere care apar in instructiunile SQL trebuie incadrate in ghilimele. Daca in
sirul de caractere apare u n apostrof, vor fi scrise doua apostrofuri unul dupa altul;
Comentariile:
o Pe o singura linie: incep cu doua liniute --;
o Pe mai multe linii: /*text*/
Informatiile furnizate de utilizator (numele de coloana) sunt scrise cu litere mici;
3
VARCHAR (m) un sir de caractere de lungime max 216 ;m: lungimea maxima
5. Valoarea NULL
Este o valoare speciala intr-o baza de date relationala si specifica faptul ca valoarea
respectiva nu este cunoscuta.
1. Instructiuni le DDL
Restrictiile unei coloane limiteaza intr-un fel sau in altul valorile ce pot fi stocate intr-o
coloana.
Acestea sunt:
DEFAULT valoare - Daca instructiunea care insereaza o valoare intr-o coloana nu
furnizeaza o valoare pentru aceasta coloana se va insera expresia DEFAULT specificata;
CHECK este o restrictie de verificare si este folosita pentru impunerea unei reguli care
poate fi aplicata unei singure coloane a tabelului. Conditia impusa in restrictie trebuie sa
fie indeplinita oro de cate ori datele din coloane sunt modificate. In caz contrar SGBD
respinge modificarea. COPII CHAR(1) NOT NULL CHECK COPII IN D,N);
DROP TABLE CLIENTI; etc. Sterge un tabel sau alt obiect al bazei de date.
DQL (Data Query Language)include instructiuni SQL care permit obtinerea datelor din
baza de date. Principala instructiune: SELECT.
Cea mai simpla interogare raporteaza toate coloanele din toate rndurile unui tabel.
Interogarea are urmatoarea forma:
SELECT * FROM tabel;
Unde "tabel" este numele tabelului la care se va obtine accesul. Aceasta comanda va
afisa un tabel cu fiecare rnd pe o linie separata si coloanele ntr-o ordine arbitrara. Se
foloseste semnul * in locul listei de coloane, pentru a selecta toate coloanele.
FROM specifica lista tabelelor sau vizualizarilor din care urmeaza sa fie selectate datele. In
locul numelor reale ale tabelelor se pot folosi sinonime.
Sintaxa:
SELECT lista_de_expresii
FROM nume_tabel;
6
Exemplu:
SELECT cod_film, rating_film, titlu_film FROM FILME;
Se pot specifica mai multe coloane, separate prin virgula.
Data Manipulation Language (modificarea datelor dintr-o baza de date) include comenzi
care:
o permit inserarea de rnduri noi ntr-un tabel: comanda INSERT;
o actualizarea uneia sau mai multe coloane ale rndurilor existente: comanda
UPDATE;
o respectiv stergerea unor rnduri dintr-un tabel: comanda DROP si DELETE.
1. Comanda INSERT
Pentru a insera un nou rnd ntr-un tabel, se foloseste comanda "INSERT" urmata de
clauza VALUES.
Sintaxa:
INSERT INTO tabel (coloana1, coloana2) VALUES (valoare1, valoare2);
Unde "tabel" este numele tabelului la care se va adauga rndul, "valoare1" este valoarea
pentru prima coloana din tabel, iar "valoare2" este valoarea celei de-a doua coloane din
tabel.
Numarul coloanelor specificate trebuie sa fie egal cu numarul valorilor specificate.
Exemplu:
2. Comanda UPDATE
Pentru a modifica valoarea unui rnd sau mai multor rnduri existente ntr-un tabel,
folosim comanda "UPDATE", care are urmatoarea sintaxa:
UPDATE tabel SET coloana1=valoare1, coloana2=valoare2 WHERE conditie;
Unde "tabel" este numele tabelului ale carui rnduri urmeaza sa se modifice, "coloana1"
este numele primei coloane care urmeaza a fi modificata, "valoare1" este valoarea care va fi
repartizata n "coloana1", "coloana2" este numele celei de-a doua coloane care urmeaza a fi
modificata, "valoare2" este valoarea care va fi repartizata n "coloana2", iar "conditie"
identifica rndul sau rndurile care urmeaza a fi actualizate.
Clauza SET contine o lista de una sau mai multe coloane impreuna cu o expresie care
specifica noua valoare pentru fiecare coloana.
Daca urmeaza ca fiecare rnd al coloanei sa fie actualizat, clauza "WHERE" poate fi
omisa.
Exemple:
7
3. Comanda DELETE
Pentru a sterge un rnd dintr-un tabel, folositi comanda "DELETE", care are urmatoarea
forma:
DELETE FROM tabel WHERE conditie;
Daca vor fi sterse toate rndurile tabelului, clauza WHERE poate fi omisa.
Exemple:
Stergerea rndului din tabelul "carte" asociat titlului "Curs2":
DELETE FROM carte WHERE titlu='La Medeleni';
Stergerea filmului cu codul 21:
DELETE FROM filme WHERE id_film=21;
DCL Data Control Language include instructiuni SQL care permit administratorilor sa
controleze accesul si folosirea privilegiilor DBMS.
o GRANT
o ALTER
10.
Se pot folosi aliasuri pentru selectarea datelor din tabele. Aliasurile (sau pseudimele)
modifica doar numele coloanelor. In mod artificial se creaza noi coloane.
Exemplu:
SELECT id_angajat AS cod,
id_manager AS sef
FROM angajati;
Un pseudonim redenumeste o coloana dar numai in setul de rezultate. Exemplu:
SELECT GEN_FILM AS GEN, RATING_CODE AS RATE, TITLU_FILM FROM FILME.
Rezultat:
GEN RATE TITLU_FILM
8
------------------Drama R
Act R
Com PG
Act PG
11.
In SQL sortarea este facuta prin adaugarea la clauza SELECT a clauzei ORDER BY cu o lista
de una sau mai multe coloane.
Exemplu:
SELECT codul_rating AS rating, gen_film AS gen, titlu_film AS titlu FROM FILME
ORDER BY codul_rating;
Exemplu:
9
Listati toti angajatii ordonandu-i dupa salariul anual: sal*12 sal anual (in ordine
crescatoare).
SELECT nume, functie, salariu*12 AS salariuanual
FROM angajati
ORDER BY salariu
12.
Sunt afisate doar randurile pentru care clauza WHERE este evaluata la valoarea logica
adevarat.
Sintaxa:
WHERE expresie_logica
Exemple
Afisarea numelui, grupei si a codului studentilor din anul 4:
SELECT nume, grupa, cods
FROM stud
WHERE AN = 4;
SELECT titlu, pret FROM carte WHERE carteid=1;
Listeaz toi angajaii care au salariul mai mic sau egal cu 1500.
SELECT nume, functie
FROM angajati
WHERE salariu<=1500
13.
Operatori in SQL
1. Operatori relationali:
= , Egalitate
<> , Inegalitate
!= , Inegalitate (diferit)
< , Mai mic decat > , Mai mare decat
<= , Mai mic sau egal cu
=> , Mai mare sau egal cu
2. Operatori logici
AND, OR NOT
AND , && - Sl, adevarat daca ambii operanzi sunt adevarati
OR , || - SAU, adevarat daca un operand este adevarat
NOT , ! - NU, adevarat daca operandul este fals
Se folosesc exact ca in cadrul limbajului de programare C.
Exemplu:
Afisati filmele de genul comedie, pentru care pretul de vanzare este mai mic decat 40.
SELECT cod_rata AS rating, titlu, pret, cod_gen AS gen
11
FROM filme
WHERE pret_DVD<40 AND cod_gen=comedie
ORDER BY pret_DVD;
3. Operatorul BETWEEN
Este folosit pentru a afisa articolele a caror valoare cautata se afla intr-un interval
specificat
x BETWEEN y AND z are valoarea adevarat daca valoarea lui x etse cuprinsa intre
valorile luI y si z.
Sintaxa:
expresie BETWEEN valoare_minima AND valoare_maxima
Exemple:
SELECT nume, an, punctaj
FROM studenti
WHEREpunctaj BETWEEN 2000 AND 4000;
SELECT nume, loc, data_n
FROM studenti
WHERE loc BETWEEN 'A' AND 'L'
AND data_n BETWEEN '1-JAN-89' AND '31-DEC-89';
Afisati toate filmele din BD al caror pret este cuprins inte 50 si 70:
SELECT titlu, pret_DVD
FROM filme
WHERE pret_DVD BETWEEN 50 AND 70
ORDER BY pret_DVD;
Exemplu:
12
4. Operatorul IN
Este folosit pentru a determina daca o valoare face parte dintr-o lista de valori.
o x IN (y1,y2) adevarat daca valoarea lui x este un membru al listei y1,y2.
o x NOT IN (y1, y2)- Adevarat daca valoarea lui x nu este un membru al listei y1,
y2. Lista poate contine unul, doi sau mai multi membri
Sintaxa:
expresie IN (val_1, val_2, ..., val_n)
Exemple
Afisati studentii al caror numar matricol este 1456 sau 2146:
SELECT nume, an, data_n
FROM studenti
WHERE nr_matricola IN (1456, 2146);
Afisati toate filmele pentru care cod_gen este drama sau comedie:
SELECT cod_gen AS gen, titlu
FROM filme
WHERE cod_gen IN (drama,comedie);
Exemplu:
Listeaz toi angajaii care au salariul n lista (3631, 1432, 4000, 5000).
SELECT nume, functie, salariu
FROM angajati
WHERE salariu IN (3631, 1432, 4000, 5000)
Exemplu:
Listeaz toi angajaii care au numele n lista
('POPA', 'IONESCU', 'POPESCU').
SELECT *
FROM angajati
WHERE nume IN ('POPA', 'IONESCU', 'POPESCU')
IN ignora valorile nule din lista.
13
5. Operatorul LIKE
Este folosit pentru a compara o valoare de tip sir de caractere cu un tipar, returnand
valoarea logica adevarat daca valoarea de tip sir de caractere se incadreaza in tipar sau
fals altfel.
o x LIKE y adevarat daca valoarea lui x este echivalenta cu modulul lui y
Dac nu se cunoate valoarea exact cutat, cu ajutorul condiiei LIKE putem s
selectm rndurile care se potrivesc cu un model specificat de caractere.
Operaia de cutare dup un model poate fi asemnat cu o cutare "wildcard"(caracter
de inlocuire).
Pentru construirea modelului irului cutat pot fi folosite 2 simboluri/caracter de
inlocuire:
o % orice secven de 0 sau mai multe caractere-caracter de inlocuire
nepozitional care se potriveste cu orice numar de caractere indiferent de
lungime.
o _ un singur caracter (oarecare)- este un caracter de inlocuire pozitional, adica
se potriveste cu orice caracter aflat pe pozitia respectiva.
Aceste simboluri pot fi folosite n orice combinaie de caractere literale.
Sub-limbajul folosit pentru specificarea modelelor asociate operatorului "LIKE" este
diferit de cel folosit de PHP.
Meta-caracterul "%" corespunde unui numar de zero sau mai multe caractere, iar
metacaracterul "_" corespunde unui singur caracter.
Modelele, precum sirurile, sunt incluse ntre ghilimele simple.
De exemplu, modelul '%ar%' corespunde oricarui sir care contine sub-sirul 'ar', inclusiv
siruri precum 'ar', 'arc' si 'un zar'.
Pentru a plasa un caracter "%" sau "_" ntr-un sir test, folositi secventa "\%" sau "\_"; ca
n PHP.
Ca si PHP, sub-limbajul DML din SQL va permite sa formati expresii logice care combina
expresiile relationale.
Exemple:
Listeaza toi angajaii pentru care al doilea caracter din nume este 'o'.
SELECT nume, functie, data_ang
FROM angajati
WHERE nume LIKE '_o%';
Exemple de tipare:
14
6. Operatorul IS NULL
Pentru a verifica valorile de tip NULL exist condiia IS NULL sau negarea acesteia IS NOT
NULL.
x IS NULL adevarat daca valoarea lui x este NULL
x IS NOT NULL - adevarat daca valoarea lui x nu este NULL
7. Valoarea NULL
Valoare nul este o valoare care este sau incorect, sau necunoscut, sau inaplicabil de
aceea nu poate fi testat cu "=".
valoare nul nu este la fel cu "zero" care este un numr.
Dac valoarea NULL este utilizat ntr-o comparaie, atunci operatorul de comparaie
trebuie s fie IS NULL sau IS NOT NULL altfel rezultatul este ntotdeauna FALSE.
Exemplu:
Listeaz toi angajaii care nu au comision.
SELECT *
FROM angajati
WHERE comision IS NULL
Toti operatorii sus mentionati functioneaza si precedati de NOT:
o NOT BETWEEN nu se afla intre 2 valori date
o NOT IN nu se afla intr-o lista
o NOT LIKE diferit de sirul
o IS NOT NULL nu este o valoare nula
!!Observatie importanta
Valorile string SQL (sirurile) trebuie sa fie incluse ntre ghilimele simple, nu ntre ghilimelele
duble permise de PHP.
8. Operatori aritmetici
Exemplu:
Daca adaosul comercial este de 10% din pretul de vanzare sa se afiseze pretul total al
DVD-urilor (se include adaosul comercial)
SELECT (pret_DVD*.10)+pret_DVD AS pret_total, titlu
FROM filme
15
14.
Functii SQL
SQL include functii care permit sa se raporteze valori diferite valori utile, precum un
numar al rndurilor tabelului.
Funciile sunt o caracteristicimportant a SQL si sunt utilizate pentru:
o a realiza calcule asupra datelor
o a modifica date
o a manipula grupuri de nregistrri
o a schimba formatul datelor
o sau pentru a converti diferite tipuri de date
1. Clasificarea functiilor
Funciile se clasific n dou tipuri:
1. Funcii referitoare la o singur nregistrare- returneaz un singur rezultat pentru fiecare
rnd al tabelului, pe cnd
2. Funcii referitoare la mai multe nregistrri: sunt funcii totalizatoare sau funcii de grup
Diferena dintre cele dou tipuri de funcii este numrul de nregistrri pe care
Acioneaz.
1. Funcii referitoare la o singur nregistrare
Aceste funcii au ca argumente date de tip caracter i returneaz date de tip VARCHAR2,
CHAR sau NUMBER.
Cele mai importante funcii caracter sunt:
LOWER(column|expression) - converteste alfa caracterele din caractere mari in
caractere mici
UPPER(column|expression) - converteste alfa caracterele din caractere mici in caractere
mari
CONCAT(column1|expression1, column2|expression2) - functia este echivalentul
operatorului de concantenare (||)
SUBSTR(column|expression, m [, n]) - returneaza un sir de n caractere incepand cu
caracterul aflat pe pozitia m
16
Acestea returneaz un singur rezultat pentru fiecare grup de nregistrri din tabel.
Funciile de grup sunt funcii care opereaz pe un set de rnduri pentru a da un rezultat
pe ntreg setul.
Funciile de grup sunt urmatoarele:
o MAX([DISTINCT|ALL]expr) Valoarea maxima a expr, ignorand valorile nule
o MAX(coloana) - Valoarea maxima din coloana specificata
o MIN([DISTINCT|ALL]expr) Valoarea minima a expr, ignorand valorile nule
o MIN(coloana) - Valoarea minima din coloana specificata
o SUM([DISTINCT|ALL]x) Suma valorilor pentru grup, ignorand valorile nule
o COUNT(coloana) - Numarul rndurilor din tabel care contin o valoare diferita
de NULL n coloana specificata
o COUNT(*) - ntoarce numrul de rnduri dintr-un tabel care satisfac criteriul
de selecie, incluznd rndurile duplicat i rndurile coninnd valori nule.
Dac clauza WHERE este introdus, atunci COUNT(*) returneaz numrul de
rnduri care satisfac condiia din clauza WHERE.
o AVG(coloana) - Valoarea mijlocie (medie) a coloanei numerice specificate
o SUM(coloana) - Suma valorilor din coloana specificata
FROM angajati;
Primul i ultimul nume de angajat n ordine alfabetic.
SELECT MIN(nume), MAX(nume)
FROM angajati;
Numrul angajailor din departamentul cu id-ul 30.
SELECT COUNT(*)
FROM angajati
WHERE nr_dept = 30;
Numrul angajailor care iau comision din departamentul 30.
SELECT COUNT(comision)
FROM angajati
WHERE nr_dept = 30;
15.
Anexe
Sau
ANGAJATI
id_angajat AUTOINCREMENT PRIMARY KEY,
nume VARCHAR(50),
prenume VARCHAR(50),
copii BOOLEAN CHECK copii IN (Y,N),
salariu INTEGER,
poza BLOB)
18
=====================================//=====================================
Filme
Filme
id_film INTEGER NOT NULL PRIMARY KEY
cod_gen VARCHAR(20) NOT NULL
cod_rating VARCHAR(5) NOT NULL
pret_DVD INTEGER
anul_producerii DATE
=====================================//=====================================
Studenti
Studenti
cnp CHAR(10) PRIMARY KEY
nume VARCHAR(50)
prenume VARCHAR(50)
matricola INTEGER (5)
grupa INTEGER (3) NOT NULL
an DATE
media NUMBER
poza BLOB
=====================================//=====================================
Biblioteca
Carti
id_carte AUTOINCREMENT PRIMARY KEY
titlu VARCHAR(50)
autor VARCHAR(50)
editura VARCHAR(50)
an_aparitie DATE
imprumutata BOOLEAN
Imprumut
autor VARCHAR(50)
id_carte INTEGER REFERENCE CARTI FOREIGN KEY
titlu VARCHAR(50)
nume_prenume VARCHAR(50)
nr_fisa INTEGER (10)
==========//=========
16.
Webografie
19