Descărcați ca pdf sau txt
Descărcați ca pdf sau txt
Sunteți pe pagina 1din 204

BAZE DE DATE

Curs pentru specializrile


Informatic anul II
Matematic-Informatic anul III
Semestrul I
Horea Oros, horea.oros@gmail.com
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




Trei nregistrri, 5 cmpuri (coloane)
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
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



SELECT LastName,FirstName FROM Persons


P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
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



SELECT DISTINCT City FROM Persons
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
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



SELECT * FROM Persons
WHERE City='Sandnes'
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 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



SELECT * FROM Persons WHERE
FirstName='Tove AND LastName='Svendson

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
P_Id LastName FirstName Address City
2 Svendson Tove Borgvn 23 Sandnes
Operatorii AND i OR (cont.)
SELECT * FROM Persons WHERE
FirstName='Tove OR FirstName='Ola


SELECT * FROM Persons WHERE
LastName='Svendson'
AND (FirstName='Tove' OR FirstName='Ola')
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
P_Id LastName FirstName Address City
2 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



SELECT * FROM Persons
ORDER BY LastName

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn
10
Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Tom Vingvn 23 Stavanger
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn
10
Sandnes
4 Nilsen Tom Vingvn 23 Stavanger
3 Pettersen Kari Storgt 20 Stavanger
2 Svendson Tove Borgvn 23 Sandnes
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


INSERT INTO Persons
VALUES (4,'Nilsen', 'Johan', 'Bakken 2',
'Stavanger')
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 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
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Johan Bakken 2 Stavanger
5 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




UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
WHERE LastName='Tjessem' AND
FirstName='Jakob'
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Johan Bakken 2 Stavanger
5 Tjessem Jakob
Instruciunea UPDATE
exemplu - rezultatul




UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
WHERE LastName='Tjessem' AND
FirstName='Jakob'
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Johan Bakken 2 Stavanger
5 Tjessem Jakob Nissestien 67 Sandnes
Instruciunea UPDATE !!!
UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
P_Id LastName FirstName Address City
1 Hansen Ola Nissestien 67 Sandnes
2 Svendson Tove Nissestien 67 Sandnes
3 Pettersen Kari Nissestien 67 Sandnes
4 Nilsen Johan Nissestien 67 Sandnes
5 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





DELETE FROM Persons
WHERE LastName='Tjessem' AND
FirstName='Jakob'
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Johan Bakken 2 Stavanger
5 Tjessem Jakob Nissestien 67 Sandnes
Instruciunea DELETE
exemplu - rezultatul





DELETE FROM Persons
WHERE LastName='Tjessem' AND
FirstName='Jakob'
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Johan Bakken 2 Stavanger
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
Berguvsvgen 8 Lule
Centro comercial
Moctezuma
Francisco Chang Sierras de
Granada 9993
Mxico
D.F.
Ernst Handel Roland Mendel Kirchgasse 6 Graz
FISSA Fabrica Inter.
Salchichas S.A.
Diego Roel C/ Moralzarzal,
86
Madrid
Galera del
gastrnomo
Eduardo
Saavedra
Rambla de
Catalua, 23
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



SELECT TOP 2 * FROM Persons
SELECT TOP 50 PERCENT * FROM Persons
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Tom Vingvn 23 Stavanger
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 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



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%'
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
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



SELECT * FROM Persons
WHERE LastName IN ('Hansen','Pettersen')
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
3 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



SELECT * FROM Persons
WHERE LastName
BETWEEN 'Hansen' AND 'Pettersen'
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
P_Id LastName FirstName Address City
1 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



Tabela Orders
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 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



Tabela Orders
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 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




Employees_USA
E_ID E_Name
01 Hansen, Ola
02 Svendson, Tove
03 Svendson, Stephen
04 Pettersen, Kari
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 Descriere Stocare
char(n) ir de caractere de dimensiune fix.
Maxim 8000 de caractere
n
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

Tipuri de date MSSQL
iruri de caractere Unicode
Tip de date Descriere Stocare
nchar(n) 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

Tipuri de date MSSQL
Tipuri binare
Tip de date Descriere Stocare
bit Permite 0, 1, sau NULL
binary(n) Date binare de lungime fix. Maxim
8000 octei

varbinary(n) Date binare de lungime variabil.
Maxim 8000 octei

varbinary(max) Date binare de lungime variabil.
Maxim 2GB

image Date binare de lungime variabil.
Maxim 2GB
Tipuri de date MSSQL
Tipuri numerice
Tip de date Descriere Stocare
tinyint Permite numere ntregi de la 0 la 255 1 octet
smallint Permite numere ntregi de la -32,768
la 32,767
2 octei
int Permite numere ntregi de la -
2,147,483,648 la2,147,483,647
4 octei
bigint Permite numere ntregi de la -
9,223,372,036,854,775,808 la
9,223,372,036,854,775,807
8 octei
Tipuri de date MSSQL
Tipuri numerice
Tip de date Descriere Stocare
decimal(p,s)
numeric(p,s)
Numere cu precizie i magnitudine
fix. Permite numere de la -10^38 +1
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.
5-17
octei
Tipuri de date MSSQL
Tipuri numerice
Tip de date Descriere Stocare
smallmoney Date monetare de la -214,748.3648 la
214,748.3647
4 octei
money Date monetare de la -
922,337,203,685,477.5808
tla922,337,203,685,477.5807
8 octei
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.
4 sau 8
octei
real Date numerice n virgul mobil de la -
3.40E + 38 la 3.40E + 38
4 octei
Tipuri de date MSSQL
Tipuri pentru dat/or
Tip de date Descriere Stocare
datetime January 1, 1753 - December 31, 9999
cu acuratee de 3.33 milisecunde
8 octei
datetime2 January 1, 0001 - December 31, 9999
cu acuratee de 100 nanosecunde
6-8 octei
smalldatetime January 1, 1900 - June 6, 2079 cu
acuratee de 1 minut
4 octei
date Stocheaz doar data.
January 1, 0001 - December 31, 9999
3 octei
time Stocheaz doar ora cu o acuratee de
100 nanosecunde
3-5 octei
datetimeoffset La fel ca i datetime2 + are adugat
time zone offset
8-10
octei
Tipuri de date MSSQL
Tipuri pentru dat/or
Tip de date Descriere Stocare
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

Tipuri de date MSSQL
Alte tipuri de date
Tip de date Descriere
sql_variant Stocheaz pn la 8000 de octei de date de
diverse tipuri cu excepia text, ntext, i
timestamp
uniqueidentifier 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
table Stocheaz un result-set pentru procesare
ulterioar
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



Tabela Orders
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1
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



Vrem s adugm o nou coloan
ALTER TABLE Persons
ADD DateOfBirth date
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
P_Id LastName FirstName Address City DateOfBirth
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
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() Extrage partea de dat dintr-o expresie de tip
dat sau dat/or
EXTRACT() 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() Adun sau scade un anumit interval dintr-o
dat/or
DATEDIFF() 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




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
P_Id LastName FirstName Address City
1 Hansen Ola Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Stavanger
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



SELECT ProductName,
UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
Dac UnitsOnOrder este NULL rezultatul va
fi NULL
P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder
1 Jarlsberg 10.45 16 15
2 Mascarpone 32.56 23
3 Gorgonzola 15.67 9 20
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
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 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







SELECT COUNT(Customer) AS CustomerNilsen
FROM Orders
WHERE Customer='Nilsen'
O_Id OrderDate OrderPrice Customer
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 2008/10/04 100 Nilsen
CustomerNilsen
2
Funcia COUNT(*) exemplu
Numrul de comenzi din tabela Orders o
gsim astfel:
SELECT COUNT(*) AS NumberOfOrders FROM
Orders



Reprezint numrul total de nregistrri din
tabel
NumberOfOrders
6
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
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 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
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 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






Nu este ceea ce vrem
Customer SUM(OrderPrice)
Hansen 5700
Nilsen 5700
Hansen 5700
Hansen 5700
Jensen 5700
Nilsen 5700
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



SELECT UCASE(LastName) as
LastName,FirstName FROM Persons
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
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



SELECT LCASE(LastName) as
LastName,FirstName FROM Persons
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
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
start Obligatoriu. Specific poziia de pornire
(indexat de la 1)
length Opional. Numrul de caractere ce vor fi
extrase. Dac lipsete, funcia extrage
toate caracterele rmase
Funcia MID() - exemplu
Tabela Persons



SELECT MID(City,1,4) as SmallCity FROM Persons
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
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



Vrem s extragem numele produsului i
preul rotunjit la cel mai apropiat ntreg
SELECT ProductName, ROUND(UnitPrice,0) as
UnitPrice FROM Products
Prod_Id ProductName Unit UnitPrice
1 Jarlsberg 1000 g 10.45
2 Mascarpone 1000 g 32.56
3 Gorgonzola 1000 g 15.67
ProductName UnitPrice
Jarlsberg 10
Mascarpone 33
Gorgonzola 16
Funcia NOW()
ntoarce data i ora curent a sistemului
Sintaxa
SELECT NOW() FROM table_name



SELECT ProductName, UnitPrice, Now() as
PerDate FROM Products
Prod_Id ProductName Unit UnitPrice
1 Jarlsberg 1000 g 10.45
2 Mascarpone 1000 g 32.56
3 Gorgonzola 1000 g 15.67
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



SELECT ProductName, UnitPrice,
FORMAT(Now(),'YYYY-MM-DD') as PerDate
FROM Products
Prod_Id ProductName Unit UnitPrice
1 Jarlsberg 1000 g 10.45
2 Mascarpone 1000 g 32.56
3 Gorgonzola 1000 g 15.67
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

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