Documente Academic
Documente Profesional
Documente Cultură
Data Base Limbaj SQL
Data Base Limbaj SQL
Limbajul SQL
Limbajul de definire a datelor (LDD)
Curs 4
Proprietăți ale unei baze de date
relaționale
• O bază de date relațională
– poate fi accesată și modificată prin execuția
de instrucțiuni SQL (SQL=structured query
language – limbaj ANSI standard pentru baze
de date relaționale)
– conține o colecție de tabele (și alte tipuri de
obiecte)
– folosește un set de operatori
2
Comunicarea cu RDBMS folosind
SQL
SELECT *
FROM departments;
SERVER
3
Clasificarea instrucțiunilor
SQL
4
Schema
• O schemă este o mulţime de structuri
logice de date numite obiecte. Ea aparţine
unui utilizator al bazei de date şi poartă
numele său.
• Dacă un tabel nu aparține utilizatorului
(activ), pentru accesarea acestuia trebuie
prefixat numele tabelului cu numele
schemei proprietarului obiectului
5
Tipuri de date
Tip de date Descriere
VARCHAR2(size) Șiruri de caractere de lungime variabilă (trebuie specificată
dimensiunea maximă; dimensiunea minimă este 1, iar cea maximă
este 4000)
CHAR [(size)] Șiruri de caractere de lungime fixă de lungime egală cu size bytes
(Dimensiunea minimă și implicită este 1, iar dimensiunea maximă
este 2000)
6
Tipuri de date (2)
DATE Valori de dată calendaristică și timp cuprinse între
January 1, 4712 B.C. și December 31, 9999 A.D.
8
Dicționarul datelor
• Vederile și tabelele din dicționarul datelor conțin informații
despre:
– utilizatori și privilegiile acestora
– tabele, coloane și tipurile de date ale acestora
– privilegii acordate asupra obiectelor din baza de date
– etc.
11
Crearea unui tabel
• Crearea unui tabel constă în generarea
structurii sale, adică atribuirea unui nume
tabelului şi definirea caracteristicilor sale.
• Se face folosind instrucțiunea SQL
CREATE TABLE
• Necesită privilegiul CREATE TABLE și un
spațiu de stocare pentru acesta - ce
trebuie acordate de către administratorul
bazei de date
12
Crearea unui tabel prin
precizarea structurii
• Forma simplificată a instrucțiunii CREATE
TABLE:
CREATE TABLE [schema.]nume_tabel
(nume_coloana_1 tip_date [DEFAULT
expresie],
...
nume_coloana_n tip_date [DEFAULT
expresie] );
13
Exemplu
• Se creează un tabel cu numele angajati şi cu
structura cod, nume, salariu:
14
Crearea unui tabel prin preluarea
structurii de la o tabelă existentă
CREATE TABLE tabel_nou (nume_coloana_1,
nume_coloana_2, …, nume_coloană_n)
AS (SELECT nume_coloană_1,
nume_coloană_2, …, nume_coloană_n
FROM tabel_vechi WHERE conditie);
15
Exemplu
• se creează un tabel cu structura cod,
nume, salariu având câmpurile preluate
din tabelul emp:
CREATE TABLE ang (cod, nume, salariu)
AS SELECT empno, ename, sal
FROM emp;
16
Modificarea structurii unui
tabel
• se realizează cu ajutorul comenzii ALTER
TABLE care permite:
– adăugarea unei coloane la tabelul existent
– modificarea unei coloane existente-pot fi modificate
tipul de date, dimensiunea sau valoarea implicită
– ştergerea unei coloane.
– marcarea unor coloane nefolosite fără eliberarea
spațiului de memorie
– ștergerea coloanelor marcate ca nefolosite
– activare/ dezactivare constrangeri
17
Modificarea structurii unui
tabel
ALTER TABLE [schema.]nume_tabel
ADD | MODIFY ( nume_coloana_1 tip_de_date
[DEFAULT expresie],
..., nume_coloana_n tip_de_date [DEFAULT
expresie] )
| DROP (nume _coloana)[CASCADE
CONSTRAINTS]
| SET UNUSED (coloana)
| DROP UNUSED COLUMNS
| ENABLE|DISABLE CONSTRAINT constrangere;
18
Exemple
- să se modifice structura tabelului angajati, prin adăugarea coloanei meserie:
- să se modifice structura tabelului angajati, prin modificarea dimensiunii coloanei cod din
NUMBER(4) în NUMBER(5):
20
Ștergerea/refacerea tabelelor
Un tabel șters prin comanda DROP va fi mutat în
RECYCLEBIN- ul atașat fiecărei scheme.
Sintaxa:
FLASHBACK TABLE tabel TO BEFORE DROP;
21
Redenumirea tabelelor
• Redenumirea unui tabel presupune
modificarea numelui său. Această
operație poate fi realizată de proprietarul
tabelului (owner) sau de administratorul
bazei de date (DBA)
• Sintaxa:
RENAME nume_vechi_tabel
TO nume_nou_tabel;
• Exemplu:
RENAME stud TO studenti; 22
Trunchierea tabelelor
• Trunchierea unui tabel presupune ștergerea tuturor liniilor unui tabel
cu eliberarea spațiului de memorie ocupat.
• Operația de ștergere a liniilor tabelului este definitivă (nu poate fi
refăcută ștergerea)
• Această operație poate fi realizată de proprietarul tabelului (owner),
de un user care are privilegiul DROP ANY TABLE sau de
administratorul bazei de date (DBA)
• Sintaxa:
TRUNCATE TABLE nume_tabel;
• Exemplu:
TRUNCATE TABLE ang;
• Observație: ștergerea liniilor unui tabel poate fi realizată și cu ajutorul
instrucțiunii DELETE; spre deosebire de TRUNCATE TABLE,
DELETE nu eliberează spațiul de memorie ocupat și este o
instrucțiune mai lentă deoarece generează informații de refacere
23
(rollback).
Constrângeri
• O constrângere este un mecanism ce asigură faptul că
valorile unei coloane sau mulţimi de coloane satisfac o
anumită condiţie. Constrângerile implementează reguli la nivel
de tabel. Serverul Oracle utilizează constrângeri pentru a
preveni existenţa datelor invalide în tabele.
• Constrângerile sunt stocate în dicţionarul de date. Dacă
utilizatorul nu specifică un nume pentru constrângere,
serverul Oracle generează un nume de forma SYS_Cn, unde
n este un număr întreg ales astfel încât numele constrângerii
să fie unic. Constrângerile pot fi adăugate sau şterse, dar nu
pot fi modificate. Ele pot fi activate sau dezactivate în funcţie
de necesităţi.
• Constrângerile pot fi definite în momentul creeării tabelului
sau ulterior. În comanda de creare a tabelului, constrângerile
se pot specifica la nivel de coloană sau de tabel.
24
Constrângeri (2)
• Sintaxa instrucțiunii CREATE TABLE:
[CONSTRAINT nume_constrangere]
[NOT] NULL | UNIQUE | PRIMARY KEY | REFERENCES
[schema.]{nume_vedere | nume_tabel} [(nume_coloana)]
25
Constrângeri (3)
• Sintaxa clauzei constr_tabel din instrucțiunea CREATE
TABLE este următoarea:
[CONSTRAINT nume_constrangere]
{ UNIQUE (nume_coloana_1 [, nume_coloana_2]…)
| CHECK (conditie)
| PRIMARY KEY (nume_coloana_1 [,nume_coloana_2]…)
| FOREIGN KEY (nume_coloana_1 [,nume_coloana_2]…)
REFERENCES [schema.]{nume_vedere | nume_tabel}
[(nume_coloana_1 [, nume_coloana_2]…)] }
26
Constrângeri de domeniu
• Constrângerile de domeniu restrâng mulţimea
valorilor ce pot fi atribuite unei coloane. Ele pot fi
de tip CHECK, UNIQUE sau NOT NULL.
• Constrângerea CHECK poate fi definită la nivel
de coloană sau tabel şi defineşte o condiţie
booleană care trebuie satisfăcută de fiecare
linie.
• Constrângerea de tip NOT NULL poate fi
specificată numai la nivel de coloană şi asigură
ca valorile acestei coloane sunt diferite de null.
27
Constrângeri de domeniu
-exemple-
CREATE TABLE angajati (
cod NUMBER(4),
nume VARCHAR2(10) NOT NULL,
functie VARCHAR2(9),
cod_sef NUMBER(4),
data_ang DATE,
sal NUMBER(7,2) CONSTRAINT sal_chk CHECK
(sal BETWEEN 200 AND 20000),
com NUMBER(7,2),
cod_dept NUMBER(7,2) NOT NULL);
28
Constrângeri de domeniu
-exemple-
• Constrângerea UNIQUE poate fi definită la nivel de coloană sau tabel şi
specifică o coloană sau o combinaţie de coloane ale căror valori trebuie să
fie unice în raport cu toate liniile tabelului. Coloana sau mulţimea de coloane
inclusă în definiţia constrângerii UNIQUE se numeşte cheie unică.
30
Constrângerea de integritate a
entităţii (PRIMARY KEY)
• Această constrângere poate fi definită la nivel de coloană sau
tabel şi precizează cheia primară a tabelului. Cheia primară
este reprezentată de o coloană sau o mulţime de coloane
care identifică în mod unic o linie din tabel. O cheie primară
compusă poate fi definită doar la nivel de tabel.
• Constrângerea PRIMARY KEY impune unicitatea valorilor
coloanei sau combinaţiei de coloane şi asigură că nicio
coloană care face parte din cheia primară nu poate conţine
valoarea null.
• Un tabel poate avea o singură cheie primară, deci o singură
constrângere PRIMARY KEY, dar poate avea mai multe
constrângeri UNIQUE.
• Serverul Oracle creează în mod automat câte un index unic
pentru fiecare coloană a constrângerii PRIMARY KEY.
31
Constrângerea de integritate a
entităţii (PRIMARY KEY) - exemple
**se creează tabelul stud care are coloana nr_matricol cu atributul de cheie primară (cu
numele nr_matricol_pk) definită la nivel de coloană:
**se creează tabelul stud care are coloana nr_matricol cu atributul de cheie primară (cu
numele nr_matricol_pk) definită la nivel de tabel:
32
Constrângerea de integritate
referenţială (cheie străină)
• Această constrângere poate fi definită la nivel de
coloană sau tabel şi asigură coerenţa între cheile
primare şi cheile străine corespunzătoare.
• Constrângerea FOREIGN KEY desemnează o coloană
sau o combinaţie de coloane drept cheie străină
(externă) şi stabileşte relaţia cu o cheie primară sau o
cheie unică din acelaşi tabel sau din altul. O cheie
străină (externă) compusă poate fi definită doar la nivel
de tabel.
• Cheia externă se defineşte în tabelui „copil”, iar tabelul
care conţine coloana referită reprezintă tabelul „parinte”.
• Valoarea unei chei externe trebuie să fie egală cu o
valoare existentă în coloana cu care se face referirea din
tabelul „părinte” sau să fie null. 33
Constrângerea de integritate
referenţială- exemple
**se creează tabelul note care are coloana nr_matricol cu atributul de cheie
străină (cu numele nr_matricol_fk) definită la nivel de tabel:
**se creează tabelul note care are coloana nr_matricol cu atributul de cheie
străină (cu numele nr_matricol_fk) definită la nivel de coloana: