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 City


1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Trei nregistrri, 5 cmpuri (coloane)


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

SELECT * FROM Persons


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

SELECT * FROM Persons WHERE


FirstName='Tove AND LastName='Svendson
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
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes

SELECT * FROM Persons WHERE


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

SELECT * FROM Persons


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

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
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
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
UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
WHERE LastName='Tjessem' AND
FirstName='Jakob'
Instruciunea UPDATE
exemplu - rezultatul
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
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
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
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

DELETE FROM Persons


WHERE LastName='Tjessem' AND
FirstName='Jakob'
Instruciunea DELETE
exemplu - rezultatul
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

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 Berguvsvgen 8 Lule
Berglund
Centro comercial Francisco Chang Sierras de Mxico
Moctezuma Granada 9993 D.F.
Ernst Handel Roland Mendel Kirchgasse 6 Graz
FISSA Fabrica Inter. Diego Roel C/ Moralzarzal, Madrid
Salchichas S.A. 86
Galera del Eduardo Rambla de Barcelona
gastrnomo Saavedra Catalua, 23
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
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Tom Vingvn 23 Stavanger

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
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
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 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 Orice caracter care nu este n list
[!charlist]
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
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

SELECT * FROM Persons


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

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

SELECT * FROM Persons


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

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

Tabela Orders
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
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 Descriere Stocare
char(n) ir de caractere de dimensiune fix. n
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
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 2 octei
la 32,767
int Permite numere ntregi de la - 4 octei
2,147,483,648 la2,147,483,647
bigint Permite numere ntregi de la - 8 octei
9,223,372,036,854,775,808 la
9,223,372,036,854,775,807
Tipuri de date MSSQL

Tipuri numerice
Tip de date Descriere Stocare
decimal(p,s) Numere cu precizie i magnitudine 5-17
numeric(p,s) 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 4 octei
214,748.3647
money Date monetare de la - 8 octei
922,337,203,685,477.5808
tla922,337,203,685,477.5807
float(n) Date numerice n virgul mobil de la - 4 sau 8
1.79E+308 la 1.79E+308. Parametrul n octei
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 - 4 octei
3.40E + 38 la 3.40E + 38
Tipuri de date MSSQL

Tipuri pentru dat/or


Tip de date Descriere Stocare
datetime January 1, 1753 - December 31, 9999 8 octei
cu acuratee de 3.33 milisecunde
datetime2 January 1, 0001 - December 31, 9999 6-8 octei
cu acuratee de 100 nanosecunde
smalldatetime January 1, 1900 - June 6, 2079 cu 4 octei
acuratee de 1 minut
date Stocheaz doar data. 3 octei
January 1, 0001 - December 31, 9999
time Stocheaz doar ora cu o acuratee de 3-5 octei
100 nanosecunde
datetimeoffset La fel ca i datetime2 + are adugat 8-10
time zone offset 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
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

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

Vrem s adugm o nou coloan


ALTER TABLE Persons
ADD DateOfBirth date
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
P_Id LastName FirstName Address City
1 Hansen Ola Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari 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
1 Jarlsberg 10.45 16 15
2 Mascarpone 32.56 23
3 Gorgonzola 15.67 9 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
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
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

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
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
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
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 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
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 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
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
P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 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
1 Jarlsberg 1000 g 10.45
2 Mascarpone 1000 g 32.56
3 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
1 Jarlsberg 1000 g 10.45
2 Mascarpone 1000 g 32.56
3 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
1 Jarlsberg 1000 g 10.45
2 Mascarpone 1000 g 32.56
3 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

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