SQL db exam
1.
Componentele limbajului SQL2.
DML
– data manipulation language, implementation – select, insert, update, delete,
merge; consult, actualizare, stergerea obiectelor create de DDL precum tabele,
index, bazat pe algebra si calculul relational.
DDL
– data definition language, maintenance, physical design – create, alter, drop,
rename, truncate, comment; defineste, modifica, elimina schemele de relatii din
tabel; creare index, definirea viziunilor, specificarea constringerilor de
integritate.
DCL –
data control language, maintenance, implementation – grant, revoke; definirea
permiselor de acces.
Transition Control – commit, rollback, savepoint.
2.
Tipuri de date numerice în SQL2 şi Transact
SQL. Exemple.
Intregi:
INTEGER 4 octeti, SMALLINT 2 octeti;
zecimale: NUMERIC (m,d), DECIMAL(m,d); m – numar de cifre; d – cifre dupa
virgula;
numerice aproximative: REAL (7 cifre semnificative, precizie simpla), FLOAT
/ DOUBLE PRECISION (15 cifre semnificative).
Transaction control
statements manage changes made by DML statements. The
transaction control
statements are:COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.
3.
Tipuri de date secvenţe de caractere în SQL2
şi Transact SQL. Exemple.
CHAR(N), CHARACTER(N)
– secventa cu lungime fixa;
VARCHAR(N), CHAR
VARYING(N), CHARACTER VARYING(N) – secventa de lungime variabila cu cel mult N
caractere.
Transaction control
statements manage changes made by DML statements. The
transaction control
statements are:COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.
4.
Tipuri de date temporale în SQL2 şi Transact
SQL. Exemple.
DATE yyyy-mm-dd,
TIMESTAMP yyyy-mm-dd-hh-mm-ss-…, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL
TIME ZONE, HOUR hh-mm-ss. Transaction control statements manage changes made by
DML statements. The
transaction control
statements are:COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.
5.
Definirea schemei unei relaţii în SQL2.
Exemple.
În proiectarea
bazelor de date se definesc relaţii sau asocieri între mulţimile de entităţi
componente. O relaţie este o corespondenţă între entităţi din una sau mai
multe mulţimi de
entităţi.
CREATE TABLE
table_name
(
column_name1
data_type,
column_name2
data_type,
column_name3
data_type,
....
)
Relatii binare (două
relaţii implicate):
Relaţia „unul-la-unul” este cel mai simplu tip de relaţie. Ea este relaţia
prin care unui element din mulţimea E1 îi corespunde un singur element din
mulţimea E2 şi reciproc. Un exemplu ar fi împărţirea informaţiilor despre
studenţi în două entităţi: informaţiile personale fiind stocate în tabelul
StudPersonal şi informaţiile care se modifică de la an la an în tabela
Studenti. Pentru a realiza efectiv această relaţie trebuie introdus atributul
CodStud şi în tabela StudPersonal. Astfel cele două se transformă astfel:
• Studenti cu atributele: CodStud, An, Grupa, Media, Bursa
• StudPersonal cu atributele: CodStud, CNP,
Nume, Init, Prenume, Data Nasterii, Loc Naşterii, Tata, Mama, Adresa
Relaţia „unul-la-multe” este o relaţie prin care unui element din mulţimea E1
îi corespund unul sau mai multe elemente din mulţimea E2, dar unui element din
mulţimea E2 îi corespunde un singur element din mulţimea E1. Un exemplu este că
într-o facultate sunt mai mulţi studenţi,
şi se precizează că un student aparţine unei singure facultăţi din cadrul
aceleiaşi universităţi. Trebuie introdus atributul CodFac şi în tabela
Studenti. Astfel cele două se transformă astfel:
• Facultate cu atributele: CodFac, Denumire,
Adresa, Nume Decan
• Studenti cu atributele: CodStud, CodFac, An, Grupa, Media, Bursa
Relaţia „multe-la-multe” este o relaţie prin care unui element din mulţimea E1
îi corespund unul sau mai multe elemente din mulţimea E2, şi reciproc. De fapt,
pentru modelarea acestei relaţii se foloseşte o relaţie suplimentară, de tip
unul-la-multe pentru fiecare din relaţiile iniţiale. Exemplu: un student
participă la mai multe materii, cursuri, iar o materie este frecventată de mai
mulţi studenţi. S-a introdus o tabelă suplimetară numită Note, care va face
legătura între tabelele Materii şi Studenţi. Tabelele iniţiale se modifică
astfel:
• Studenti cu atributele: CodStud, CodFac, An,
Grupa, Media, Bursa
• Materii cu atributele: CodMaterie, Denumire,
An, Nume Profesor
• Note cu atributele: CodStud, CodMaterie,
Nota, Data
Prin introducerea atributului Data în tabela
Note s-a soluţionat problema care apare atunci când un student trebuie să fie
examinat de mai multe ori până la promovarea materiei respective.
Relaţiile unare folosesc doar o singură relaţie, aceasta
fiind asociată cu ea însăşi. Exemplul clasic al acestei relaţii unare este
cazul managerului unei companii, care la rândul său este tot un angajat al
acelei companii. Relaţiile unare se modelează la fel ca şi relaţiile binare.
6.
Constrângeri de comportament în SQL2. Exemple.
Constringerea
comportamentala CHECK este o conditie care defineste informatia valida la
introducerea informatiilor in tabel. Constringerea de verificare se aplica
pentrufiecare linie de tabel. Constringerea trebuie sa fie un predicat. Se
poate referi la o coloana sau mai multe coloane din tabel. Rezultatul
predicatului poate fi TRUE, FALSE, sau UNKNOWN, in dependenta de prezenta lui
NULL. Daca rezultatul e UNKNOWN, atunci constringerea nu este violata si linia
poate fi introdusa in tabel. Aceasta este inversul predicatelor in WHERE in
SELECT sau UPDATE. De exemplu in tabelul cu produse putem adauga o constringere
la pretul produsului si la cantitatea sa ca ele sa nu fie negative: PRICE >=
0; QUANTITY >= 0. Constringerile CHECK sunt folosite pentru a asigura
validitatea informatiilor in baza de date si integritatea sa. Fiecare astfel de
constringere trebuie sa fie definita in declaratiile CREATE TABLE sau ALTER
TABLE cu sintaxa: CREATE TABLE table_name (...,CONSTRAINT constraint_name CHECK
(predicate),...)
ALTER TABLE
table_name ADD CONSTRAINT constraint_name CHECK (predicate)
Daca constringerea se
refera la o singura coloana se poate de specificat constringerea ca parte din
definitia coloanei:
CREATE TABLE table_name
(...column_name type CHECK (predicate),...)
Constringerea NOT
NULL este echivalenta cu contringerea CHECK cu un predicat IS NOT NULL: CHECK
(column IS NOT NULL).
7.
Constrângeri structurale în SQL2. Exemple.
Leaga obiectele din
baza de date si reflecta structura BD. Valori necunoscute – un atribut poate
sau nu admite valori necunoscute (se specifica folosind (NOT) NULL). Cheie
primara – garanteaza unicitatea, minimalitatea, obliga multimea de atribute sa
fie cheie primara. Aceasta se sorteaza si se scrie odata in tabel: primary key.
Integritatea referentiala – garanteaza existenta cheii externe: references,
foreign key. Cheie secundara – unicitatea atributelor astfel declarate UNIQUE
aditional NOT NULL. Cheile INDEX fac ca sistemul sa accelereze accesul la
aceste date prin pointeri.
8.
Modificarea şi suprimarea schemei relaţionale
în SQL2. Exemple.
ALTER TABLE nume
tabel
ADD (nume coloana tip
data) / DROP COLUMN nume coloana
DROP TABLE –
suprimarea tabelului
9.
Cele mai simple interogări (numai cu
proiecţia) în SQL2. Exemple.
Interogare este o
operatie prin care se obtin datele dorite dintr-o baza de date selectate
conform unui anumit criteriu (conditie). Proiectia – operatie relationala unara
prin care se selecteaza o submultime de atribute ale relatiei. SELECT –
consulta o relatie sau mai multe. Select * from tabel.
10.
Interogări cu criterii de selecţie în SQL2.
Exemple.
Comparatie, not null,
is, exists, case
SELECT DISTINCT /
all…
SELECT * FROM Persons
WHERE City='Sandnes'
11.
Interogări cu funcţii de agregare în SQL2.
Exemple.
Funcțiile de agregare
revin cu o singură linie de rezultate bazate pe grupuri de linii. Funcțiile de
agregare de obicei sunt folosite cu clauza GROUP BY într-o declarație SELECT
unde Oracle Database divide în grupuri liniile tabelului sau viziunii
interogate. Citeva exemple:
AVG – revine cu
valoarea medie a unei expresii; primește ca argument orice tip numeric sau non
numeric care poate fi convertit în tip numeric;
COUNT – revine cu
numărul de linii după o interogare;
MIN – revine cu
valoarea minimă a unei expresii;
MAX – revine cu
valoarea minimă a unei expresii;
SUM – revine cu suma
valorilor din expresie; primește ca argument orice tip numeric sau non numeric
care poate fi convertit în tip numeric;
COLLECT – are ca
argument o coloană de orice tip și creează un tabel imbricat din liniile
selectate de tipul datele de intrare.
12.
Interogări cu agregarea tuplurilor în SQL2.
Exemple.
Adesea se urmăreşte
studiul tuplurilor unei relaţii în grupuri, constituite ţinând seama de
valoarea unora din atribute, iar agregarea se face numai în interiorul fiecărui grup.
Clauza GROUP BY este
folosită în conjuncție cu funcțiile agregate pentru a grupa setul de rezultate
după una sau mai multe coloane. Sintaxa pentru utilizarea acestei clauze: SELECT
column1, column2, ... column_n, aggregate_function (expresie) FROM tables WHERE
predicates GROUP BY column1, column2, ... column_n;
Oracle aplică
funcțiile de agregare pentru fiecare grup de linii și revine cu o linie de
rezultat pentru fiecare astfel de grup.
13.
Interogări de actualizare (inserare şi
ştergere) a datelor în SQL2. Exemple.
Insert into –
introduce o noua linie in tabel
INSERT INTO
table_name (column1, column2, column3,...)
VALUES (value1,
value2, value3,...)
Delete – sterge linii
din tabel
DELETE FROM
table_name
WHERE
some_column=some_value;
ALTER TABLE nume
tabel
ADD (nume coloana tip
data) / DROP COLUMN nume coloana;
DROP TABLE –
suprimarea tabelului
14.
Interogări de actualizare (modificare) a
datelor în SQL2. Exemple.
Actualizarea
inregistrarilor existente
UPDATE table_name
SET column1=value,
column2=value2,...
WHERE
some_column=some_value
15.
Interogări cu uniuni în SQL2. Exemple.
Operatorul UNION este
folosit pentru a combina setul de rezultate a 2 sau mai multe SELECT. Fiecare
declaratie SELECT in UNION trebuie sa aiba acelasi numar de coloane. Coloanele
trebuie s aiba tipuri de date similare. Coloanele trebuie sa fie ordonate la
fel. SELECT
column_name(s) FROM table_name1
UNION
SELECT column_name(s)
FROM table_name2
Operatorul UNION selecteaza
doar valori distincte implicit. Pentru a permite duplicatele se foloseste UNION
ALL.
16.
Interogări cu intersecţii în SQL2. Exemple.
Combina rezultatele
liniilor comune din ambele interogari de SELECT.
SELECT product_id
FROM inventories
INTERSECT
SELECT product_id
FROM order_items;
17.
Interogări cu diferenţe în SQL2. Exemple.
Combina liniile unice
revenite dupa primul SELECT nu si de al doilea.
SELECT product_id
FROM inventories
MINUS
SELECT product_id
FROM order_items;
18.
Interogări cu joncţiuni în SQL2. Exemple.
Jonctiune / NATURAL
JOIN – interogare care combina linii din 2 sau mai multe tabele, viziuni sau
viziuni materializate. Oracle Database face jonctiuni de fiecare data mai multe
denumiri de tabele apar in clauza FROM. Lista de selectari a interogarii poate
selecta orice coloane din aceste tabele. Daca oricare 2 coloane selectate au
denumiri comune atunci trebuie de atribuit referinte la tabelele respective
pentru a evita ambiguitatea. Majoritatea interogarilor cu jonctiuni contin
conditii de jonctiune in FROM sau in WHERE. Conditia compara 2 coloane din
diferite tabele. Daca se combina perechi de linii fiecare continind o linie din
un tabel si alta din alt tabel si se evalueaza TRUE atunci se execute
jonctiunea.
CROSS JOIN – Oracle
combina fiecare linie din tabel cu fiecare linie din alt tabel. Produsul
cartezian intotodeauna genereaza un numar mare de linii si este rar folositor.
INNER JOIN – simple
join este o jonctiune a 2 sau mai multe tabele care revine doar cu liniile care
satisfac conditia de joinctiune.
OUTER JOIN – revine
cu toate liniile care satisfac conditia de jonctiune sideasemenea cu citeva sau
toate liniile dintr-un tabel pentru care conditia nu e satisfacuta.
JOIN (autojonctiunea)
– numele tabelului apare de 2 ori in FROM si e urmat de aliasuri la tabele care
califica numele coloanelor in conditia de JOIN. Revine cu liniile care satisfac
conditia de JOIN.
EQUIJOIN – jonctiune
c contine in conditie operatorul de egalitate. Combina 2 linii care au valori
egale in anumite coloane.
LEFT JOIN – revine cu
toate liniile din tabelul sting chiar daca nu coincid cu cele din tabelul din dreapta.
RIGHT JOIN – revine
cu toate liniile din tabelul drept char daca ele nu coincid cu cele din tabelul
sting. Return all rows from the right table, even if there are no matches in
the left table
FULL JOIN – revine cu
liniile care nu coincid in unul din tabele.
19.
Interogări imbricate cu ALL în SQL2. Exemple.
Operatorul ALL
compara o valoare cu fiecare valoare revenita dupa o subinterogare. >ALL –
mai mare decit maximum; ’it prog’;
20.
Interogări imbricate cu ANY în SQL2. Exemple.
Sinonim al lui SOME –
compara o valoarea cu fiecare dintre valorile returnate de subinterogare.
Functionarii care nu activeaza ca prog it si al caror salariu e mai mic decit
cel putin al unui prog it. any – mai mult
decit minim; =any – echivalent cu IN. Select employee id, name, jobid, salary
from employees where salary’prog it’;
21.
Interogări imbricate cu EXISTS în SQL2. Exemple.
Operator folosit
pentru a testa daca o valoare obtinuta de interogarea externa exista in setul
de valori extrase de interogarea interioara. Daca se extrage cel putin o
intregistrare -> true, daca nu False. Daca o valoare este gasita in
subinteroagre cautarea in interogarea imbricata nu continua. Se evalueaza true.
Date referitoare la angajatii cu cel putin un subaltern: select employeeid,
lastname, departmentid from emloyees outer where exists (select ‚x’ from
employees where managerid=outer.employeeid);
22.
Interogări imbricate cu IN în SQL2. Exemple.
Este o conditie de
comunitate. Testeaza valoarea membrilor intr-o lista de valori sau
subinterogare. IN – egal cu oricare membru testat. Este echivalent cu =ANY. SELECT
* FROM employees
WHERE job_id IN
('PU_CLERK','SH_CLERK');
SELECT * FROM
employees
WHERE salary IN
(SELECT salary
FROM employees
WHERE department_id =30);
NOT IN – echivalent
cu !=ALL. Evalueaza FASE daca oricare membru din set e NULL. SELECT * FROM
employees
WHERE salary NOT IN
(SELECT
salary
FROM employees
WHERE department_id = 30);
SELECT * FROM
employees
WHERE job_id NOT IN
('PU_CLERK', 'SH_CLERK');
23.
Interogări imbricate cu „=” în SQL2. Exemple.
=any – echivalent cu
IN. >=all; urmatoarele sunt echivalente:
select Dept
from Angajati
where Salariu = any
(select max(Salariu)
from Angajati
sau
select Deptfrom Angajat
where Salariu >= all (select Salariu
from Angajati)
24.
Definirea utilizatorilor şi accesului la baza
de date în SQL2. Exemple.
Utilizeaza
instructiunea CREATE USER pentru a crea si configura un utilizator a bazei de
date care este un cont cu care poti sa intri in baza de date si sa stabilesti
metodele prin care Oracle permite accesul utilizatorului. Trebuie sa ai
sistemul de privilegii pentru crearea utilizatorului. Cind se creeaza un
utilizator cu CREATE USER privilegiile utilizatorilor sunt goale. Pentru a
intra in baza de date utilizatorul trebuie sa aiba sistemul de privilegii
CREATE SESSION. Deci, dupa crearea utilizatorului trebuie sa-i oferim cel putin
sistemul de privilegii CREATE SESSION.
CREATE USER sidney
IDENTIFIED BY out_standing1
DEFAULT TABLESPACE example
QUOTA 10M ON example
TEMPORARY TABLESPACE temp
QUOTA 5M ON system
PROFILE app_user
PASSWORD EXPIRE;
INDENTIFIED BY
Password – db user
Externally – external
user, acest utilizator poate fi autentificat de un serviciu extern ca sistem de
operare, sau orice altceva terta.
Globally – glabal
user, trebuie sa fie autorizat de directorul intreprinderii acestui serviciu (Oracle
Internet Directory).
CREATE USER
global_user
IDENTIFIED GLOBALLY AS 'CN=analyst,
OU=division1, O=oracle, C=US'
DEFAULT TABLESPACE example
QUOTA 5M ON example;
Pentru a oferi cuiva
privilegii trebuie sa ai privilegii ADMIN OPTION sau sa ai privilegiul GRANT
ANY PRIVILEGE . Daca oferi unui utilizator privilegiu atunci baza de date
adauga acest privilegiu si utilizatorul poate imediat sa se foloseasca de ele.
Pentru a oferi utilizatorului hr privilegiul CREATE SESSION pentru a intra in
baza de date se emite urmatoarea instructiune: GRANT CREATE SESSION TO hr;
25.
Definirea permiselor asupra relaţiilor în
SQL2. Exemple.
Privilegii: select,
insert, delete, update, references, index, resources, alter drop. GRANT
ON TO
GRANT
CREATE ANY MATERIALIZED VIEW
, ALTER ANY MATERIALIZED VIEW
, DROP ANY MATERIALIZED VIEW
, QUERY REWRITE
, GLOBAL QUERY REWRITE
TO dw_manager
WITH ADMIN OPTION;
GRANT SELECT ON
sh.sales TO warehouse_user;
GRANT warehouse_user
TO dw_manager;
GRANT ALL ON bonuses
TO hr
WITH GRANT OPTION;
26.
Definirea sinonimilor în SQL2. Exemple.
Foloseste
instructiunea CREATE SYNONYM pentru a crea un sinonim care este un nume
alternativ pentru un tabel, viziune, secventa, procedura, functie stocata,
pachet, viziune materializata, clasa JAVA de scheme de obiecte, obiecte
definite de utilizator, sau orice alt sinonim. Sinonimele ofera independenta si
transparenta de locatie. Ele premit aplicatiile sa functioneze fara modificari
indiferent de carui utilizator apartine tabelul sau viziunea si indeferent
caree bd apartine tabelul sau viziunea. Dar sinonimele nu inlocuiesc
privilegiile asupra obiectele bd. Privilegiile respective trebuie oferite unui
utilizator inainte ca acesta sa utilizeze sinonimele. Putem sa ne referim la
sinonime in urmatoarele instructiuni DML: SELECT, INSERT, UPDATE, DELETE,
FLASHBACK TABLE, EXPLAIN PLAN, si LOCK TABLE. Putem sa ne referim la sinonime
in urmatoarele instructiuni DDL: AUDIT, NOAUDIT, GRANT, REVOKE, si COMMENT. CREATE
SYNONYM nume FOR obiect; DROP SYNONYM nume; specificam PUBLIC pentru a crea
sinonim public accesibil tuturor utilizatorilor. Dar fiecare utilizator trebuie
sa aiba privilegiile respective de utilizare a obiectului respectiv asupra
caruia se face sinonimul.
27.
Blocarea relaţiilor şi gestiunea tranzacţiilor
în SQL2. Exemple.
Foloseste LOCK TABLE pentru
a bloca unul sau mai multe tabele, partitii, sau subpartitii de tabel intr-un
mod specificat. Aceasta blocare oermite sau respinge accestul la un tabel sau
viziune altor utilizatori atita timp cit se executa o operatiune. Unele forme
de blocare pot fi plasate pe acelasi tabel. Altele permit doar un fel de
blocare pentru un tabel. Un tabel blocat ramine astfel pina cind asupra
tranzactiei nu a fost efectuat COMMIT sau ROLLBACK total sau la un SAVEPOINT. O
blocare niciodata nu impiedica alti utilizatori sa interogheze tabelul. O
interogare niciodata nu bloccheaza tabelului. Cititorii nu blocheaza scriitorii
si invers. Tabelul sau viziunea trebuie sa fie schema ta sau tu trebuie sa ai
privilegiul LOCK ANY TABLE, sau privilegiu asupra obiectului respectiv.
Instructiunile
urmatoare blocheaza tabelul employees in modul exclusive dar nu asteapta daca
alt utilizator deja l-a blocat:
LOCK TABLE employees
IN EXCLUSIVE MODE
NOWAIT;
Blocheaza tabelul
employees care e accesibil prin legatura la bd de la distanta:
LOCK TABLE
employees@remote
IN SHARE MODE;
SHARE permite
interogari dar interzice actualizari asupra tabelului blocat. EXCLUSIVE permite
interogari dar interzice orice alta actiune asupra tabelului blocat.
Tranzactiile
administreaza schimbarile facute de instructiunile DML. Instructiunile
tranzactiilor sunt: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION. Foloseste SET
TRANSACTION pentru a stabili tranzactia curenta ca read-only
sau read/write, sau a
stabili nivelul de izolare, sau pentru a o atribui unui segment rollback
specific. Operatiunile executate de instructiunea SET TRANSACTION afecteaza
doar tranzactia curenta nu si pe alti utilizatori sau tranazactii. Tranzactia
se sfirseste cint se emite instructiunea COMMIT sau ROLLBACK. Urmatoarele pot
fi executate noaptea fiecarei utime zile din fiecare luna pentru a numara
produsele si cantitatile prezente in depozitul din Toronto. Acest raport nu va
fi afectat de orice alt utilizator care ar putea adauga sau exclude ceva din
inventar la un alt depozit.
COMMIT;
SET TRANSACTION READ
ONLY NAME 'Toronto';
SELECT product_id,
quantity_on_hand FROM inventories
WHERE warehouse_id = 5
ORDER BY product_id;
COMMIT;
Primul COMMIT asigura
ca SET TRANSACTION este prima instuctiune in tranzactie. Ultimul COMMIT nu face
permanente schimbarile in bd. Doar termina tranzatia read-only. Utilizeaza
ROLLBACK pentru a anula lucrul facut in tranzactia curenta sau pentru a anula
manual lucrul facut de o tranzactie dubioasa distribuita FORCE TRANSACTION.
Foloseste SAVEPOINT pentru a identifica punctul unei tranzactii spre care vrei
mai tirziu sa faci roll back.
Pentru a actualiza
salatiul lui Banda si Greene in tabelul hr.employees, verifica ca salariul
total al departamentului sa nu treaca de 314,000, apoi introduce salariul
pentru Greene:
UPDATE employees
SET salary = 7000
WHERE last_name = 'Banda';
SAVEPOINT banda_sal;
UPDATE employees
SET salary = 12000
WHERE last_name = 'Greene';
SAVEPOINT greene_sal;
SELECT SUM(salary)
FROM employees;
ROLLBACK TO SAVEPOINT
banda_sal;
UPDATE employees
SET salary = 11000
WHERE last_name = 'Greene';
COMMIT;
28.
Definirea viziunilor în SQL2. Exemple.
Foloseste CREATE VIEW
pentru a defini o viziune care este un tabel logic bazat pe unul sau mai multe
tabele sau viziuni. O viziune in sine nu contine informatii. Tabelele asupra
carora este creata viziunea sunt numite tabele de baza. Poti crea o viziune de
obiect sau o viziune relationala care accepta LOB, tipuri de obiecte, tipuri
REF, tabel imbricat. O viziune de obiect este o viziune de un tip creat de
utilizator unde fiecare linie contine obiecte, fiecare obiect are un
identificator unic de modificare a obiectului. Crearea unei viziuni asupra
tabelului employees numita emp_view. Aceasta arata angajatii in departamentul
20 si salariul lor anual:
CREATE VIEW emp_view
AS
SELECT last_name, salary*12 annual_salary
FROM employees
WHERE department_id = 20;
Crearea unei viziuni
de restrictionare a tabelului employees si definirea unei constringeri unice
asupra viziunii coloanei email si o constringere a cheii primare pentru
viziunea viziunii coloanei emp_id:
CREATE VIEW emp_sal
(emp_id, last_name,
email UNIQUE RELY DISABLE NOVALIDATE,
CONSTRAINT id_pk PRIMARY KEY (emp_id) RELY
DISABLE NOVALIDATE)
AS SELECT employee_id, last_name, email FROM
employees;
29.
Definirea indecşilor în SQL2. Exemple.
Index – schema
obiectului care contine o inregistrare pentru fiecare valoare care apare in
coloana indexata a tabelului sau clusterului si ofera acees direct si rapid la
linii. Oracle Database are citeva tipuri de indexuri: normal, bitmap,
partitionati, funcții, domain.
Arata cum indexul ord_customer_ix
asupra coloanei customer_id a tabelului oe.orders a fost creat:
CREATE INDEX
ord_customer_ix
ON orders (customer_id);
30.
Definirea constrângerilor şi aserţiunilor în
SQL2. Exemple.
Foloseste constraint pentru
a defini o constringere de integritate – regula care pune restrictii asupra
valoriloe unei bd. Oracle Database permite createa a 6 tipuri de constringeri:
A NOT NULL constraint
prohibits a database value from being null.
■ A unique constraint
prohibits multiple rows from having the same value in the
same column or
combination of columns but allows some values to be null.
■ A primary key
constraint combines a NOT NULL constraint and a unique
constraint in a
single declaration. That is, it prohibits multiple rows from having
the same value in the
same column or combination of columns and prohibits
values from being
null.
■ A foreign key
constraint requires values in one table to match values in another
table.
■ A check constraint
requires a value in the database to comply with a specified
condition.
■ A REF column by
definition references an object in another object type or in a
relational table. A
REF constraint lets you further describe the relationship
between the REF column
and the object it references.
si declararea lor
poate fi efectuata in 2 feluri:
Ca parte din
definitia unei coloane sau atribut. Aceasta se numeste specificatie inline.Ca
parte din definita tabelului. Se numeste specificatie out-of-line.
The following
statement is a variation of the statement that created the sample table
sh.promotions. It defines inline and implicitly enables a
unique key on the
promo_id column (other constraints are not shown):
CREATE TABLE
promotions_var1
( promo_id NUMBER(6)
CONSTRAINT
promo_id_u UNIQUE
, promo_name VARCHAR2(20)
, promo_category VARCHAR2(15)
, promo_cost NUMBER(10,2)
, promo_begin_date DATE
, promo_end_date DATE
) ;
Asertiune –
constringere de integritate care se refera la mai multe elemente din mai multe
tabele. CREATE ASSERTION richmgr CHECK
NOT EXISTS (SELECT * FROM department, employees where
employee.name=department.mgrname ADD employee.salary<50000 dar="dar" font="font" in="in" nu="nu" oracle="oracle" standart.="standart." sunt="sunt"> 50000>