Sunteți pe pagina 1din 204

Curs pentru specializrile

Informatic anul II
Matematic-Informatic anul III
Semestrul I
Horea Oros, horea.oros@gmail.com

BAZE DE DATE

Limbajul SQL
SQL este un limbaj standard pentru

accesarea bazelor de date


MySQL, SQL Server, Access, Oracle, Sybase,
DB2

Sintaxa SQL
SELECT CompanyName, Country FROM Customers
WHERE Country <> 'USA
Company

Country

Island Trading

UK

Galera del gastrnomo

Spain

Laughing Bacchus Wine Cellars

Canada

Paris spcialits

France

Simons bistro

Denmark

Wolski Zajazd

Poland

SQL
SQL este un limbaj standard pentru

accesarea i manipularea bazelor de date


SQL Structured Query Language
SQL este un standard ANSI (American
National Standards Institute)

Ce poate face SQL

SQL poate executa interogri la baza de date


SQL poate extrage date din baza de date
SQL poate insera nregistrri n baza de date
SQL poate actualiza nregistrri n baza de date
SQL poate terge nregistrri n baza de date
SQL poate crea noi baze de date
SQL poate crea noi tabele n baza de date
SQL poate crea proceduri stocate, funcii, triggere
SQL poate crea vizualizri n baza de date
SQL poate stabili permisiuni asupra entitilor din
baza de date

SQL este un standard DAR


Cu toate c SQL este standard ANSI, exist

mai multe versiuni ale limbajului SQL


Totui, cel puin comenzile principale
(SELECT, UPDATE, INSERT, DELETE) sunt
permise ntr-un mod aproape unitar de toate
implementrile, pentru compatibilitate

RDBMS
Avem nevoie de un sistem de gestiune a

bazelor de date.
Microsoft SQL Server
MySQL
Oracle
IBM DB2
Microsoft Access

Tabele n bazele de date


O baz de date conine cel puin o tabel

identificat prin nume.


Tabelele conin nregistrri cu date
P_Id

LastName

FirstName

Address

Hansen

Ola

Timoteivn 10 Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Trei nregistrri, 5 cmpuri (coloane)

City

Instruciuni SQL
Majoritatea operaiilor efectuate asupra

bazelor de date se fac cu comenzi/instruciuni


SQL
SELECT * FROM Persons

SQL nu ine cont de diferena dintre litere

mari i mici
Unele SGBD-uri necesit caracterul ; dup
instruciuni. Astfel se separ instruciunile
SQL pentru ca s se poat executa mai multe
instruciuni una dup alta ntr-un singur batch

SQL DML i DDL (DCL, TCL)


DML - Data Manipulation Language

comenzile pentru extragere i actualizare

SELECT - extrage date din baza de date


UPDATE - actualizeaz date n baza de date
DELETE - terge nregistrri din baza de date
INSERT INTO - insereaz date noi n baza de date

DDL - Data Definition Language comenzi

pentru creare/modificare baz de date,


tabele, indeci, stabilire legturi ntre tabele,
constrngeri

SQL DML i DDL (DCL, TCL)


cont.
CREATE DATABASE
ALTER DATABASE
CREATE TABLE

ALTER TABLE
DROP TABLE

CREATE INDEX
DROP INDEX

Instruciunea SELECT
Instruciunea SELECT se folosete pentru a

extrage date din baza de date


Rezultatul este stocat ntr-un tabel-rezultat
numit result-set
Sintaxa
SELECT column_name(s) FROM table_name

SAU
SELECT * FROM table_name

Exemplu SELECT
SELECT * FROM Persons
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT LastName,FirstName FROM Persons


LastName

FirstName

Hansen

Ola

Svendson

Tove

Pettersen

Kari

Instruciunea SELECT
DISTINCT
ntr-o tabel, unele coloane pot conine valori

duplicate. Asta nu e o problem, totui,


uneori vrem s listm doar valorile diferite
(distincte) din tabel.
Cuvntul cheie DISTINCT poate fi folosit
pentru aceasta.
Sintaxa
SELECT DISTINCT column_name(s)

FROM table_name

Exemplu SELECT DISTINCT


Vrem s selectm valorile distincte din

coloana City
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT DISTINCT City FROM Persons


City
Sandnes
Stavanger

Clauza WHERE
Folosit pentru a filtra nregistrri
Folosit pentru a extrage doar nregistrrile

care ndeplinesc un anumit criteriu


Sintaxa
SELECT column_name(s)

FROM table_name
WHERE column_name operator value

Exemplu clauza WHERE


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT * FROM Persons

WHERE City='Sandnes'
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Ghilimele - apostroafe
SQL folosete apostrof pentru a delimita valorile de tip

text/string
Majoritatea SGBD-urilor accept i ghilimele
Valorile numerice nu se delimiteaz cu
apostroafe/ghilimele
Corect:

SELECT * FROM Persons WHERE FirstName='Tove


SELECT * FROM Persons WHERE Year=1965
Greit:
SELECT * FROM Persons WHERE FirstName=Tove
SELECT * FROM Persons WHERE Year='1965'

Operatori pentru clauza


WHERE
Operator

Descriere

Egalitate

<>

Inegalitate

>

Mai mare

<

Mai mic

>=

Mai mare sau egal

<=

Mai mic sau egal

BETWEEN

ntr-un interval nchis

LIKE

La fel ca un ablon

IN

O mulime enumerat explicit

Operatorii AND i OR
Se folosesc pentru a filtra nregistrrile dup

mai multe condiii


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT * FROM Persons WHERE

FirstName='Tove AND LastName='Svendson


P_Id

LastName

FirstName

Address

City

Svendson

Tove

Borgvn 23

Sandnes

Operatorii AND i OR (cont.)


SELECT * FROM Persons WHERE

FirstName='Tove OR FirstName='Ola
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

SELECT * FROM Persons WHERE

LastName='Svendson'
AND (FirstName='Tove' OR FirstName='Ola')
P_Id

LastName

FirstName

Address

City

Svendson

Tove

Borgvn 23

Sandnes

Clauza ORDER BY - sortare


Cuvntul cheie ORDER BY se folosete pentru

a sorta rezultatul dup o anumit coloan sau


coloane
Ordonarea/sortarea se face n mod implicit
cresctor
Ordonarea descresctoare DESC
Sintaxa:
SELECT column_name(s)

FROM table_name
ORDER BY column_name(s) ASC | DESC

Clauza ORDER BY - exemplu


P_Id

LastName FirstName Address

City

Hansen

Ola

Sandnes

Svendson

Tove

Timoteivn
10
Borgvn 23

Pettersen

Kari

Storgt 20

Stavanger

Nilsen

Tom

Vingvn 23

Stavanger

Sandnes

SELECT * FROM Persons

ORDER BY LastName
P_Id

LastName FirstName Address

City

Hansen

Ola

Sandnes

Nilsen

Tom

Timoteivn
10
Vingvn 23

Pettersen

Kari

Storgt 20

Stavanger

Svendson

Tove

Borgvn 23

Sandnes

Stavanger

Instruciunea INSERT INTO


O folosim pentru a insera noi nregistrri ntr-

o tabel
Sintaxa (dou variante)
INSERT INTO table_name

VALUES (value1, value2, value3,...)


INSERT INTO table_name (column1, column2,
column3,...)
VALUES (value1, value2, value3,...)

Exemplu INSERT INTO


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

INSERT INTO Persons

VALUES (4,'Nilsen', 'Johan', 'Bakken 2',


'Stavanger')
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Nilsen

Johan

Bakken 2

Stavanger

Exemplu INSERT INTO


Inserare de date doar n anumite coloane
INSERT INTO Persons (P_Id, LastName,

FirstName) VALUES (5, 'Tjessem', 'Jakob')


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Nilsen

Johan

Bakken 2

Stavanger

Tjessem

Jakob

Instruciunea UPDATE
Se folosete pentru actualizarea unor date

dintr-o tabel
Sintaxa:
UPDATE table_name

SET column1=value, column2=value2,...


WHERE some_column=some_value

!!! Omiterea clauzei WHERE duce la

actualizarea tuturor nregistrrilor din tabel

Instruciunea UPDATE exemplu


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Nilsen

Johan

Bakken 2

Stavanger

Tjessem

Jakob

UPDATE Persons

SET Address='Nissestien 67', City='Sandnes'


WHERE LastName='Tjessem' AND
FirstName='Jakob'

Instruciunea UPDATE
exemplu - rezultatul
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Nilsen

Johan

Bakken 2

Stavanger

Tjessem

Jakob

Nissestien 67

Sandnes

UPDATE Persons

SET Address='Nissestien 67', City='Sandnes'


WHERE LastName='Tjessem' AND
FirstName='Jakob'

Instruciunea UPDATE !!!


UPDATE Persons

SET Address='Nissestien 67', City='Sandnes'


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Nissestien 67

Sandnes

Svendson

Tove

Nissestien 67

Sandnes

Pettersen

Kari

Nissestien 67

Sandnes

Nilsen

Johan

Nissestien 67

Sandnes

Tjessem

Jakob

Nissestien 67

Sandnes

Instruciunea DELETE
O folosim pentru a terge nregistrri dintr-o

tabel
Sintaxa:
DELETE FROM table_name

WHERE some_column=some_value

!!! Omiterea clauzei WHERE duce la tergerea

tuturor nregistrrilor din tabel

Instruciunea DELETE exemplu


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Nilsen

Johan

Bakken 2

Stavanger

Tjessem

Jakob

Nissestien 67

Sandnes

DELETE FROM Persons

WHERE LastName='Tjessem' AND


FirstName='Jakob'

Instruciunea DELETE
exemplu - rezultatul
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Nilsen

Johan

Bakken 2

Stavanger

DELETE FROM Persons

WHERE LastName='Tjessem' AND


FirstName='Jakob'

tergerea tuturor
nregistrrilor
DELETE FROM table_name
SAU

DELETE * FROM table_name

Nu exist UNDO pentru operaia de tergere

Baze de date
Northwind
Adventure Works
World

Limbaje de modelare
SQL Server Management Studio

Diagrame pentru baze de date


IDEF1X

Baze de date
Customers - Northwind
CompanyName

ContactName

Address

City

Alfreds Futterkiste

Maria Anders

Obere Str. 57

Berlin

Berglunds snabbkp Christina


Berglund
Centro comercial
Francisco Chang
Moctezuma
Ernst Handel
Roland Mendel

Berguvsvgen 8 Lule
Sierras de
Granada 9993
Kirchgasse 6

Mxico
D.F.
Graz

FISSA Fabrica Inter.


Salchichas S.A.
Galera del
gastrnomo

C/ Moralzarzal,
86
Rambla de
Catalua, 23

Madrid

Diego Roel
Eduardo
Saavedra

Barcelona

Baze de date - interogri


SELECT * FROM customers
SELECT CompanyName, ContactName FROM

customers
SELECT * FROM customers WHERE
companyname LIKE 'a%
SELECT CompanyName, ContactName
FROM customers
WHERE CompanyName > 'a
SELECT CompanyName, ContactName
FROM customers
WHERE CompanyName > 'g'
AND ContactName > 'g'

Clauza TOP
Folosit pentru a specifica numrul de

nregistrri ce se vor returna


Util cnd tabel are foarte multe nregistrri
Returnarea unui numr mare de nregistrri
poate afecta performana
Nu este suportat de toate SGBD-urile
Sintaxa MSSQL
SELECT TOP number | percent column_name(s)

FROM table_name

Clauza TOP - echivalent


MySQL
SELECT column_name(s)

FROM table_name
LIMIT number
SELECT * FROM Persons LIMIT 5

Oracle
SELECT column_name(s)

FROM table_name
WHERE ROWNUM <= number
SELECT * FROM Persons WHERE ROWNUM <=5

Clauza TOP - Exemplu


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Nilsen

Tom

Vingvn 23

Stavanger

SELECT TOP 2 * FROM Persons


SELECT TOP 50 PERCENT * FROM Persons
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Operatorul LIKE
Folosit n clauza WHERE pentru a specifica un

ablon de cutare ntr-o coloan


Sintaxa:
SELECT column_name(s)

FROM table_name
WHERE column_name LIKE pattern

Operatorul LIKE - exemple


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT * FROM Persons

WHERE City LIKE 's%


nregistrrile n care City ncepe cu litera s

SELECT * FROM Persons

WHERE City LIKE '%s


nregistrrile n care City se termin cu litera s

SELECT * FROM Persons

WHERE City NOT LIKE '%tav%'

Operatorul LIKE caractere


pentru ablon
Putem folosi urmtoarele caractere pentru

ablon
Caracter

Descriere

nlocuiete zero sau mai multe caractere

nlocuiete un singur caracter

[charlist]

Orice caracter din list

[^charlist] sau
[!charlist]

Orice caracter care nu este n list

Operatorul LIKE Exemple


SELECT * FROM Persons WHERE City LIKE 'sa%
SELECT * FROM Persons

WHERE City LIKE '%nes%


SELECT * FROM Persons
WHERE FirstName LIKE '_la
SELECT * FROM Persons
WHERE LastName LIKE 'S_end_on
SELECT * FROM Persons
WHERE LastName LIKE '[bsp]%
SELECT * FROM Persons
WHERE LastName LIKE '[!bsp]%'

Operatorul IN
Folosit pentru a specifica o list de valori n

clauza WHERE
Sintaxa:
SELECT column_name(s)

FROM table_name
WHERE column_name IN (value1,value2,...)

Operatorul IN - exemplu
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT * FROM Persons

WHERE LastName IN ('Hansen','Pettersen')


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Operatorul BETWEEN
Folosit n clauza WHERE pentru a stabili un

interval de valori dup care se va face filtrarea


datelor
Capetele intervalului pot fi numere, text sau
date calendaristice
Sintaxa:
SELECT column_name(s)

FROM table_name
WHERE column_name
BETWEEN value1 AND value2

Operatorul BETWEEN - exemplu


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10 Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT * FROM Persons

WHERE LastName
BETWEEN 'Hansen' AND 'Pettersen'
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10 Sandnes

Operatorul BETWEEN - !!!


Tratat diferit de diverse SGBD-uri
(value1, value2)
[value1, value2]
[value1, value2)

Trebuie verificat comportamentul pentru

SGBD-ul pe care l folosii


SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Hansen' AND 'Pettersen'

Alias
Se poate da un nume alias unei tabele sau

unei coloane
Util cnd o tabel sau un cmp are un nume
lung sau complex
Util cnd vrem s dm un nume unei coloane
cu valoare calculat
Interogrile devin mai simplu de scris i de
citit

Alias
Sintaxa pentru tabele
SELECT column_name(s)

FROM table_name
AS alias_name

Sintaxa pentru coloane


SELECT column_name AS alias_name

FROM table_name

Alias - exemple
Cu alias
SELECT po.OrderID, p.LastName, p.FirstName

FROM Persons AS p,
Product_Orders AS po
WHERE p.LastName='Hansen' AND p.FirstName='Ola

Fr alias
SELECT Product_Orders.OrderID, Persons.LastName,

Persons.FirstName
FROM Persons,
Product_Orders
WHERE Persons.LastName='Hansen' AND
Persons.FirstName='Ola'

Join
Se folosesc pentru a extrage date ntr-un

result-set din dou sau mai multe tabele, pe


baza unei relaii ntre anumite coloane din
aceste tabele
Cheia primar = o coloan (sau o combinaie
de coloane) cu valori unice n fiecare
nregistrare. Scopul este de a lega datele din
mai multe tabele, fr a repeta datele din
fiecare tabel

Join
Tabela Persons
P_Id

LastName

FirstName

Address

Hansen

Ola

Timoteivn 10 Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Tabela Orders

City

O_Id

OrderNo

P_Id

77895

44678

22456

24562

34764

15

Join mai multe tipuri


JOIN/INNER JOIN: Extrage linii cnd este cel

puin o potrivire n ambele tabele


LEFT JOIN: Extrage toate liniile din tabela din
stnga, chiar dac nu au potriviri n tabela din
dreapta
RIGHT JOIN: Extrage toate liniile din tabela
din dreapta, chiar dac nu au potriviri n
tabela din stnga
FULL JOIN: Combinaie ntre LEFT i RIGHT

INNER JOIN
Extrage linii cnd este cel puin o potrivire n

ambele tabele
Sintaxa:
SELECT column_name(s)

FROM table_name1 INNER JOIN table_name2


ON table_name1.column_name =
table_name2.column_name

Dac sunt linii n prima tabel care nu au

corespondent n a doua atunci ele nu sunt


extrase

INNER JOIN - exemplu


Vrem s extragem persoanele care au

comenzi
SELECT Persons.LastName, Persons.FirstName,

Orders.OrderNo FROM Persons


INNER JOIN Orders ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
LastName

FirstName

OrderNo

Hansen

Ola

22456

Hansen

Ola

24562

Pettersen

Kari

77895

Pettersen

Kari

44678

LEFT JOIN
Extrage toate nregistrrile din table din

stnga, chiar i atunci cnd nu sunt potriviri n


tabela din dreapta
Sintaxa:
SELECT column_name(s)

FROM table_name1 LEFT JOIN table_name2


ON table_name1.column_name =
table_name2.column_name

n unele SGBD-uri se numete LEFT OUTER

JOIN

LEFT JOIN - exemplu


Vrem s extragem toate persoanele

indiferent dac au comenzi sau nu


SELECT p.LastName, p.FirstName, po.OrderNo

FROM Persons AS p LEFT JOIN Orders AS po


ON p.P_Id=po.P_Id
ORDER BY p.LastName
LastName

FirstName

OrderNo

Hansen

Ola

22456

Hansen

Ola

24562

Pettersen

Kari

77895

Pettersen

Kari

44678

Svendson

Tove

RIGHT JOIN
Extrage toate nregistrrile din table din

dreapta, chiar i cele pentru care nu sunt


potriviri n tabela din stnga
Sintaxa:
SELECT column_name(s) FROM table_name1

RIGHT JOIN table_name2


ON table_name1.column_name =
table_name2.column_name

n unele SGBD-uri se numete RIGHT OUTER

JOIN

RIGHT JOIN - exemplu


Tabela Persons
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Tabela Orders
O_Id OrderNo

P_Id

77895

44678

22456

24562

34764

15

RIGHT JOIN - exemplu


Extragem toate comenzile cu persoanele

corespunztoare
SELECT Persons.LastName, Persons.FirstName,

Orders.OrderNo FROM Persons


RIGHT JOIN Orders ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
LastName

FirstName

OrderNo

Hansen

Ola

22456

Hansen

Ola

24562

Pettersen

Kari

77895

Pettersen

Kari

44678
34764

FULL JOIN
Extrage nregistrrile pentru care este o

potrivire ntr-una din cele dou tabele


Sintaxa:
SELECT column_name(s) FROM table_name1

FULL JOIN table_name2


ON table_name1.column_name =
table_name2.column_name

Extrage toate nregistrrile din tabela din

stnga i toate nregistrrile din tabela din


dreapta

FULL JOIN - exemplu


Toate persoanele cu comenzile lor i toate

comenzile cu persoanele corespunztoare


SELECT Persons.LastName, Persons.FirstName,

Orders.OrderNo FROM Persons FULL JOIN Orders


ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
LastName

FirstName

OrderNo

Hansen

Ola

22456

Hansen

Ola

24562

Pettersen

Kari

77895

Pettersen

Kari

44678

Svendson

Tove
34764

Operatorul UNION
Folosit pentru a combina dou sau mai multe

instruciuni SELECT
Fiecare instruciune SELECT trebuie s aib
acelai numr de coloane
Coloanele corespunztoare trebuie s aib i
aceleai tipuri
Coloanele trebuie s fie i n aceeai ordine

Operatorul UNION - sintaxa


Doar valorile distincte
SELECT column_name(s) FROM table_name1

UNION
SELECT column_name(s) FROM table_name2

Permite valori duplicate


SELECT column_name(s) FROM table_name1

UNION ALL
SELECT column_name(s) FROM table_name2

Numele coloanelor din result-set vor fi

numele coloanelor din primul SELECT

Operatorul UNION - exemplu


Employees_Norway
E_ID

E_Name

01

Hansen, Ola

02

Svendson, Tove

03

Svendson, Stephen

04

Pettersen, Kari

Employees_USA
E_ID

E_Name

01

Turner, Sally

02

Kent, Clark

03

Svendson, Stephen

04

Scott, Stephen

Operatorul UNION - exemplu


SELECT E_Name FROM Employees_Norway

UNION
SELECT E_Name FROM Employees_USA
E_Name
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
Kent, Clark
Scott, Stephen

SELECT INTO
Folosit pentru a crea copii backup ale

tabelelor
Sintaxa:
SELECT *

INTO new_table_name [IN externaldatabase]


FROM old_tablename
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename

SELECT INTO - exemplu


SELECT * INTO Persons_Backup FROM Persons

Putem folosi clauza IN pentru a copia tabela

ntr-o alt baz de date


SELECT * INTO Persons_Backup IN 'Backup.mdb'

FROM Persons

Se poate crea un backup doar pentru o parte

din date
SELECT LastName,Firstname

INTO Persons_Backup
FROM Persons WHERE City='Sandnes'

SELECT INTO exemplu 2


Putem extrage date din dou tabele legate
SELECT Persons.LastName,Orders.OrderNo

INTO Persons_Order_Backup
FROM Persons INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id

CREATE DATABASE
Folosit pentru a crea o nou baz de date
Sintaxa:
CREATE DATABASE database_name

Exemplu:
CREATE DATABASE my_db

Tabele se vor crea cu CREATE TABLE

CREATE TABLE
Folosit pentru a crea tabele
Sintaxa:
CREATE TABLE table_name

(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)

Tipul de date stabilete tipul valorilor pentru

coloana respectiv (tipuri de date MSMSQL)

Tipuri de date MSSQL


iruri de caractere
Tip de date
char(n)

Descriere

ir de caractere de dimensiune fix.


Maxim 8000 de caractere
varchar(n)
ir de caractere de lungime variabil.
Maxim 8000 de caractere
varchar(max) ir de caractere de lungime variabil.
Maxim1,073,741,824 de caractere
text
ir de caractere de lungime variabil.
Maxim 2GB de date de tip text

Stocare
n

Tipuri de date MSSQL


iruri de caractere Unicode
Tip de date
nchar(n)

Descriere

Date Unicode de lungime fix. Maxim


4000 caractere
nvarchar(n)
Date Unicode de lungime variabil.
Maxim 4000 caractere
nvarchar (max) Date Unicode de lungime variabil.
Maxim 536,870,912 caractere
ntext
Date Unicode de lungime variabil.
Maxim 2GB de date text

Stocare

Tipuri de date MSSQL


Tipuri binare
Tip de date

Descriere

bit

Permite 0, 1, sau NULL

binary(n)

Date binare de lungime


8000 octei
varbinary(n)
Date binare de lungime
Maxim 8000 octei
varbinary(max) Date binare de lungime
Maxim 2GB
image
Date binare de lungime
Maxim 2GB

Stocare
fix. Maxim
variabil.
variabil.
variabil.

Tipuri de date MSSQL


Tipuri numerice
Tip de date

Descriere

tinyint

Permite numere ntregi de la 0 la 255 1 octet

smallint

Permite numere ntregi de la -32,768


la 32,767
Permite numere ntregi de la 2,147,483,648 la2,147,483,647
Permite numere ntregi de la 9,223,372,036,854,775,808 la
9,223,372,036,854,775,807

int
bigint

Stocare
2 octei
4 octei
8 octei

Tipuri de date MSSQL


Tipuri numerice
Tip de date

Descriere

Stocare

decimal(p,s)
numeric(p,s)

Numere cu precizie i magnitudine


5-17
fix. Permite numere de la -10^38 +1 octei
la 10^38 1.
Parametrul p indic numrul maxim
de cifre ce pot fi stocate (att n
partea stng ct i n partea dreapt
a punctului zecimal). p trebuie s fie
ntre 1 i 38. Implicit este 18.
Parametrul s indic numrul maxim de
cifre stocate n dreapta punctului
zecimal. s trebuie s fie de la 0 la p.
Implicit este 0.

Tipuri de date MSSQL


Tipuri numerice
Tip de date Descriere

Stocare

smallmoney Date monetare de la -214,748.3648 la


214,748.3647
money
Date monetare de la 922,337,203,685,477.5808
tla922,337,203,685,477.5807
float(n)
Date numerice n virgul mobil de la 1.79E+308 la 1.79E+308. Parametrul n
indic numrul de octei 4 sau 8.
float(24) cmp de 4 octei, iar float(53)
cmp de 8 octei. Valoarea implicit
pentru n este 53.
real
Date numerice n virgul mobil de la 3.40E + 38 la 3.40E + 38

4 octei
8 octei

4 sau 8
octei

4 octei

Tipuri de date MSSQL


Tipuri pentru dat/or
Tip de date
datetime

Descriere

January 1, 1753 - December 31, 9999


cu acuratee de 3.33 milisecunde
datetime2
January 1, 0001 - December 31, 9999
cu acuratee de 100 nanosecunde
smalldatetime January 1, 1900 - June 6, 2079 cu
acuratee de 1 minut
date
Stocheaz doar data.
January 1, 0001 - December 31, 9999
time
Stocheaz doar ora cu o acuratee de
100 nanosecunde
datetimeoffset La fel ca i datetime2 + are adugat
time zone offset

Stocare
8 octei
6-8 octei
4 octei
3 octei
3-5 octei
8-10
octei

Tipuri de date MSSQL


Tipuri pentru dat/or
Tip de date

Descriere

timestamp

Stocheaz un numr unic care este


actualizat de fiecare dat cnd o
nregistrare se creeaz sau se modific.
Valoarea este bazat pe ceasul intern i
nu are legtur cu ceasul real. Fiecare
tabel poate avea un singur cmp de
acest tip

Stocare

Tipuri de date MSSQL


Alte tipuri de date
Tip de date

Descriere

sql_variant

uniqueidentifier

Stocheaz pn la 8000 de octei de date de


diverse tipuri cu excepia text, ntext, i
timestamp
Stocheaz un globally unique identifier (GUID)

xml

Stocheaz date n format XML. Maximum 2GB

cursor

Stocheaz o referin la un cursor folosit


pentru operaii cu baza de date
Stocheaz un result-set pentru procesare
ulterioar

table

CREATE TABLE - exemplu


CREATE TABLE Persons

(
P_Id int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
P_Id

LastName FirstName Address

City

Constrngeri
Se folosesc pentru a limita tipul datelor care pot

ajunge n tabel
Se pot specifica la crearea tabelei (n
instruciunea CREATE TABLE) sau dup ce a fost
creat tabela (cu instruciunea ALTER TABLE)

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT

Constrngerea NOT NULL


Implicit o tabel poate conine n cmpurile

sale valori NULL


NOT NULL va determina ca aceast valoare
s nu fie acceptat n coloana asupra creia se
aplic constrngerea
Cu aceast constrngere nu se vor putea
aduga nregistrri sau nu se vor putea
actualiza fr a specifica o valoarea pentru
cmpul respectiv

Constrngerea NOT NULL exemplu


CREATE TABLE Persons

(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

Constrngerea UNIQUE
Folosit asupra unei coloane n care nu se vor

permite date duplicate


UNIQUE i PRIMARY KEY ofer garania de
unicitate pentru o coloan sau mulime de
coloane
O constrngere de tip PRIMARY KEY are
ntotdeauna definit i o constrngere
UNIQUE
Putem avea mai multe constrngeri UNIQUE
dar o singur constrngere PRIMARY KEY

Constrngerea UNIQUE exemplu


MySQL
CREATE TABLE Persons(

P_Id int NOT NULL,


LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255), City varchar(255),
UNIQUE (P_Id) )

SQL Server / Oracle / MS Access


CREATE TABLE Persons(

P_Id int NOT NULL UNIQUE,


LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255), City varchar(255) )

Constrngerea UNIQUE exemplu


Nume pentru o constrngere de unicitate

definit pe mai multe coloane


MySQL / SQL Server / Oracle / MS Access
CREATE TABLE Persons

(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)

Constrngerea UNIQUE cu
ALTER TABLE
Definirea unei constrngeri de unicitate dup

ce tabela a fost creat


MySQL / SQL Server / Oracle / MS Access
ALTER TABLE Persons

ADD UNIQUE (P_Id)


ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE
(P_Id,LastName)

Eliminarea unei constrngeri


MySQL
ALTER TABLE Persons

DROP INDEX uc_PersonID

SQL Server / Oracle / MS Access


ALTER TABLE Persons

DROP CONSTRAINT uc_PersonID

Constrngerea PRIMARY KEY


Identific n mod unic fiecare nregistrare din

tabel
Cheia primar trebuie s conin valori unice
Nu poate conine valoarea NULL
Fiecare tabel trebuie s aib o cheie primar
i numai una

Constrngerea PRIMARY KEY


Sintaxa:
MySQL
CREATE TABLE Persons

(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)

Constrngerea PRIMARY KEY


Sintaxa:
SQL Server / Oracle / MS Access
CREATE TABLE Persons

(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

Constrngerea PRIMARY KEY


Pentru a da un nume constrngerii i pentru a

permite o cheie primar format din mai multe


cmpuri folosim sintaxa:
CREATE TABLE Persons

(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY
(P_Id,LastName)
)

Constrngerea PRIMARY KEY


Crearea unei constrngeri de cheie primar

dup crearea tabelei


ALTER TABLE Persons

ADD PRIMARY KEY (P_Id)

n acest caz coloanele ce fac parte din cheia

primar trebuie s fi fost definite anterior


astfel nct s nu accepte valoarea NULL

Constrngerea PRIMARY KEY


Eliminarea unei constrngeri de cheie

primar
MySQL
ALTER TABLE Persons

DROP PRIMARY KEY

SQL Server / Oracle / MS Access


ALTER TABLE Persons

DROP CONSTRAINT pk_PersonID

Constrngerea FOREIGN KEY


O cheie strin dintr-o tabel pointeaz la o

cheie primar din alt tabel


Tabela Persons
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Tabela Orders
O_Id

OrderNo

P_Id

77895

44678

22456

24562

Constrngerea FOREIGN KEY


Coloana P_id din tabela Orders pointeaz la

coloana P_id din tabela Persons


Coloana P_id din tabela Orders este FOREIGN
KEY
Coloana P_id din tabela Persons este
PRIMARY KEY
Constrngerea de tip FOREIGN KEY este folosit
pentru a preveni aciuni care ar distruge
legturile dintre cele dou tabele
De asemenea mpiedic introducerea de date
invalide ce nu se regsesc n cheia primar

Constrngerea FOREIGN KEY


Sintaxa - MySQL
CREATE TABLE Orders

(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

Constrngerea FOREIGN KEY


Sintaxa - SQL Server / Oracle / MS Access
CREATE TABLE Orders

(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES
Persons(P_Id)
)

Constrngerea FOREIGN KEY


Pentru a stabili un nume pentru constrngere

i pentru a defini constrngerea pe mai multe


coloane
CREATE TABLE Orders(

O_Id int NOT NULL,


OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id) )

Constrngerea FOREIGN KEY


Adugarea constrngerii dup crearea tabelei
ALTER TABLE Orders

ADD FOREIGN KEY (P_Id)


REFERENCES Persons(P_Id)

Stabilirea unui nume pentru constrngere i

definire constrngere pe mai multe cmpuri


ALTER TABLE Orders

ADD CONSTRAINT fk_PerOrders


FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

Constrngerea FOREIGN KEY


Eliminarea unei constrngeri
MySQL
ALTER TABLE Orders

DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access


ALTER TABLE Orders

DROP CONSTRAINT fk_PerOrders

Constrngerea CHECK
Folosit pentru a limita intervalul de valori ce

pot fi introduse ntr-o coloan


Se poate defini pe o coloan caz n care se
limiteaz valorile ce pot fi introduse n
coloana respectiv
Se poate defini pe ntreaga tabel caz n care
se pot limita valorile ce se introduce ntr-o
coloan pe baza valorilor din alte coloane

Constrngerea CHECK
MySQL
CREATE TABLE Persons

(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)

Constrngerea CHECK
SQL Server / Oracle / MS Access
CREATE TABLE Persons

(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

Constrngerea CHECK
Pentru a stabili un nume pentru o

constrngere i pentru a defini o


constrngere pe mai multe coloane
CREATE TABLE Persons(

P_Id int NOT NULL,


LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255), City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND
City='Sandnes) )

Constrngerea CHECK
Stabilirea unei constrngeri dup crearea

tabelei
ALTER TABLE Persons

ADD CHECK (P_Id>0)

Stabilirea unui nume pentru constrngere i

crearea unei constrngeri pe mai multe


coloane
ALTER TABLE Persons

ADD CONSTRAINT chk_Person CHECK (P_Id>0


AND City='Sandnes')

Constrngerea CHECK
Eliminarea unei constrngeri
SQL Server / Oracle / MS Access
ALTER TABLE Persons

DROP CONSTRAINT chk_Person

Constrngerea DEFAULT
Folosit pentru a insera o valoare implicit

ntr-o coloan
Valoarea implicit va fi adugat la toate
nregistrrile noi, dac nu se specific o alt
valoare
Poate fi folosit i pentru a insera valori
sistem obinute prin apelul unor funcii

Constrngerea DEFAULT exemplu


CREATE TABLE Persons

(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)

Constrngerea DEFAULT exemplu


CREATE TABLE Orders

(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate date DEFAULT GETDATE()
)

Constrngerea DEFAULT
Adugarea unei constrngeri de valoarea

implicit dup crearea tabelei


MySQL
ALTER TABLE Persons

ALTER City SET DEFAULT 'SANDNES

SQL Server / Oracle / MS Access


ALTER TABLE Persons

ALTER COLUMN City SET DEFAULT 'SANDNES'

Constrngerea DEFAULT
Eliminarea unei constrngeri de valoare

implicit
MySQL
ALTER TABLE Persons

ALTER City DROP DEFAULTSQL

Server / Oracle / MS Access


ALTER TABLE Persons

ALTER COLUMN City DROP DEFAULT

Instruciunea CREATE INDEX


Folosit pentru a crea indeci pe tabele
Rolul indecilor este de a permite gsirea

rapid i eficient a datelor, fr a citi ntreg


tabelul
Actualizarea unei tabele ce conine indeci
este mai lent pentru c trebuie actualizai i
indecii
Indecii trebuie creai doar pentru coloane pe
care se vor face cutri frecvente

Instruciunea CREATE INDEX


Sintaxa:
CREATE INDEX index_name

ON table_name (column_name)

Aici se permit valori duplicate


Creare de indeci unici valorile duplicate nu

sunt permise
CREATE UNIQUE INDEX index_name

ON table_name (column_name)

Sintaxa poate diferi ntre SGBD-uri

Instruciunea CREATE INDEX


Exemplu
CREATE INDEX PIndex

ON Persons (LastName)

Creare de index pe o combinaie de coloane


CREATE INDEX PIndex

ON Persons (LastName, FirstName)

Instruciunea DROP
DROP INDEX - terge un index dintr-o tabel

MS Access
DROP INDEX index_name ON table_name

MSSQL
DROP INDEX table_name.index_name

DB2/Oracle
DROP INDEX index_name

MySQL
ALTER TABLE table_name DROP INDEX index_name

Instruciunea DROP
DROP TABLE - terge o tabel
DROP TABLE table_name

DROP DATABASE - terge toat baza de date


DROP DATABASE database_name

TRUNCATE TABLE - terge doar nregistrrile

dintr-o tabel
TRUNCATE TABLE table_name

Instruciunea ALTER TABLE


Folosit pentru a aduga, modifica, terge,

coloane dintr-o tabel


Adugarea unei coloane
ALTER TABLE table_name

ADD column_name datatype

tergerea unei coloane


ALTER TABLE table_name

DROP COLUMN column_name

Schimbarea tipului de date pentru o coloan


ALTER TABLE table_name

ALTER COLUMN column_name datatype

Instruciunea ALTER TABLE exemplu


P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

Vrem s adugm o nou coloan


ALTER TABLE Persons

ADD DateOfBirth date


P_Id LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

DateOfBirth

Instruciunea ALTER TABLE exemplu


Schimbarea tipului de date pentru coloane

DateofBirth n tabela Persons


ALTER TABLE Persons

ALTER COLUMN DateOfBirth year

Eliminarea coloanei adugate anterior


ALTER TABLE Persons

DROP COLUMN DateOfBirth

Auto increment
Permite generarea automat a unui numr

unic atunci cnd se insereaz o nou


nregistrare n tabel
De regul cnd cheia primar este de tip
numeric i e format dintr-un singur cmp,
are acest atribut

Auto increment
Sintaxa MySQL
CREATE TABLE Persons(

P_Id int NOT NULL AUTO_INCREMENT,


LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255), City varchar(255),
PRIMARY KEY (P_Id))

Implicit pornete de la 1 i crete cu 1


Altfel
ALTER TABLE Persons AUTO_INCREMENT=100

Auto increment
Dac vrem s adugm o nou nregistrare n

tabel nu mai trebuie s specificm cmpul ce


are atribut AUTO_INCREMENT
Se va genera o valoare unic automat
INSERT INTO Persons (FirstName,LastName)

VALUES ('Lars', 'Monsen')

Auto increment
Sintaxa SQL Server
CREATE TABLE Persons(

P_Id int PRIMARY KEY IDENTITY,


LastName varchar(255) NOT NULL,
FirstName varchar(255), Address varchar(255),
City varchar(255) )

Implicit pornete de la 1 i crete cu 1


Altfel
IDENTITY(10,5)

Pentru a aduga o nou nregistrare


INSERT INTO Persons (FirstName,LastName)

VALUES ('Lars','Monsen')

Auto increment
Sintaxa Oracle
CREATE SEQUENCE seq_person

MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
INSERT INTO Persons
(P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

VIEW
Un view este o tabel virtual bazat pe

result-set-ul unei interogri


Conine linii i coloane la fel ca i o tabel
real
Cmpurile unui view sunt cmpurile uneia sau
a mai multor tabele din baza de date
Putem aduga funcii SQL, clauza WHERE i
JOIN i s prezentm datele ca i cum ar veni
dintr-o singur tabel

VIEW
Sintaxa pentru creare VIEW
CREATE VIEW view_name AS

SELECT column_name(s)
FROM table_name
WHERE condition

Un view ntotdeauna va prezenta date

actualizate
Motorul bazei de date va recrea datele
folosind instruciunea SELECT de fiecare dat
cnd un view este interogat

VIEW - exemplu
Northwind
CREATE VIEW [Current Product List] AS

SELECT ProductID, ProductName


FROM Products
WHERE Discontinued=No

Interogarea
SELECT * FROM [Current Product List]

VIEW - exemplu
Northwind
CREATE VIEW [Products Above Average Price] AS

SELECT ProductName, UnitPrice


FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM
Products)

Interogarea
SELECT * FROM [Products Above Average Price]

VIEW - exemplu
Northwind
CREATE VIEW [Category Sales For 1997] AS

SELECT DISTINCT
CategoryName,Sum(ProductSales) AS
CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName

Interogri
SELECT * FROM [Category Sales For 1997]
SELECT * FROM [Category Sales For 1997]

WHERE CategoryName = 'Beverages'

VIEW - actualizare
Actualizarea unui view
CREATE OR REPLACE VIEW view_name AS

SELECT column_name(s)
FROM table_name
WHERE condition

Exemplu
CREATE VIEW [Current Product List] AS

SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No

VIEW - tergere
DROP VIEW view_name

Date calendaristice
Forma datei pe care ncercm s o inserm

trebuie s se potriveasc cu formatul coloanei


de tip dat din tabel
Atunci cnd apare i partea de timp/or
lucrurile se complic
Exist o serie de funcii predefinite pentru
procesarea informaiile legate de dat/or

Funcii MySQL pentru


dat/or
Funcia

Descriere

NOW()

Data i ora curent

CURDATE()

Data curent

CURTIME()

Ora curent

DATE()
EXTRACT()

Extrage partea de dat dintr-o expresie de tip


dat sau dat/or
Extrage o singur parte din dat/or

DATE_ADD()

Adaug un anumit interval de timp unei date

DATE_SUB()

Scade un anumit interval de timp dintr-o dat

DATEDIFF()

Calculeaz intervalul dintre dou date

DATE_FORMAT()

Afieaz data/ora n diverse formate

Funcii SQL Server pentru


dat/or
Funcia

Descriere

GETDATE()

Obine data i ora curent

DATEPART()

Extrage o singur parte din dat/or

DATEADD()
DATEDIFF()

Adun sau scade un anumit interval dintr-o


dat/or
Calculeaz timpul dintre dou date/ore

CONVERT()

Afieaz data/ora n diverse formate

NULL
Reprezint date lips/necunoscute/inaplicabile
Implicit o coloan poate conine valoarea NULL
Operatori pentru NULL:
IS NULL
IS NOT NULL

Cnd valoarea unei coloane este opional

putem aduga o nregistrare sau o putem


actualiza fr a specifica o valoare pentru
coloana respectiv
n acest caz se va salva valoarea NULL

NULL
Valoarea NULL este tratat diferit fa de

restul valorilor
Se folosete ca un marcator pentru date
necunoscute/inaplicabile
NULL i 0 (zero) nu sunt echivalente sau
comparabile

NULL
Tabela Persons
P_Id

LastName

FirstName Address

City

Hansen

Ola

Sandnes

Svendson

Tove

Pettersen

Kari

Borgvn 23

Sandnes
Stavanger

Coloana Address este opional


Se va salva NULL dac nu specificm o adres
Nu putem folosi operatorii relaionali sau de

egalitate pentru a testa valorile NULL

NULL operatorul IS NULL


Extragem nregistrrile cu adresa NULL
SELECT LastName, FirstName, Address FROM

Persons
WHERE Address IS NULL

Rezultatul
LastName

FirstName Address

Hansen

Ola

Pettersen

Kari

NULL operatorul IS NOT NULL


Extragem nregistrrile cu adresa completat
SELECT LastName, FirstName, Address FROM

Persons
WHERE Address IS NOT NULL

Rezultatul
LastName

FirstName Address

Svendson

Tove

Borgvn 23

Funciile ISNULL(), NVL(),


IFNULL() i COALESCE()
Tabela Products
P_Id ProductName

UnitPrice

UnitsInStock

UnitsOnOrder

Jarlsberg

10.45

16

15

Mascarpone

32.56

23

Gorgonzola

15.67

20

SELECT ProductName,

UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products

Dac UnitsOnOrder este NULL rezultatul va

fi NULL

Funciile ISNULL(), NVL(),


IFNULL() i COALESCE()
Funcia ISNULL() (Microsoft) ne permite s

specificm modul n care dorim s tratm


valorile NULL
NVL(), IFNULL(), COALESCE() pot fi folosite
pentru a realiza acelai obiectiv
n interogarea precedent vrem ca valorile NULL
s fie tratate ca zero
SQL Server / MS Access
SELECT ProductName,

UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

Funciile ISNULL(), NVL(),


IFNULL() i COALESCE()
Oracle nu are funcia ISNULL()
Putem folosi funcia NVL()
SELECT ProductName,

UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products

MySQL are funcia ISNULL() dar funcioneaz

puin diferit. Putem folosi IFNULL()


SELECT ProductName,

UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products

Funciile ISNULL(), NVL(),


IFNULL() i COALESCE()
MSSQL Coalesce
SELECT ProductName, UnitPrice*(UnitsInStock+

COALESCE(UnitsOnOrder,0))
FROM Products

Funcii SQL
SQL are multe funcii pentru a efectua calcule

asupra datelor
Funcii de agregare calculeaz o valoare pe
baza valorilor din coloanele tabelei

AVG() Calculeaz o valoare medie


COUNT() ntoarce numrul de nregistrri
FIRST() ntoarce prima valoare
LAST() ntoarce ultima valoare
MAX() ntoarce cea mai mare valoare
MIN() - ntoarce cea mai mic valoare
SUM() Calculeaz suma

Funcii SQL
Funcii scalare calculeaz o singur valoare pe

baza unei valori de intrare

UCASE() convertete n litere mari


LCASE() convertete n litere mici
MID() extrage caractere dintr-un cmp de tip text
LEN() calculeaz lungimea unui cmp de tip text
ROUND() rotunjete un cmp numeric la numrul de
zecimale specificat
NOW() ntoarce data i ora curent din sistem
FORMAT() stabilete modul n care este afiat un
cmp

Funcia AVG()
Calculeaz valoarea medie pe o coloan
Sintaxa
SELECT AVG(column_name) FROM table_name

Funcia AVG() - Exemplu


Calculm media pe coloana OrderPrice
SELECT AVG(OrderPrice) AS OrderAverage FROM

Orders
O_Id

OrderDate OrderPrice Customer

2008/11/12 1000

Hansen

2008/10/23 1600

Nilsen

2008/09/02 700

Hansen

2008/09/03 300

Hansen

2008/08/30 2000

Jensen

2008/10/04 100

Nilsen

OrderAverage
950

Funcia AVG() - Exemplu


Vrem s aflm clienii care au valoarea

OrderPrice mai mare dect media


SELECT Customer FROM Orders

WHERE OrderPrice> (SELECT AVG(OrderPrice)


FROM Orders)
Customer
Hansen
Nilsen
Jensen

Funcia COUNT()
Calculeaz numrul de nregistrri care

respect un anumit criteriu


Valorile NULL nu vor fi numrate
Sintaxa
SELECT COUNT(column_name) FROM

table_name

Pentru a afla numrul de nregistrri din

tabel
SELECT COUNT(*) FROM table_name

Funcia COUNT()
Numrul de valori distincte dintr-o coloan se

calculeaz astfel:
SELECT COUNT(DISTINCT column_name) FROM

table_name

Funcia COUNT() exemplu


Numrul de comenzi ale clientului Nilsen
O_Id

OrderDate

OrderPrice

Customer

2008/11/12

1000

Hansen

2008/10/23

1600

Nilsen

2008/09/02

700

Hansen

2008/09/03

300

Hansen

2008/08/30

2000

Jensen

2008/10/04

100

Nilsen

SELECT COUNT(Customer) AS CustomerNilsen

FROM Orders
WHERE Customer='Nilsen'
CustomerNilsen
2

Funcia COUNT(*) exemplu


Numrul de comenzi din tabela Orders o

gsim astfel:
SELECT COUNT(*) AS NumberOfOrders FROM

Orders
NumberOfOrders
6

Reprezint numrul total de nregistrri din

tabel

Funcia COUNT(DISTINCT)
exemplu
Vrem s gsim numrul de clieni unici
SELECT COUNT(DISTINCT Customer) AS

NumberOfCustomers FROM Orders


NumberOfCustomers
3

Funcia FIRST()
ntoarce prima valoare din coloana indicat
Sintaxa
SELECT FIRST(column_name) FROM table_name

Tabela Orders
O_Id

OrderDate OrderPrice Customer

2008/11/12 1000

Hansen

2008/10/23 1600

Nilsen

2008/09/02 700

Hansen

2008/09/03 300

Hansen

2008/08/30 2000

Jensen

2008/10/04 100

Nilsen

Funcia FIRST() - exemplu


Prima valoare din coloana OrderPrice
SELECT FIRST(OrderPrice) AS FirstOrderPrice

FROM Orders

Dac funcia nu exist n SGBD atunci:


SELECT OrderPrice

FROM Orders ORDER BY O_Id LIMIT 1


FirstOrderPrice
1000

Funcia LAST()
ntoarce ultima valoare din coloana indicat
Sintaxa
SELECT LAST(column_name) FROM table_name
O_Id

OrderDate OrderPrice Customer

2008/11/12 1000

Hansen

2008/10/23 1600

Nilsen

2008/09/02 700

Hansen

2008/09/03 300

Hansen

2008/08/30 2000

Jensen

2008/10/04 100

Nilsen

Funcia LAST()
Dac SGBD-ul nu are aceast funcie
SELECT OrderPrice FROM Orders ORDER BY O_Id

DESC LIMIT 1

Rezultatul
FirstOrderPrice
1000

Funcia MAX()
Determin cea mai mare valoare dintr-o

coloan
Sintaxa:
SELECT MAX(column_name) FROM table_name

Exemplu
SELECT MAX(OrderPrice) AS LargestOrderPrice

FROM Orders
LargestOrderPrice
2000

Funcia MIN()
Determin cea mai mic valoare dintr-o

coloan
Sintaxa:
SELECT MIN(column_name) FROM table_name

Exemplu
SELECT MIN(OrderPrice) AS

SmallestOrderPrice FROM Orders


SmallestOrderPrice
100

Funcia SUM()
Calculeaz suma pe o coloan numeric
Sintaxa:
SELECT SUM(column_name) FROM table_name

Exemplu
SELECT SUM(OrderPrice) AS OrderTotal FROM

Orders
OrderTotal
5700

Clauza GROUP BY
De cele mai multe ori funciile de agregare

folosesc clauza GROUP BY


Ar e rolul de a grupa datele dintr-una sau mai
multe coloane
Sintaxa:
SELECT column_name,

aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

Clauza GROUP BY - exemplu


Vrem s aflm totalul comenzilor pentru

fiecare client
SELECT Customer,SUM(OrderPrice) FROM Orders

GROUP BY Customer
Customer SUM(OrderPrice)
Hansen

2000

Nilsen

1700

Jensen

2000

Clauza GROUP BY - exemplu


Dac omitem clauza GROUP BY
SELECT Customer,SUM(OrderPrice) FROM Orders
Customer

SUM(OrderPrice)

Hansen

5700

Nilsen

5700

Hansen

5700

Hansen

5700

Jensen

5700

Nilsen

5700

Nu este ceea ce vrem

Clauza GROUP BY - exemplu


SUM(OrderPrice) - calculeaz o singur valoare

Customer va genera ase valori

Prin urmare nu vom obine rezultatul dorit


Putem grupa i dup mai multe coloane
SELECT Customer, OrderDate, SUM(OrderPrice)

FROM Orders
GROUP BY Customer, OrderDate

Clauza HAVING
E nevoie de aceast clauz pentru ca WHERE

nu poate fi folosit cu funciile de agregare


Sintaxa
SELECT column_name,

aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name)
operator value

Clauza HAVING - exemplu


Vrem s gsim clienii cu comenzi totale mai

mici de 2000
SELECT Customer,SUM(OrderPrice) FROM Orders

GROUP BY Customer
HAVING SUM(OrderPrice)<2000
Customer

SUM(OrderPrice)

Nilsen

1700

Clauza HAVING - exemplu


Vrem s aflm dac totalul comenzilor lui

Hansen sau Jensen este mai mare de 1500


SELECT Customer,SUM(OrderPrice) FROM Orders

WHERE Customer='Hansen' OR
Customer='Jensen'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500
Customer

SUM(OrderPrice)

Hansen

2000

Jensen

2000

Funcia UCASE()
Convertete n litere mari
Sintaxa
SELECT UCASE(column_name) FROM

table_name

Sintaxa pentru MS SQL Server


SELECT UPPER(column_name) FROM

table_name

Funcia UCASE() - exemplu


Tabela Persons
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT UCASE(LastName) as

LastName,FirstName FROM Persons


LastName FirstName
HANSEN

Ola

SVENDSON Tove
PETTERSEN Kari

Funcia LCASE()
Convertete n litere mici
Sintaxa
SELECT LCASE(column_name) FROM

table_name

Sintaxa pentru MS SQL Server


SELECT LOWER(column_name) FROM

table_name

Funcia LCASE() - exemplu


Tabela Persons
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT LCASE(LastName) as

LastName,FirstName FROM Persons


LastName FirstName
hansen

Ola

svendson

Tove

pettersen

Kari

Funcia MID()
Folosit pentru a extrage caractere dintr-un

cmp de tip text


Sintaxa
SELECT MID(column_name,start[,length]) FROM

table_name
Parametru

Descriere

column_name

Obligatoriu. Cmpul din care se extrag


caractere
Obligatoriu. Specific poziia de pornire
(indexat de la 1)
Opional. Numrul de caractere ce vor fi
extrase. Dac lipsete, funcia extrage
toate caracterele rmase

start
length

Funcia MID() - exemplu


Tabela Persons
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn 10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

SELECT MID(City,1,4) as SmallCity FROM Persons


SmallCity
Sand
Sand
Stav

Funcia LEN()
Calculeaz lungimea unui cmp de tip text
Sintaxa
SELECT LEN(column_name) FROM table_name

Exemplu
SELECT LEN(Address) as LengthOfAddress FROM

Persons
LengthOfAddress
12
9
9

Funcia ROUND()
Folosit pentru a rotunji un numr la numrul

de zecimale specificat
Sintaxa
SELECT ROUND(column_name,decimals) FROM

table_name
Parametru

Descriere

column_name

Obligatoriu. Cmpul care va fi rotujnit.

decimals

Obligatoriu. Numrul de zecimale la care


se face rotunjirea.

Funcia ROUND() exemplu


Tabela Products
Prod_Id

ProductName

Unit

UnitPrice

Jarlsberg

1000 g

10.45

Mascarpone

1000 g

32.56

Gorgonzola

1000 g

15.67

Vrem s extragem numele produsului i

preul rotunjit la cel mai apropiat ntreg


SELECT ProductName, ROUND(UnitPrice,0) as

UnitPrice FROM Products

ProductName

UnitPrice

Jarlsberg

10

Mascarpone

33

Gorgonzola

16

Funcia NOW()
ntoarce data i ora curent a sistemului
Sintaxa
SELECT NOW() FROM table_name
Prod_Id

ProductName

Unit

UnitPrice

Jarlsberg

1000 g

10.45

Mascarpone

1000 g

32.56

Gorgonzola

1000 g

15.67

SELECT ProductName, UnitPrice, Now() as

PerDate FROM Products


ProductName

UnitPrice

PerDate

Jarlsberg

10.45

10/7/2008 11:25:02 AM

Mascarpone

32.56

10/7/2008 11:25:02 AM

Gorgonzola

15.67

10/7/2008 11:25:02 AM

Funcia FORMAT()
Folosit pentru a stabili modul n care este

afiat un cmp
Sintaxa
SELECT FORMAT(column_name, format) FROM

table_name

Funcia FORMAT() - exemplu


Prod_Id

ProductName

Unit

UnitPrice

Jarlsberg

1000 g

10.45

Mascarpone

1000 g

32.56

Gorgonzola

1000 g

15.67

SELECT ProductName, UnitPrice,

FORMAT(Now(),'YYYY-MM-DD') as PerDate
FROM Products
ProductName

UnitPrice

PerDate

Jarlsberg

10.45

2008-10-07

Mascarpone

32.56

2008-10-07

Gorgonzola

15.67

2008-10-07

SQL QUIZ

1. Ce reprezint SQL?
a) Structured Question Language
b) Structured Query Language
c) Strong Question Language

2. Care instruciune SQL


este folosit pentru a
extrage date dintr-o baz de
date?
a) EXTRACT
b) GET
c) SELECT
d) OPEN

3. Care instruciune SQL


este folosit pentru a
actualiza date n baza de
date?
a) UPDATE
b) SAVE
c) SAVE AS
d) MODIFY

4. Care instruciune SQL


este folosit pentru a
terge date n baza de date?
a) REMOVE
b) COLLAPSE
c) DELETE

5. Care instruciune SQL


este folosit pentru a
insera date noi n baza de
date?
a) ADD NEW
b) INSERT INTO
c) ADD RECORD
d) INSERT NEW

6. n SQL, cum se extrage o


coloan numit FirstName
dintr-o tabel numit
Persons?
a) SELECT Persons.FirstName
b) SELECT FirstName FROM Persons
c) EXTRACT FirstName FROM Persons

7. Cum se extrag toate


coloanele dintr-o tabel cu
numele Persons?
a) SELECT * FROM Persons

b) SELECT [all] FROM Persons


c) SELECT PersonsSELECT *.Persons

8. Cum se extrag toate


coloanele dintr-o tabel cu
numele Personspentru care
valoarea coloanei FirstName
este Peter?
a) SELECT * FROM Persons

WHERE FirstName = 'Peter


b) SELECT [all] FROM Persons
WHERE FirstName LIKE 'Peter
c) SELECT * FROM Persons
WHERE FirstName<>'Peter
d) SELECT [all] FROM Persons
WHERE FirstName='Peter'

9. Cum se extrag toate


coloanele dintr-o tabel cu
numele Persons pentru care
valoarea coloanei FirstName
ncepe cu a?
a) SELECT * FROM Persons WHERE FirstName='a
b) SELECT * FROM Persons
WHERE FirstName LIKE '%a
c) SELECT * FROM Persons
WHERE FirstName='%a%
d) SELECT * FROM Persons WHERE
FirstName LIKE 'a%'

10. Operatorul OR afieaz


nregistrrile pentru care
oricare din condiii este
adevrat. Operatorul AND
afieaz nregistrrile pentru
care toate condiiile sunt
adevrate.
a) Adevrat
b) Fals

11. Cum se extrag toate coloanele


dintr-o tabel cu numele Persons
pentru care valoarea coloanei
FirstName este Peter i
valoarea coloanei LastName este
Jackson?
a) SELECT FirstName='Peter',
LastName='Jackson' FROM Persons
b) SELECT * FROM Persons WHERE
FirstName<>'Peter' AND LastName<>'Jackson
c) SELECT * FROM Persons WHERE

FirstName='Peter' AND LastName='Jackson'

11. Cum se extrag toate coloanele


dintr-o tabel cu numele Persons
pentru care LastName este
alfabetic cuprins (inclusiv) ntre
Hansen i Pettersen?
a) SELECT * FROM Persons

WHERE LastName BETWEEN 'Hansen' AND


'Pettersen
b) SELECT LastName>'Hansen' AND
LastName<'Pettersen' FROM Persons
c) SELECT * FROM Persons
WHERE LastName>'Hansen' AND
LastName<'Pettersen'

12. Care instruciune SQL


este folosit pentru a
extrage doar valori
distincte?
a) SELECT DISTINCT
b) SELECT UNIQUE

c) SELECT DIFFERENT

14. Care cuvnt cheie SQL


este folosit pentru a sorta
rezultatul?
a) ORDER BY
b) SORT
c) ORDER
d) SORT BY

15. Cum se pot extrage toate


nregistrrile din tabela
Persons ordonate descresctor
dup FirstName?
a) SELECT * FROM Persons
SORT BY 'FirstName' DESC
b) SELECT * FROM Persons
ORDER FirstName DESC
c) SELECT * FROM Persons
SORT 'FirstName' DESC
d) SELECT * FROM Persons
ORDER BY FirstName DESC

16. Cum se poate insera o


nou nregistrare n tabela
Persons?
a) INSERT INTO Persons VALUES ('Jimmy',

'Jackson')
b) INSERT ('Jimmy', 'Jackson') INTO Persons
c) INSERT VALUES ('Jimmy', 'Jackson') INTO
Persons

17. Cum se poate insera


Olsen ca LastName n
tabela Persons?
a) INSERT INTO Persons ('Olsen') INTO

LastName
b) INSERT ('Olsen') INTO Persons (LastName)
c) INSERT INTO Persons (LastName) VALUES
('Olsen')

18. Cum se schimb numele


Hansen n Nilsen n
coloana LastName a tabelei
Persons?
a) UPDATE Persons SET LastName='Hansen' INTO

LastName='Nilsen
b) MODIFY Persons SET LastName='Nilsen'
WHERE LastName='Hansen
c) MODIFY Persons SET LastName='Hansen' INTO
LastName='Nilsen
d) UPDATE Persons SET LastName='Nilsen'
WHERE LastName='Hansen'

19. Cum se pot terge


nregistrrile pentru care
FirstName este Peter n
tabela Persons?
a) DELETE FirstName='Peter' FROM Persons
b) DELETE FROM Persons

WHERE FirstName = 'Peter


c) DELETE ROW FirstName='Peter' FROM
Persons

20. Cum se poate obine


numrul de nregistrri din
tabela Persons?
a) SELECT COUNT() FROM Persons
b) SELECT COLUMNS() FROM Persons

c) SELECT COLUMNS(*) FROM Persons


d) SELECT COUNT(*) FROM Persons