Sunteți pe pagina 1din 32

Universitatea Al.I.

Cuza Iai
Facultatea de Economie i Administrarea Afacerilor
Departamentul de Contabilitate, Informatic economic i
Statistic

SQL (1)
Prezentare general. Tipuri
de date. Crearea tabelelor.
Marin Declararea restriciilor.
Fotache

Tutoriale video
10a_Creare

(sub) scheme si tabele

PostgreSQL
http://1drv.ms/1oCrcin

10b_(sub)scheme_PostgreSQL

http://1drv.ms/1oCrohD

SQL - Structured Query


Language
Este cel mai rspndit limbaj de lucru cu
bazele de date
Bazat pe algebra relaional
Folosit de:
Administratorii BD: crearea tabelelor, declararearea
restriciilor
Dezvoltatorii de aplicaii (script-uri, proceduri, funcii etc.)
Neinformaticieni extragerea de informaii ad-hoc, din
bazele de date

Adulat - Intergalactic Dataspeak


(M.Stonebraker)
Detestat vezi NoSQL, studenii de la CIG

Origini/contribuii
Anii 70, gndit ca limbaj de lucru pentru
baze de date gestionate cu System R
(IBM)

Nu Edgar Codd, fondatorul modelului relaional,


ci Donald Chamberlain i Raymond Boyce

Bazat nu pe calcul relaional (cum a


propus Codd, ci pe algebra relaional

Organisme de standardizare
SQL
IS O
A N S I

Internaional
...

A FN O R

Naional

(Frana)

...

X3

Sisteme de prelucrare a informaiilor

Comitetul de
stardarde acreditate

...
O M C

Comitetul pentru Managementul Operaional

X 3H4

X 3H7

X 3T3

X 3H2

IRDS

OIM

ODP

SQL

D B S SG

Comitete tehnice,
grupuri de studiu

P R IS -T G

Grupuri pe activiti

ISO International Organisation for Standardization, ANSI American National


Standard Institute, AFNOR Association Francaise de Normalisation,
OMG Operational Management Committee, DBSSG Database Systems
Study Group, PRIS-TG Predictable Real-time Information Management
Task Group

Standarde SQL

ANSI-1986, ISO-1987

SQL-89 (SQL1)

SQL2 sau SQL-92 600 pagini

Entry intrare, de baz (SQL-89 corectat)

Intermediate intermediar

Full deplin.

SQL:1999 2000 pagini

SQL:2003

SQL:2008

SQL: 2011

Orientri SQL:1999,
SQL:2003, SQL:2008,
SQL:2011
Definirea i gestionarea obiectelor
complexe i persistente:

Generalizare i specializare
Moteniri multiple
Polimorfism
ncapsulare
Tipuri de date definite de utilizator
Expresii privind interogri recursive i
instrumente adecvate de administrare a
datelor

SQL furnizeaza suport


pentru:

Definirea datelor
Consultarea BD
Manipularea datelor din baz
Controlul accesului
Partajarea bazei ntre mai muli utilizatori
ai acesteia
Meninerea intergritii BD

Atuuri ale SQL

Independena de productor
Portabilitate
Este standardizat
Bazat pe modelul relaional
Limbaj de nivel nalt
Rspunsuri la nterogri simple, ad-hoc
Suport programatic pentru accesul la BD
Permite multiple imagini asupra datelor
bazei
Permite definirea dinamic a datelor
Suport pentru arhitecturi client-server

Comenzi SQL

Cteva tipuri de date SQL

SMALLINT: numere ntregi de lungime redus


INTEGER sau INT: ntregi (9 poziii, 32 bii)
BIGINT: numere ntregi mari
NUMERIC(p,s) sau DECIMAL(p,s)
FLOAT: virgul mobil (20 poziii ptr. mantis),
CHAR(n) sau CHARACTER(n): (max. 240),
VARCHAR(n) sau CHAR VARYING(n): ir de
caractere de lungime variabil (max. 254),
DATE: dat calendaristic,
TIME: ora etc.,
TIMESTAMP: an, lun, zi, or, minutul,
secund, plus o fraciune de secund
INTERVAL dintre dou date/momente

Tipuri de date numerice n


PostgreSQL
Tip de
Descriere

date

Interval de valori

smallint

ntregi de mici dimensiuni

De la -32768 la +32767

integer

ntregi

De la -2147483648 la +2147483647

bigint

ntregi de mari dimensiuni

De la -9223372036854775808 la
9223372036854775807

decimal

numere cu parte ntreag


i parte fracionar

Pn la 131072 cifre pentru partea


ntreag; pn la 16383 cifre pentru
partea fracionar;

numeric

numere cu parte ntreag


i parte fracionar

Pn la 131072 cifre pentru partea


ntreag; pn la 16383 cifre pentru
partea fracionar;

real

numere cu parte ntreag


i parte fracionar

Precizie de 6 cifre fracionare

double
precision

numere cu parte ntreag


i parte fracionar

Precizie de 15 cifre fracionare

serial

Numere ntregi
autoincremenate

De la 1 la 2147483647

Alte tipuri de date n PostgreSQL


Tip de date

Descriere

boolean

Valori logice (true/false)

character varying [ (n) ]

ir de caractere de lungime variabil


limitat

character [ (n) ]

ir de caractere de lungime fix

date

Dat calendaristic (year, month, day)

interval [fields] [ (p) ]

Interval de timp

money

Mrimi monetare

text

ir de caractere de lungime variabil


nelimitat

time [ (p) ] [ without time zone ]

Ora din zi (fr zon temporal)

time [ (p) ] with time zone

Ora din zi, inclusiv zona temporal

timestamp [ (p) ] [ without time


zone ]

Dat calendaristic i or din zi (fr


zon temporal)

timestamp [ (p) ] with time zone

Dat calendaristic i or din zi,


inclusiv zon temporal

Crearea tabelelor i
declararea atributelor
CREATE TABLE facturi(
N rFact N U M ERIC(8),
D ataFact D ATE
D EFAU LT CU RREN T_D ATE,
CodClN U M ERIC(6) D EFAU LT 1001,
O bs VARCH AR(50)
)

Valori nenule
CREATE TABLE facturi(
N rFact N U M ERIC(8) N O T N U LL,
D ataFact D ATE
D EFAU LT CU RREN T_D ATE
N O T N U LL,
CodClN U M ERIC (6)
D EFAU LT 1001 N O T N U LL,
O bs VARCH AR(50)
)

Cheie primar/unicitate (1)


C REATE TABLE facturi(
N rFact N U M ERIC (8) N O T N U LL P R IM A R Y K EY ,
D ataFact D ATE D EFAU LT CU RREN T_D ATE
N O T N U LL,
CodClN U M ERIC(6) D EFAU LT 1001 N O T N U LL,
O bs VARCH AR(50)
);

C REATE TABLE judete (


Jud CH AR(2) P R IM A R Y K EY ,
Judet VARC H AR(25) N O T N U LL U N IQ U E,
Regiune VARCH AR (15) ) ;

Cheie primar/unicitate (2)


CREATE TABLE liniifact (
N rFact N U M ERIC(8) N O T N U LL,
Linie SM ALLIN T N O T N U LL,
CodPr N U M ERIC(6) N O T N U LL,
Cantitate N U M ERIC(10) N O T N U LL,
PretU nit N U M BER (12),
P R IM A R Y K EY (N rFact, Linie),
U N IQ U E (N rFact, CodPr) )

Restricii refereniale (1)


C REATE TABLE liniifact (
N rFact N U M ERIC(8) N O T N U LL,
Linie SM ALLIN T N O T N U LL,
CodPr N U M ERIC(6) N O T N U LL,
Cantitate N U M ERIC(10) N O T N U LL,
PretU nit N U M BER (12),
PRIM ARY KEY (N rFact,Linie),
U N IQ U E (N rFact, CodPr),
FO R EIG N K EY N rFact
R EFER EN C ES factu ri (N rFact),
FO R EIG N K EY C od P r
R EFER EN C ES p rod u se (C od P r) )

Restricii refereniale (2)


CREATE TABLE liniifact (
N rFact N U M ERIC(8) N O T N U LL
R EFER EN C ES factu ri (N rFact),
Linie SM ALLIN T N O T N U LL,
CodPr N U M ERIC(6) N O T N U LL
R EFER EN C E p rod u se (C od P r),
Cantitate N U M ERIC(10) N O T N U LL,
PretU nit N U M BER (12),
PRIM ARY KEY (N rFact, Linie),
U N IQ U E (N rFact, CodPr) )

Restricii refereniale (3)


C REATE TABLE liniifact (
N rFact N U M ERIC (8) N O T N U LL,
Linie SM ALLIN T N O T N U LL,
C odPr N U M ERIC (6) N O T N U LL,
C antitate N U M ERIC(10) N O T N U LL,
PretU nit N U M BER (12),
PRIM ARY KEY (N rFact, Linie),
U N IQ U E (N rFact, CodPr),
FO R EIG N K EY N rFact R EFER EN C ES factu ri (N rFact)
O N D ELETE R ES TR IC T O N U P D ATE C A S C A D E ,
FO R EIG N
K EY
C od P r R EFER EN C ES
p rod u se
(C od P r)
O N D ELETE R ES TR IC T O N U P D ATE C A S C A D E
)

Restricii utilizator (1)


CREATE TABLE facturi(
N rFact N U M ERIC(8) N O T N U LL PRIM ARY KEY,
D ataFact D ATE D EFAU LT C U RREN T_D ATE
N O T N U LL
C H EC K (D ataFact > = D ATE '2011-0801'
A N D D ataFact < = D ATE'2015-1231'),
C odClN U M ERIC(6) D EFAU LT 1001 N O T N U LL
REFEREN CES clienti(CodCl)
O N D ELETE RESTRICT
O N U PD ATE CASC AD E,
O bs VARCH AR(50)
)

Restricii utilizator (2)


CREATE TABLE LIN IIFACT (
N rFact N U M ERIC(8) N O T N U LL,
Linie SM ALLIN T N O T N U LL C H EC K (Lin ie > 0),
CodPr N U M ERIC(6) N O T N U LL,
Cantitate N U M ERIC(10) N O T N U LL,
PretU nit N U M BER (12),
PRIM ARY KEY (N rFact, Linie),
U N IQ U E (N rFact, CodPr),
FO REIG N KEY N rFact REFEREN CES facturi(N rFact)
O N D ELETE RESTRICT O N U PD ATE CASCAD E,
FO REIG N KEY CodPr REFEREN CES produse (CodPr)
O N D ELETE RESTRICT O N U PD ATE CASCAD E )

Script PostgreSQL- creare


tabele (1)
D RO P
D RO P
D RO P
D RO P
D RO P

TABLE
TABLE
TABLE
TABLE
TABLE

incasfact ;
incasari;
liniifact ;
facturi;
produse ;

D RO P
D RO P
D RO P
D RO P
D RO P

TABLE
TABLE
TABLE
TABLE
TABLE

persclienti;
persoane ;
clienti;
coduri_postale ;
judete ;

Script PostgreSQL- creare


tabele (2)
C REATE TABLE judete (
jud CH AR(2)
C O N STRAIN T pk_judete PRIM ARY KEY
CO N STRAIN T ck_jud
C H EC K (jud= LTRIM (U PPER(jud))),
judet VARCH AR(25)
CO N STRAIN T un_judet U N IQ U E
CO N STRAIN T nn_judet N O T N U LL
CO N STRAIN T ck_judet
C H EC K (judet= LTRIM (IN ITCAP(judet))),
regiune VARC H AR(15) D EFAU LT 'M oldova'
CO N STRAIN T ck_regiune
C H EC K (regiune IN ('Banat',
'Transilvania','D obrogea',
'O ltenia','M untenia',
'M oldova'))
);

Script PostgreSQL- creare


tabele (3)

CREATE TABLE coduri_postale (


codpost CH AR(6)
CO N STRAIN T pk_cp PRIM ARY KEY
C O N STRAIN T ck_codpost
CH EC K (codpost= LTRIM (codpost)),
loc VARCH AR(25)
C O N STRAIN T nn_loc N O T N U LL
CO N STRAIN T ck_loc
CH EC K (loc= LTRIM (IN ITCAP(loc))),
jud C H AR(2)
D EFAU LT 'IS'
CO N STRAIN T fk_cp_jud REFEREN CES judete(jud)
);

Script PostgreSQL- creare


tabele (4)
CREATE TABLE clienti(
codclN U M BER(6) CO N STRAIN T pk_clientiPRIM ARY KEY
CO N STRAIN T ck_codclCH ECK (codcl> 1000),
denclVARC H AR (30)
CO N STRAIN T ck_denclCH ECK
(SU BSTR(dencl,1,1) = U PPER(SU BSTR(dencl,1,1))),
codfi
scalCH AR(9) CO N STRAIN T ck_codfi
scal
CH EC K (SU BSTR(codfi
scal,1,1) =
U PPER(SU BSTR(codfi
scal,1,1))),
adresa VARCH AR(40) CO N STRAIN T ck_adresa_clienti
CH EC K (SU BSTR(adresa,1,1) =
U PPER(SU BSTR(adresa,1,1))),
codpost C H AR(6) CO N STRAIN T fk_clienti_cp
REFEREN C ES coduri_postale(codpost),
telefon VARC H AR2(10) ) ;

Script PostgreSQL - creare


tabele (5)
CREATE TABLE produse (
codpr N U M BER(6)
CO N STRAIN T pk_produse PRIM ARY KEY
CO N STRAIN T ck_codpr CH ECK (codpr > 0),
denpr VARCH AR(30) CO N STRAIN T ck_denpr
CH ECK (SU BSTR(denpr,1,1) =
U PPER(SU BSTR(denpr,1,1))),
um VARCH AR(10),
grupa VARCH AR(15) CH ECK (SU BSTR(grupa,1,1) =
U PPER(SU BSTR(grupa,1,1))),
procTVA N U M BER(2,2) D EFAU LT .24
);

Script PostgreSQL- creare


tabele (6)
CREATE TABLE facturi(
nrfact N U M BER(8)
CO N STRAIN T pk_facturiPRIM ARY KEY,
datafact D ATE D EFAU LT SYSD ATE
CO N STRAIN T ck_datafact
C H ECK (datafact > = D ATE2012-08-01 AN D
datafact < = TO _D ATE('31/12/2019',
'D D /M M /YYYY')),
codclN U M BER(6) CO N STRAIN T fk_facturi_clienti
REFEREN CES clienti(codcl) ,
O bs VARCH AR2(50)
);

Script PostgreSQL- creare


tabele (7)
C REATE TABLE liniifact (
nrfact N U M BER(8)
C O N STRAIN T fk_liniifact_facturi
REFEREN C ES facturi(nrfact),
linie N U M BER(2)
C O N STRAIN T ck_linie C H EC K (linie > 0),
codpr N U M BER(6)
C O N STRAIN T fk_liniifact_produse
REFEREN C ES produse(codpr),
cantitate N U M BER(10),
pretunit N U M BER (12),
C O N STRAIN T pk_liniifact
PRIM ARY KEY (nrfact,linie)
);

Modificarea structurii (1)


Adugarea unui nou atribut
ALTER TABLE PERSO AN E AD D D ataN ast D ATE

Modificarea tipului/lungimii unui atribut


ALTER
TABLE
PERSO AN E
M O D IFY
VARCH AR2(21))

(N um e

Adugarea/modificarea valorii implicite


ALTER TABLE PERSO AN E M O D IFY (Sex D EFAU LT 'F')
ALTER TABLE PERSO AN E M O D IFY (Sex D EFAU LT N U LL)

Adugarea/anularea restriciilor
ALTER TABLE PERSO AN E D RO P PRIM ARY KEY
ALTER TABLE PERSO AN E AD D PRIM ARY KEY (CN P)

tergerea tabelelor

D RO P < num e tabel>


< com portam ent la tergere >
unde:
< com portam ent la tergere > : : = =
RESTRICT | CASCAD E

Actualizarea tabelelor

Adugarea unei linii


IN SERT IN TO tabel [(atribut1, atribut2, .)]
(valoare_atribut1, valoare_atribut2, .)
tergerea liniilor
D ELETE FRO M num e-tabel

W H ERE predicat

D ELETE FRO M FACTU R IW H ERE N rFact = 1122

Modificarea valorilor unor atribute


U PD ATE tabel SET atribut1 = expresie1
[, atribut2= expresie2 .] W H ERE predicat
U PD ATE CLIEN TISET Telefon = 032-313131
W H ERE CodCl= 1001 ;
U PD ATE PRO D U SE SET ProcTVA = .19 ;

VALU ES