You are on page 1of 73

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

SQL
SQL este un limbaj standard pentru accesarea si 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)

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) cont.
CREATE DATABASE
ALTER DATABASE
CREATE TABLE
ALTER TABLE
DROP TABLE
CREATE INDEX
DROP INDEX
Exemplu SELECT
SELECT * FROM Persons

SELECT LastName,FirstName FROM Persons

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 sa selectam valorile distincte din coloana City

SELECT DISTINCT City FROM Persons

Clauza WHERE
-

Folosita pentru a filtra inregistrari


Folosita pentru a extrage doar inregistrarile care indeplinesc 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'

Ghilimele apostroafe
-SQL folose.te apostrof pentru a delimita valorile de tip text/string
- Majoritatea SGBD-urilor accept.si ghilimele
- Valorile numerice nu se delimiteaz. Cu apostroafe/ghilimele
Corect:
SELECT * FROM Persons WHERE FirstName='Tove'
SELECT * FROM Persons WHERE Year=1965
Gresit:
SELECT * FROM Persons WHERE FirstName=Tove
SELECT * FROM Persons WHERE Year='1965'

Operatori pentru clauza WHERE

Operatorii AND si OR
Se folosesc pentru a filtra nregistrarile dupa mai multe conditii

SELECT * FROM Persons WHERE


FirstName='Tove AND LastName='Svendson

Operatorii AND si OR (cont.)


SELECT * FROM Persons WHERE
FirstName='Tove OR FirstName='Ola

SELECT * FROM Persons WHERE


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

Clauza ORDER BY sortare


- Cuvantul cheie ORDER BY se folose.te pentru a sorta rezultatul dupa o anumit.
coloana sau coloane
- Ordonarea/sortarea se face in mod implicit cresca.tor
- Ordonarea descrescatoare 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

Instruciunea INSERT INTO


O folosim pentru a insera noi nregistrri ntr-o tabel
Sintaxa (dou variante)
1) INSERT INTO table_name
VALUES (value1, value2, value3,...)
2) INSERT INTO table_name (column1, column2,column3,...)
VALUES (value1, value2, value3,...)
Exemplu INSERT INTO

INSERT INTO Persons


VALUES (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')

Instruc.iunea UPDATE
. Se folose.te pentru actualizarea unor date dintr-o tabela
. Sintaxa:
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value
. !!! Omiterea clauzei WHERE duce la actualizarea tuturor nregistrarilor din tabela
Instruciunea UPDATE exemplu:

UPDATE Persons
SET Address='Nissestien 67', City='Sandnes'
WHERE LastName='Tjessem' AND
FirstName='Jakob'

Instruciunea UPDATE !!!

UPDATE Persons
SET Address='Nissestien 67', City='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
Instruc.iunea DELETE exemplu

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

Baze de date - interogri


SELECT * FROM customers
SELECT CompanyName, ContactName FROMcustomers

SELECT * FROM customers WHEREcompanyname LIKE 'a%


SELECT CompanyName, ContactName FROM customers
WHERE CompanyName > 'a
SELECT CompanyName, ContactNameFROM 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

Operatorul LIKE
- Folosit in clauza WHERE pentru a specifica un sablon de cautare intr-o coloana.
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%'
Operatorul LIKE caractere pentru ablon
Putem folosi urmtoarele caractere pentru ablon

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 lista de valori in 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')

Operatorul BETWEEN
- Folosit in clauza WHERE pentru a stabili un interval de valori dupa 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'

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 decitit
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 intr-un result-set din doua sau mai multe tabele,
pe baza unei relatii intre anumite coloane din aceste tabele
Cheia primara = o coloana(sau o combinatie de coloane) cu valori unice in fiecare
inregistrare. Scopul este de a lega datele din mai multe tabele, fara a repeta datele
din fiecare tabela

Join
Tabela Persons

Tabela`Orders

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 cand este cel putin o potrivire in ambele tabele
Sintaxa:
SELECT column_name(s)
FROM table_name1 INNER JOIN table_name2
ON table_name1.column_name =
table_name2.column_name
Daca sunt linii in prima tabela care nu au corespondent in a doua atunci ele nu sunt
extrase

INNER JOIN - exemplu


Vrem sa 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

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

RIGHT JOIN
Extrage toate inregistrarile din table din dreapta, chiar si cele pentru care nu sunt
potriviri in tabela din stanga
Sintaxa:
SELECT column_name(s) FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name =
table_name2.column_name
In unele SGBD-uri se numeste RIGHT OUTER JOIN

RIGHT JOIN - exemplu


Tabela Persons

Tabela Orders

RIGHT JOIN - exemplu


Extragem toate comenzile cu persoanele corespunzatoare
SELECT Persons.LastName, Persons.FirstName,
Orders.OrderNo FROM Persons
RIGHT JOIN Orders ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName

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

Operatorul UNION
Folosit pentru a combina doua sau mai multe instructiuni SELECT
Fiecare instructiune SELECT trebuie sa aiba acelasi numar de coloane
Coloanele corespunzatoare trebuie sa aiba si aceleasi tipuri
Coloanele trebuie sa fie si in aceeasi 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

Operatorul UNION - exemplu


SELECT E_Name FROM Employees_Norway
UNION
SELECT E_Name FROM Employees_USA

SELECT INTO
Folosit pentru a crea copii backup ale tabelelor
Sintaxa:
1. SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
2. 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 doua 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

Tipuri de date MSSQL


iruri de caractere Unicode

Tipuri de date MSSQL


Tipuri binare

Tipuri de date MSSQL


Tipuri numerice

Tipuri de date MSSQL

Tipuri numerice

Tipuri de date MSSQL


Tipuri numerice

Tipuri de date MSSQL


Tipuri pentru dat/or

Tipuri de date MSSQL


Tipuri pentru dat/or

Tipuri de date MSSQL


Alte tipuri de date

CREATE TABLE - exemplu

CREATE TABLE Persons


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

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

Constrangerea NOT NULL


-Implicit o tabela poate contine in campurile sale valori NULL
- NOT NULL va determina ca aceasta valoare sa nu fie acceptata in coloana asupra
careia se aplica constrangerea

- Cu aceasta constrangere nu se vor putea adauga inregistrari sau nu se vor putea


actualiza fara a specifica o valoarea pentru campul respectiv
Constrangerea 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 constrangeri


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

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
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))
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
Constrangerea 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()
)
Constrangerea DEFAULT
Adaugarea unei constrangeri de valoarea implicita dupa 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'
Constrangerea DEFAULT

Eliminarea unei constrangeri 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

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 pornes.te de la 1 si creste 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 tabela virtuala bazata pe result-set-ul unei interogari
Contine linii si coloane la fel ca si o tabela reala
Campurile unui view sunt campurile uneia sau a mai multor tabele din baza de date
Putem adauga functii SQL, clauza WHERE si JOIN si sa prezentam datele ca si cum
ar veni dintr-o singura tabela
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 incercam sa o inseram trebuie sa se potriveasca cu
formatul coloanei e tip data din tabela
Atunci cand apare si partea de timp/ora lucrurile se complica
Exista o serie de funct.ii predefinite pentru procesarea informatiile legate de
data/ora.

Funcii MySQL pentru dat/or

Funcii SQL Server pentru dat/or

NULL
Reprezint. date lipsa/necunoscute/inaplicabile
Implicit o coloana poate contine valoarea NULL

Operatori pentru NULL:


IS NULL
IS NOT NULL
Cand valoarea unei coloane este optionala putem adauga o inregistrare sau o
putem actualiza fara a specifica o valoare pentru coloana respectiva
In 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
NULL operatorul IS NULL
Extragem nregistrrile cu adresa NULL
SELECT LastName, FirstName, Address FROM
Persons
WHERE Address IS NULL

Rezultatul
NULL - operatorul IS NOT NULL
Extragem inregistrarile cu adresa completata
SELECT LastName, FirstName, Address FROM
Persons
WHERE Address IS NOT NULL

Rezultatul
Funciile ISNULL(), NVL(), IFNULL() i COALESCE()
Tabela Products

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
Func.ia AVG() - Exemplu
Calculam media pe coloana OrderPrice
SELECT AVG(OrderPrice) AS OrderAverage FROM
Orders

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)

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'

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


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

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

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

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

Func.ia LAST()

Daca SGBD-ul nu are aceasta functie


SELECT OrderPrice FROM Orders ORDER BY O_Id
DESC LIMIT 1

Rezultatul
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

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

Funcia SUM()
Calculeaz suma pe o coloan numeric

Sintaxa:
SELECT SUM(column_name) FROM table_name
Exemplu
SELECT SUM(OrderPrice) AS OrderTotal FROM
Orders

Clauza GROUP BY
De cele mai multe ori functiile 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

Clauza GROUP BY - exemplu


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

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

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

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

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

Funcia MID()
Folosit pentru a extrage caractere dintr-un cmp de tip text
Sintaxa
SELECT MID(column_name,start[,length]) FROM
table_name

Funcia MID() - exemplu

Tabela Persons

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

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

Func.ia ROUND()

. Folosita pentru a rotunji un numar la numarul


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

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

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

SELECT ProductName, UnitPrice, Now() as


PerDate FROM Products

Functia FORMAT()
Folosita pentru a stabili modul n care este afisat un cmp
Sintaxa
SELECT FORMAT(column_name, format) FROM
table_name

Functia FORMAT() exemplu

SELECT ProductName, UnitPrice,


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

Triggerele sunt o clasa speciala de proceduri stocate, asociate unei tabele, definite pentru a fi lansate
in executie automat la initierea unei operatii de tip UPDATE, INSERT sau DELETE asupra tabelei in
cauza.
Triggerele sunt un instrument puternic pentru implementarea a ceea ce in aplicatiile de baze de date
poarta numele de business rules. Termenul se refera la acele reguli, constrangeri, care tin in mod
inerent de structura bazei de date si sunt induse de semnatica unei colectii de date, fiind comuna
tuturor aplicatiilor care folosesc aceasta baza de date si independente de fiecare aplicatie in parte.
Sintaxa instructiunii CREATE TRIGGER:
CREATE TRIGGER nume_trigger
ON { tabela | vedere } [WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF }
{ [ DELETE ], [INSERT ] [,] [ UPDATE ] }
[ NOT FOR REPLICATION ]
AS

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 instructiune SQL este folosita 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 FirstNameeste 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 Personspentru


care valoarea coloanei FirstName este Peter si 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'
12. Care instruc.iune SQL este folosita 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 inseraOlsen 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 numeleHansen 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

You might also like