Sunteți pe pagina 1din 28

Cursul

10
Limbaje relationale pentru descrierea si manipularea
datelor. Standardul SQL.
Limbaje relaţionale pentru definirea şi
manipularea datelor

—  SGBD relaţionale oferă seturi de comenzi speciale pentru


descrierea, respectiv pentru manipularea datelor. Acestea pot
face parte din acelaşi limbaj sau pot face parte din limbaje separate.

2
Limbajul pentru definirea datelor (LDD)
—  Descrierea datelor este stocată în dicţionarul BD.

—  Comenzile LDD pot fi clasificate în funcţie de nivelul de organizare


a datelor la care acţionează:

—  nivel conceptual

—  nivel logic

—  nivel fizic

3
Limbajul pentru definirea datelor (LDD)
—  Comenzile LDD care acţionează la nivel conceptual:

Comandă LDD Descriere


CREATE DATABASE creează dicţionarul BD şi alte spaţii necesare

DROP DATABASE şterge BD

ALTER DATABASE actualizează proprietăţi ale BD


creează structura de date şi restricţiile de integritate,
CREATE TABLE pe care le stochează în dicţionarul BD
DROP TABLE şterge tabela

ALTER TABLE actualizează structura unei tabele

....

4
Limbajul pentru definirea datelor (LDD)
—  Comenzile LDD care acţionează la nivel logic:
Comandă LDD Descriere
CREATE VIEW creează o tabelă virtuală

DROP VIEW şterge o tabelă virtuală

—  Comenzile LDD care acţionează la nivel fizic:


Comandă LDD Descriere
ataşează un fişier de indexare unei tabele în scopul de a
CREATE INDEX mări viteza de acces la datele unei tabele
DROP INDEX şterge indexul
construieşte o structură fizică care grupează anumite
CREATE CLUSTER date din BD
DROP CLUSTER şterge un cluster
5
Limbajul SQL
—  SQL (Structured Query Language) este un limbaj de descriere şi
manipulare acceptat de cele mai importante sisteme de gestiune a
bazelor de date relaționale.

—  Atât ANSI (American National Standards Institute), cât şi ISO


(International Standards Organization) îl consideră drept un
standard pentru limbajele de interogare a bazelor de date
relaționale.

6
Limbajul SQL
Versiuni ale
An lansare Particularităţi
standardului SQL
SQL-86 1986 Prima versiune SQL standardizată
+ restricţii de integritate, jonctiuni folosind
SQL-89 1989 WHERE
Versiune revizuită complet; stă la baza versiunilor
ulterioare: DATE, TIMESTAMP, VARCHAR,
SQL-92 1992 UNION, NATURAL JOIN, OUTER JOIN, ALTER,
DROP, CAST, CASE etc
SQL:1999 1999 + facilităţi ale limbajelor orientate-obiect
SQL:2003 2003 + facilităţi OLAP, comanda MERGE, facilităţi XML
SQL:2006 2006 + suport XML
+ declanşatori INSTEAD OF, comanda
SQL:2008 2008 TRUNCATE, imbunatatirea lui MERGE
SQL:2011 2011 + suport BD temporale
7
Limbajul SQL-Oracle
Categorii de comenzi SQL Oracle
Categorie comenzi SQL Comenzi SQL
CREATE
Limbajul de definire a datelor (LDD) ALTER
DROP
SELECT
INSERT
Limbajul de manipulare a datelor (LMD)
UPDATE
DELETE
COMMIT
Limbajul de gestiune a tranzacţiilor ROLLBACK
SAVEPOINT
GRANT
Limbajul de control al datelor
REVOKE

8
Limbajul SQL
—  Există două moduri de lucru cu baze de date şi anume:

—  SQL interactiv, în care un utilizator tastează o singură comandă,


care este trimisă imediat bazei de date. Rezultatul unei interogări
interactive este o tabelă de date în memoria principală;

—  SQL încorporat (embedded SQL), în care declaraţiile SQL sunt


plasate într-un limbaj de programare (e.g. C/C++ -> PRO*C). La
execuție, comenzile SQL sunt înlocuite cu apeluri la bibliotecile
limbajului gazda. Limbajele au un preprocesor SQL. SQL poate fi
static (în cazul în care întreaga comandă este specificată la momentul
scrierii programului) sau dinamic (pe baza datelor introduse de
utilizator se formează comanda pentru baza de date).

9
Limbajul de definire a datelor
Crearea tabelelor

—  În general, crearea unei tabele constă din:

—  definirea coloanelor

—  definirea restricţiilor de integritate

—  specificarea parametrilor de stocare

—  definirea cluster-ului în care este inclusă tabela etc.

10
Limbajul de definire a datelor
Crearea tabelelor
CREATE TABLE [nume_schema.] nume_tabelă
(
nume_coloana_1 tip_date [DEFAULT expresie],

nume_coloana_2 tip_date [DEFAULT expresie]
);

11
Limbajul de definire a datelor
Crearea tabelelor

—  Structura unei tabele poate fi creată în următoarele moduri:

1)  fără indicarea restricţiilor de integritate

2)  cu indicarea restricţiilor la nivel de coloană (in-line)

3)  cu indicarea restricţiilor la nivel de tabelă (out-of-line)

4)  prin copiere din altă tabelă

Notă: variantele 2 şi 3 pot fi utilizate împreună pentru crearea unei tabele

12
Limbajul de definire a datelor
Crearea tabelelor
—  Restricţiile de integritate în Oracle:
Ø  PRIMARY KEY

Ø  FOREIGN KEY

Ø  UNIQUE

Ø  NOT NULL

Ø  CHECK

13
Limbajul de definire a datelor
Crearea tabelelor
—  Restricţiile de integritate:

Ø  pot fi create odată cu tabela sau după crearea acesteia

Ø  pot fi specificate la nivel de coloană sau la nivel de tabelă au ataşat


un nume intern unic (specificat explicit de utilizator sau atribuit
automat de sistem)

Ø  asigură faptul că valorile unei coloane satisfac o condiție declarată.

Ø  Verificare restricțiilor se face implicit la începutul tranzacției dar


poate fi amânată si pentru finalul acesteia (SET CONSTRAINTS ALL
DEFERRED; )

Ø  previn ștergerea unei tabele dacă există dependențe (se poate „forța”
ștergerea: DROP TABLE NUME_T CASCADE CONSTRAINTS)
14
Limbajul de definire a datelor
Crearea tabelelor
—  Restricțiile de integritate:

Ø  pot fi activate sau dezactivate în funcţie de necesităţi (implicit sunt


active). La re-activare, se pot valida datele existente (implicit) sau
nu:
Ø  ENABLE, VALIDATE

Ø  ENABLE, NOVALIDATE

Ø  DISABLE, VALIDATE

Ø  DISABLE, NOVALIDATE

15
Limbajul de definire a datelor
Crearea tabelelor
—  Restricţia PRIMARY KEY ataşată unui ansamblu de coloane (definirea de
cheie primară compusă) poate fi definită numai la nivel de tabelă.

—  Restricţia NOT NULL poate fi definită numai la nivel de coloană.

—  Restricţia CHECK la nivel de coloană nu poate referi alte coloane ale


aceleiaşi tabele. Definită la nivel de tabelă, însă, restricția poate face
referire la una sau mai multe coloane. Poate fi folosita si pentru verificări
tip NOT NULL

—  Restricţia FOREIGN KEY poate fi definită cu opțiunile:


—  ON DELETE CASCADE – ștergerea unei înregistrări din tabela părinte este
autorizată şi implică ștergerea automată a înregistrărilor corespondente din
tabela copil;
—  ON DELETE SET NULL – ștergerea unei înregistrări din tabela părinte este
autorizată şi implică transformarea în valori NULL a valorilor cheii externe
din înregistrările corespondente aflate în tabela copil.
16
Limbajul de definire a datelor, Limbajul SQL-
Oracle: Crearea tabelelor
1)  fără indicarea restricţiilor de integritate

CREATE TABLE angajati


(
marca NUMBER(4),
nume VARCHAR2(20),
prenume VARCHAR2(20),
email VARCHAR2(20),
data_angajare DATE DEFAULT SYSDATE,
salariu NUMBER(8,2),
id_departament NUMBER(3)
);
17
Limbajul de definire a datelor, Limbajul SQL-
Oracle: Crearea tabelelor
2)  cu indicarea restricţiilor de integritate la nivel de coloană

CREATE TABLE angajati


(
marca NUMBER(4) CONSTRAINT pkAng PRIMARY KEY,
nume VARCHAR2(20) NOT NULL,
prenume VARCHAR2(20) NOT NULL,
email VARCHAR2(20) CONSTRAINT uqMail UNIQUE
CONSTRAINT ckMail CHECK (email LIKE '%@%.%'),
data_angajare DATE DEFAULT SYSDATE,
salariu NUMBER(8,2),
id_departament NUMBER(3) CONSTRAINT fkDep REFERENCES
departamente (id_departament) ON DELETE CASCADE
);
18
Limbajul de definire a datelor, Limbajul SQL-
Oracle: Crearea tabelelor
3)  cu indicarea restricţiilor de integritate la nivel de tabelă

CREATE TABLE angajati (


marca NUMBER(4),
nume VARCHAR2(20),
prenume VARCHAR2(20),
email VARCHAR2(20),
data_angajare DATE DEFAULT SYSDATE,
salariu NUMBER(8,2),
id_departament NUMBER(3),
CONSTRAINT pkAng PRIMARY KEY (marca),
CONSTRAINT uqMail UNIQUE (email),
CONSTRAINT ckMail CHECK (email LIKE '%@%.%'),
CONSTRAINT nnNume CHECK (nume IS NOT NULL),
CONSTRAINT nnPrenume CHECK (prenume IS NOT NULL),
CONSTRAINT fkDep FOREIGN KEY(id_departament) REFERENCES
departamente (id_departament)
19 ON DELETE CASCADE );
Limbajul de definire a datelor, Limbajul SQL-
Oracle: Crearea tabelelor
4)  prin copiere din altă tabelă

CREATE TABLE angajati_noi


AS
SELECT * FROM angajati
WHERE data_angajare>TO_DATE ('01.01.2010', 'DD.MM.YYYY');

Notă: restricţiile de integritate existente în tabela angajaţi nu se păstrează şi în


noua tabelă

20
Limbajul de definire a datelor
Modificarea structurii tabelelor
—  Modificarea structurii unei tabele constă din:

—  adăugarea unor coloane noi într-o tabelă existentă (eventual cu


indicarea de restricţii sau de valori implicite)

—  modificarea coloanelor unei tabele

—  specificarea unor restricţii pentru coloane existente

—  activarea, dezactivarea sau suprimarea unor restricţii de integritate

—  redenumiri ale coloanelor sau redenumirea tabelei

21
Limbajul de definire a datelor, Limbajul SQL-
Oracle: Modificare structurii tabelelor
ALTER TABLE nume_tabela
ADD (nume_coloana_1 tip_data restrictie,
... nume_coloana_2 tip_data restrictie);

ALTER TABLE nume_tabela


MODIFY (nume_coloana_1 tip_data restrictie,
... nume_coloana_2 tip_data restrictie);

ALTER TABLE nume_tabela


RENAME COLUMN nume_coloana TO nume_nou_coloana;

ALTER TABLE nume_tabela


DROP COLUMN nume_coloana;

ALTER TABLE nume_tabela


DROP (nume_coloana_1,
22 nume_coloana_2);
Limbajul de definire a datelor, Limbajul SQL-
Oracle: Modificare structurii tabelelor
ALTER TABLE nume_tabela
ADD CONSTRAINT nume_restrictie tip_restrictie ….;

ALTER TABLE nume_tabela


DROP CONSTRAINT nume_restrictie;

ALTER TABLE nume_tabela


DISABLE CONSTRAINT nume_restricţie;

ALTER TABLE nume_tabela


ENABLE CONSTRAINT nume_restricţie;

ALTER TABLE nume_tabela


RENAME TO nume_nou_tabelă;
23
Limbajul de definire a datelor, Limbajul SQL-
Oracle: Modificare structurii tabelelor
—  Vizualizarea structurii unei tabele se realizează prin comanda:
DESCRIBE nume_tabela;
—  Ștergerea restricției de cheie primară se poate realiza si prin comanda:
ALTER TABLE nume_tabela
DROP PRIMARY KEY;
—  În cazul în care se încearcă ștergerea unei chei primare referite de o
cheie externă dintr-o tabelă copil, această ștergere nu se poate efectua
decât dacă în comanda ALTER apare opțiunea CASCADE:
ALTER TABLE nume_tabela
DROP PRIMARY KEY CASCADE;
—  Schimbarea definiției unei coloane din NULL în NOT NULL se poate
realiza doar dacă există siguranța că fiecare linie a coloanei respective
este NOT NULL sau dacă tabela nu are date.
—  Reducerea dimensiunii unei coloane sau schimbarea tipului de dată al
acesteia se pot efectua numai dacă respectiva coloană nu conține valori
sau conţine doar valori NULL.
24
Limbajul de definire a datelor, stergerea tabelelor
—  Ștergerea unei tabele presupune:

—  ștergerea definiției sale din dicționarul BD

—  ștergerea indecșilor asociați tabelei

—  ștergerea privilegiilor conferite în legătură cu tabela

—  eliberarea spațiului de memorie ocupat

—  invalidarea funcțiilor, procedurilor, tabelelor virtuale, sinonimelor


care fac referire la tabelă

—  Ştergerea unei tabele este ireversibilă folosind ROLLBACK

25
Limbajul de definire a datelor, Limbajul SQL
Oracle: ștergerea tabelelor
DROP TABLE nume_tabela;

—  Pentru a se permite ştergerea unei tabele referite într-o altă


tabelă se utilizează comanda DROP cu opţiunea CASCADE
CONSTRAINTS, în scopul suprimării restricţiilor de
referenţialitate:

DROP TABLE nume_tabela CASCADE CONSTRAINTS;


26
CURSUL 11...
—  Limbaje relaţionale pentru definirea şi manipularea
datelor. Limbajul SQL. (continuare)
Bibliografie si lecturi
recomandate
—  Ramez Elmasri, Shamkant B. Navathe, Fundamentals
of database systems, 6th ed, Addison-Wesley
Publishing House, 2011, ISBN-13: 978-0-136-08620-8
—  Ion Lungu, Adela Bâra, Constanţa Bodea, Iuliana
Botha, Vlad Diaconiţa, Alexandra Florea, Anda
Velicanu, Tratat de baze de date. Organizare,
proiectare şi implementare, Editura ASE

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