Sunteți pe pagina 1din 19

Prof.

Mirela Irimia 2015

Curs SQL
Contents
1.

Definire SQL ..................................................................................................................................... 2

2.

Arhitectura client-server a unui SGBD............................................................................................. 2

3.

Conventii de sintaxa SQL ................................................................................................................. 3

4.

Tipuri de date in MySQL .................................................................................................................. 4


1.

Tipuri de date pentru siruri de caractere .................................................................................... 4

2.

Tipuri de date numerice .............................................................................................................. 4

3.

Tipul de date data/timp............................................................................................................... 4

TIME ora stocata in formatul HH:MM:SS; ................................................................................ 4

DATE data in format an-luna-zi; ............................................................................................... 4

TIMESTAMP-combinatie intre data si ora. .................................................................................. 4

4.

Tipuri de date pentru obiecte mari date pentru obiecte mari .................................................... 4

5.

Valoarea NULL ............................................................................................................................. 4

5.

Categorii de instructiuni SQL ........................................................................................................... 5

6.

Limbajul de definire al datelor ........................................................................................................ 5


1.

Instructiuni le DDL ....................................................................................................................... 5


1.

Instructiunea CREATE DATABASE ............................................................................................ 5

2.

Instructiunea CREATE TABLE ................................................................................................... 5

3.

Restrictiile coloanelor .............................................................................................................. 5

4.

Stergerea sau modificarea unui tabel ..................................................................................... 6

5.

Instructiunea DROP ................................................................................................................. 6

7.

Limbajul de interogare a bazelor de date ....................................................................................... 6

8.

Limbajul de manipulare a datelor ................................................................................................... 7


1.

Comanda INSERT ......................................................................................................................... 7

2.

Comanda UPDATE ....................................................................................................................... 7

3.

Comanda DELETE ......................................................................................................................... 8

9.

Limbajul pentru controlul datelor ................................................................................................... 8

10.

Pseudonime pentru denumirea coloanelor ................................................................................ 8

11.

Sortarea rezultatelor folosind clauza ORDER BY ......................................................................... 9


1

Prof. Mirela Irimia 2015


12.

Filtrarea datelor cu ajutorul clauzei WHERE ............................................................................. 10

13.

Operatori in SQL ........................................................................................................................ 11

1.

Operatori relationali: ................................................................................................................. 11

2.

Operatori logici .......................................................................................................................... 11

3.

Operatorul BETWEEN ................................................................................................................ 12

4.

Operatorul IN............................................................................................................................. 13

5.

Operatorul LIKE ......................................................................................................................... 14

6.

Operatorul IS NULL .................................................................................................................... 15

7.

Valoarea NULL ........................................................................................................................... 15

8.

Operatori aritmetici ................................................................................................................... 15

14.

Functii SQL ................................................................................................................................. 16

1.

15.

1.

Funcii referitoare la o singur nregistrare .......................................................................... 16

2.

Functii referitoare la mai multe inregistrari (functii de grup) ............................................... 17


Anexe ......................................................................................................................................... 18

1.
16.

Clasificarea functiilor ................................................................................................................. 16

Anexa 1 - Baze de date utilizate in curs ..................................................................................... 18


Webografie ................................................................................................................................ 19

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

2. Arhitectura client-server a unui SGBD

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

Prof. Mirela Irimia 2015

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.

3. Conventii de sintaxa SQL

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

Prof. Mirela Irimia 2015

Elementele optionale sunt incadrate intre paranteze patrate;


Optiunile dintr-o lista de elemente posibile sunt separate de o linie verticala; etc.

4. Tipuri de date in MySQL


1. Tipuri de date pentru siruri de caractere
CHAR (m)- sir de caractere de lungime fixa: m - lungimea sirului de caractere fiind specificata
(m<256);

VARCHAR (m) un sir de caractere de lungime max 216 ;m: lungimea maxima

2. Tipuri de date numerice

NUMERIC (precizie ,scala);


DECIMAL (m,d); este un numar stocat ca si un sir de caractere; m-numarul de cifre iar
d este numarul de zecimale. Prestabilit m=10 iar d=0.
INTEGER (precizie); intreg pe 32 de biti; sau INT (precizie); - nu au cifre zecimale (cu
variantele SMALLINT si BIGINT; Daca se specifica atributul UNSIGNED domeniul de valori
este cuprins ntre 0 si 4294967295 (232), n caz contrar, domeniul este cuprins ntre
valorile -+2147483648 si -2147483648 (-231- : +231)
SMALLINT Nr intreg mic cu valori intre -215 - +215 nr intreg pe 16 biti;
BIGINT
FLOAT(m,d) nr in virgula mobila; m-latimea nr; d - nr. de zecimale;
DOUBLE(m,d) - --------//------------ dubla precizie;
BOOLEAN nr. intreg mic (tipul logic).

Exemple de declaratie a datelor (MySQL):


id_cont_client INTEGER(10);
salariu INTEGER(6);
ora_plecare TIME format HH:MM:SS;
data_angajarii DATE format AA:LL:ZZ

3. Tipul de date data/timp

TIME ora stocata in formatul HH:MM:SS;


DATE data in format an-luna-zi;
TIMESTAMP-combinatie intre data si ora.

4. Tipuri de date pentru obiecte mari date pentru obiecte mari


Un exemplu de obiect mare binar este o imagine, care poate avea tipul BLOB.

5. Valoarea NULL

Este o valoare speciala intr-o baza de date relationala si specifica faptul ca valoarea
respectiva nu este cunoscuta.

Prof. Mirela Irimia 2015

5. Categorii de instructiuni SQL


1.
2.
3.
4.

Limbajul de definire al datelor


Limbajul de interogare a bazelor de date
Limbajul de manipulare a datelor
Limbajul pentru controlul datelor

6. Limbajul de definire al datelor


LDD (data Definition Language) include instructiuni SQL care permit crearea, modificarea
sau distrugerea obiectelor bazei de date.

1. Instructiuni le DDL

CREATE creaza in baza de date un nou obiect.


o Ex: CREATE DATABASE, TABLE , INDEX , VIEW
ALTER modifica definitia unui obiect existent in baza de date.
o Ex: ALTER TABLE
DROP sterge un o biect existent in baza de date.
o Ex: DROP TABLE
1. Instructiunea CREATE DATABASE

CREATE DATABASE nume_baza_de_date[optiuni_specifice]


2. Instructiunea CREATE TABLE

CREATE TABLE nume_tabel (<definitie_coloana>,<definitie_coloana>,)


[<restrictie_tabel>]
Exemplu:
CREATE TABLE carte (carte_id CHAR(10), titlu VARCHAR(255), pret DECIMAL(5,2));
3. Restrictiile coloanelor

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;

indicator_client CHAR DEFAULT N NOT NULL.


NOT NULL - Fiecare rnd trebuie sa contina o valoare a coloanei asociate; valorile nule nu
sunt permise. Daca se omite specificarea acestei clauze se va considera prestabilita
clauza NULL (in MySQL). id_client INTEGER NOT NULL;
AUTO INCREMENT - MySQL va repartiza n mod automat un numar de serie ca valoare a
coloanei asociate.
PRIMARY KEY - Coloana asociata este cheia primara a tabelului care o contine. Impune a
in coloana unde s-a impus aceasta restrictie sa nu existe valori nule iar acestea trebuie sa
fie unice. id_angajat AUTOINCREMENT PRIMARY KEY
5

Prof. Mirela Irimia 2015

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);

Exemple de definire a coloanelor aferente instructiunii CREATE TABLE


CREATE TABLE carte (carte_id CHAR(10) PRIMARY KEY, titlu VARCHAR(255) NOT NULL,
pret DECIMAL(5,2) DEFAULT 50.00);
Exemplu
CREATE TABLE CLIENTI ( id_client INTEGER NOT NULL, cont INTEGER NOT NULL,
data_inregistrarii DATE NOT NULL, adresa VARCHAR, PRIMARY KEY (id_client ));
4. Stergerea sau modificarea unui tabel
1. ALTER TABLE

Un tabel poate fi modificat folosind instructiunea ALTER TABLE.


De exemplu adaugarea unei coloane la un tabel, definitia coloanei facandu-se in acelasi
mod ca la CREATE TABLE.
Exemplu
Adaugarea a doua coloane la tabelul angajati:
ALTER TABLE angajati (data_nasterii DATE NULL, adresa VARCHAR(50));

ALTER TABLE tabel DROP coloana;


Unde "tabel" este numele tabelului care va fi modificat, iar "coloana" este numele coloanei
care va fi stearsa.
5. Instructiunea DROP

DROP TABLE CLIENTI; etc. Sterge un tabel sau alt obiect al bazei de date.

7. Limbajul de interogare a bazelor 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

Prof. Mirela Irimia 2015

Exemplu:
SELECT cod_film, rating_film, titlu_film FROM FILME;
Se pot specifica mai multe coloane, separate prin virgula.

8. Limbajul de manipulare a datelor

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:

Inserarea in tabelul filme a unei inregistrari:


INSERT INTO filme (id_film, cod_gen, cod_rating, titlu, pret_DVD, anul_producerii)
VALUES (21, comedie, PG_13, orice, 40, 1990);

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

Prof. Mirela Irimia 2015

Modificarea pretului asociat titlului cartii la Medeleni:


UPDATE carte SET pret= 10 WHERE titlu= La Medeleni ;

Modificarea pretului unui film (id_film=21):


UPDATE filme SET pret_DVD=50 WHERE id_film=21;

Proprietarul magazinului a decis cresterea cu 8% a salariilor:


UPDATE angajati SET salariu=ROUND(salariu+salariu*.8); sau
UPDATE angajati SET salariu=ROUND(salariu*1.08);

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;

9. Limbajul pentru controlul datelor

DCL Data Control Language include instructiuni SQL care permit administratorilor sa
controleze accesul si folosirea privilegiilor DBMS.
o GRANT
o ALTER

10.

Pseudonime pentru denumirea coloanelor

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

Prof. Mirela Irimia 2015

------------------Drama R
Act R
Com PG
Act PG

11.

Sortarea rezultatelor folosind clauza ORDER BY

In SQL sortarea este facuta prin adaugarea la clauza SELECT a clauzei ORDER BY cu o lista
de una sau mai multe coloane.

ORDER BY - Specific ordinea n care sunt afisate rndurile


ASC - Ordoneaz rndurile cresctor
DESC - Ordoneaz rndurile descresctor
Cu ajutorul clauzei ORDER BY rndurile vor fi afiate n ordinea solicitat (cu toate
acestea nu se va modifica ordinea intern a rndurilor din baza de date).
Sintaxa:
SELECT coloana
FROM tabela
ORDER BY {coloana, expresie} [ASC/DESC];
Clauza ORDER BY trebuie s fie ultima clauz din cerere.
Exemplu:
Listai toi angajaii ordonndu-i dup data de angajare (n ordine cresctoare).
SELECT *
FROM angajati
ORDER BY data_ang
Exemplu:
Listai toi angajaii ordonndu-i dup data de angajare (n ordine descresctoare).
SELECT *
FROM angajati
ORDER BY data_ang DESC
Exemplu:
Pentru a ordona toate cartile n functie de pret, de la cel mai mare la cel mai mic:
SELECT pret, titlu FROM carte ORDER BY titlu DESC; (ASC este implicit si nu mai este
nevoie sa se includa).

Se pot folosi pseudonime inpreuna cu aceasta clauza.

Exemplu:
SELECT codul_rating AS rating, gen_film AS gen, titlu_film AS titlu FROM FILME
ORDER BY codul_rating;
Exemplu:
9

Prof. Mirela Irimia 2015

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.

Filtrarea datelor cu ajutorul clauzei WHERE

SQL foloseste clauza WHERE pentru a filtra randurile ce urmeaza a fi afisate.

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

SELECT titlu, pret FROM carte WHERE carteid=1;


Pentru a include numai titlurile cartilor care au un pret mai mare de 50:
SELECT pret, titlu FROM carte WHERE pret>50 ORDER BY pret DESC;
Afisarea comediilor aflate in baza de date a unui magazin de DVD-uri:
SELECT cod_rata AS rating, titlu
FROM filme
WHERE gen_film=comedie
ORDER BY titlu;
Rezultat:
Rating titlu
PG13 Big Fish
PG13 Nea Marin miliardar
R Orice
------- --------Sirurile de caractere i datele calendaristice trebuiesc introduse intre ghilimele.
Exemplu:
Listati toti angajatii ordonandu-i dupa salariul anual: sal*12 sal anual (in ordine
crescatoare).
10

Prof. Mirela Irimia 2015

SELECT nume, functie, salariu*12 AS salariuanual


FROM angajati
ORDER BY salariu
Exemplu
Listeaz toi angajaii care sunt pe poziia de 'contabil'.
SELECT *
FROM angajati
WHERE functie='contabil';
Exemplu
Listeaz toi angajaii care au data de angajare 17-DEC-1980.
SELECT *
FROM angajati
WHERE data_ang='17-DEC-1980'
Exemplu
Listeaza toti angajatii care sunt in departamentul 10.
SELECT nume, functie, salariu
FROM angajati
WHERE nr_dept=10
Alaturi de clauza WHERE fiind o expresie logica vom enumera operatorii aplicabili in cadrul
acesteia.

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

Prof. Mirela Irimia 2015

FROM filme
WHERE pret_DVD<40 AND cod_gen=comedie
ORDER BY pret_DVD;

Alte conditii pe care le putem crea folosind operatori logici:


AN=2 AND PUNCTAJ>500 OR CODS=11
AN=2 AND (PUNCTAJ>500 OR CODS=11)
Exemplu:
SELECT *
FROM angajati
WHERE functie = 'DIRECTOR'
OR functie = 'CONTABIL'
AND salariu < 1500
Dar ordinea se poate modifica dac se folosesc paranteze.
SELECT *
FROM angajati
WHERE (functie = 'DIRECTOR'
OR functie = 'CONTABIL')
AND salariu < 1500

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

Prof. Mirela Irimia 2015

Listeaz toi angajaii care au salariul ntre


1000 i 2000.
SELECT *
FROM angajati
WHERE salariu BETWEEN 1000 AND 2000

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

Prof. Mirela Irimia 2015

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:

Listeaz toi angajaii al cror nume ncepe cu litera S.


SELECT *
FROM angajati
WHERE nume LIKE 'S%'

Listeaz toi angajaii care au numele de 4 caractere.


SELECT nume
FROM angajati
WHERE nume LIKE '____'

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

Prof. Mirela Irimia 2015

%cum se potriveste cu orice sir de caractere care se termina in cum;


cum% - se potriveste cu orice sir de caractere care se incepe cu cum;
%cum% c_m orice sir de caractere de 3 caractere

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

Prof. Mirela Irimia 2015

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

Sunt funcii utilizate pentru manipularea datelor individuale.


Ele pot avea unul sau mai multe argumente i returneaz o valoare pentru fiecare rnd
rezultat n urma interogrii.

Funciile referitoare la o singur nregistrarepot fi:


1. funcii caracter
2. funcii numerice
3. funcii pentru data calendaristic si or
4. funcii de conversie
5. funcii diverse
1. Funcii de tip caracter

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

Prof. Mirela Irimia 2015

LENGHT(column|expression) returneaza numarul de caractere dintr-o expresie


INSTR(column|expression, 'string', [m], [n]) - returneaza pozitia unui anumit sir,
optional se poate incepe cautarea cu pozitia m sau cu a n-a aparitie a sirului. m si n sunt
prin definitie 1
REPLACE(text, search_string, replacement_string) - cauta un anumit text intr-un sir de
caractere si daca il gaseste il inlocuieste
Exemplu de utilizare a funciei LENGTH:
SELECT LENGTH(nume)
FROM angajati;
2. Functii referitoare la mai multe inregistrari (functii de grup)

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

Datele de iesire vor fi afisate pe o singura linie.


Exemple deaplicatii cu functii:
De exemplu, interogarea urmatoare raporteaza numarul cartilor si pretul mediu al
acestora:
SELECT count(*), avg(pret) FROM carte;
Interogarea precedenta poate fi rescrisa pentru a include o clauza "AS", astfel:
SELECT count(*) AS Carte_Numar, avg(pret) AS Pret_Mediu FROM carte;
Afiarea salariului mediu, maxim, minim i suma tuturor salariilor angajailor cu funcie
VANZATOR.
SELECT AVG(salariu), MAX(salariu), MIN(salariu),
SUM(salariu)
FROM angajati
WHERE functie='VANZATOR';
Datele la care s-au fcut prima i ultima angajare.
SELECT MIN(data_ang), MAX(data_ang)
17

Prof. Mirela Irimia 2015

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

1. Anexa 1 - Baze de date utilizate in curs


Angajati si Departamente
DEPARTAMENTE
Id_dept NUMBER(3) CHEIE PRIMARA (PK)
Den_dept VARCHAR2(20)
Id_manager VARCHAR2(3)
Locatie VARCHAR2(100)
ANGAJATI
id_angajat NUMBER(3) CHEIE PRIMARA (PK)
id_dept NUMBER(3)
REFERINTA (FK) LA TABELA DEPARTAMENTE
nume VARCHAR2(40)
prenume VARCHAR2(40)
functie VARCHAR2(25)
salariu NUMBER(7)
id_manager VARCHAR2(3)
data_ang DATE
comision NUMBER(5)

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

Prof. Mirela Irimia 2015

=====================================//=====================================
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

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