Sunteți pe pagina 1din 7

Laborator 1

Baze de date anul II


I. Introducere:
BD (baza de date): este o colecie organizat de informaii (stocat ntr-un ansambul de
fiiere).
SGBD (sistemul de gestiune a bazelor de date) este un pachet de programe care
efectueaz la cerere operaii de stocare, tergere, modificare i regsire a informaiilor din
BD.
SQL (Structurated Query Language) limbaj neprocedural pentru interogarea i
prelucrarea informaiilor din BD.
Compilatorul limbajului SQL genereaz automat o procedur care acceseaz baza
de date i execut comanda dorit.
SQL permite att definirea, prelucrarea i interogarea datelor, ct i controlul
accesului la acestea. Comenzile SQL pot fi integrate n programe scrise n alte limbaje, de
exemplu Cobol, C, C++, Java etc.
SQL *Plus este un utilitar Oracle, avnd comenzi proprii specifice, care recunoate
comenzile SQL i trimite aceste comenzi serverul-ul Oracle pentru execuie.
Comenzile Sql*Plus nu permit manipularea datelor din BD.
Caracterul de terminare a unei comenzi Sql este ;. Comenzile specifice
Sql*Plus nu necesit caracter de terminare a unei comenzi.
Caracterul de continuare pe alt linie pentru comenzile Sql*Plus este -.
Comenzile Sql nu au un caracter de continuare.
Comenzile Sql*Plus nu sunt depuse n buffer-ul Sql. Ultima cerere SQL lansat de
ctre client este pstrat n buffer-ul SQL. Pentru rularea coninutului buffer-ului, se d
comanda:
SQL> / sau
SQL> RUN

Comenzile Sql*Plus spre deosebire de comenzile Sql pot fi prescurtate.


Dintre funcionalitile mediului SQL*Plus, se pot enumera:
editarea, executarea, salvarea si regsirea instruciunilor SQL si a blocurilor
PL/SQL;
calculul, stocarea i afiarea rezultatelor furnizate de cereri;
listarea structurii tabelelor;
accesarea i copierea de informaii dintr-o baz de date n alta;
administrarea bazei de date.

Exemple: DESCRIBE (abreviere DESC) nume_obiect: listeaz atributele tabelelor sau


ale altor obiecte.
SET LINE n: stabilete dimensiunea paginii
SET PAGES[IZE] n: stabilete numrul de linii afiat pe o pagin
SET SPACE n: stabilete numrul de spaii dintre coloane
SET COLSEP x : separatorul dintre coloane va fi x
SAVE path\nume.sql: salveaz coninutul buffer-ului (ultima comanda SQL) n
fiierul specificat. Nu este obligatorie precizarea extensiei sql.
START path\nume.sql (sau @ path\nume.sql): execut comenzile din fiierul
specificat
EDIT path\nume.sql: deschide un editor de texte pentru modificarea scriptului
nume.sql. Dac lipsete numele fiierului se editeaz ultima comanda din buffer.
Comenzi Sql
n funcie de tipul aciunii pe care o realizeaz, instruciunile SQL se mpart n mai
multe categorii. Datorit importanei pe care o au comenzile componente, unele dintre
aceste categorii sunt evideniate ca limbaje n cadrul SQL, i anume:
limbajul de definire a datelor (LDD) comenzile CREATE, ALTER, DROP;
limbajul de prelucrare a datelor (LMD) comenzile INSERT, UPDATE,
DELETE, SELECT;
limbajul de control al datelor (LCD) comenzile COMMIT, ROLLBACK.
Pe lng comenzile care alctuiesc aceste limbaje, SQL cuprinde:
instruciuni pentru controlul sesiunii;
instruciuni pentru controlul sistemului;
instruciuni SQL ncapsulate.
Comanda SELECT
SELECT { [ {DISTINCT | UNIQUE} | ALL] lista_campuri | *}
FROM [nume_schem.]nume_obiect ]
[, [nume_schem.]nume_obiect ]
[WHERE condiie_clauza_where]
[START WITH condiie _clauza_start_with
CONNECT BY condiie _clauza_connect_by]
[GROUP BY expresie [, expresie ]
[HAVING condiie _clauza_having] ]
[ORDER BY {expresie | poziie} [, { expresie | poziie } ] ]
[FOR UPDATE
[OF [ [nume_schem.]nume_obiect.]nume_coloan
[, [ [nume_schem.]nume_obiect.]nume_coloan] ]
[NOWAIT | WAIT numr_ntreg] ];

Un element din lista_campuri are forma: expresie [AS] alias. Elementele listei
sunt separate prin virgul. Dac alias conine blank-uri sau dac ncepe cu o cifr atunci

trebuie inclus obligatoriu ntre ghilimele. Alias-ul apare n rezultat, ca i cap de coloan
pentru expresia respectiv. Doar antetele specificate ntre ghilimele sunt case-sensitive,
celelalte fiind scrise implicit cu majuscule.
Dac lista_campuri este nlocuit de * atunci se vor lista n ntregime
coninuturile obiectelor specificate de clauza FROM.
DISTINCT (UNIQUE) elimin din rezultat liniile duplicat.
n clauza ORDER BY, precizarea criteriului de ordonare se poate realiza i prin
indicarea alias-urilor coloanelor sau a poziiilor acestora n clauza SELECT.
Exemplu: Se vor afia angajaii cu prenumele James n ordinea descresctoare a
salariului.
SELECT first_name AS nume,salary
FROM employees
WHERE first_name = 'James'
ORDER BY salary DESC
Date calendaristice i iruri de caractere
irurile de caractere se includ ntre . Concatenarea irurilor de caractere se face
folosindu-se operatorul ||. Pentru compararea sirurilor de caractere, mpreun cu
operatorul LIKE se utilizeaz caracterele wildcard:
% - reprezentnd orice sir de caractere, inclusiv sirul vid;
_ (underscore) reprezentnd un singur caracter si numai unul.
Funciile UPPER(sir), LOWER(sir) convertesc irul astfel nct acesta s fie scris
cu majuscule respectiv minuscule.
Funciile utilizate pentru formatarea datei sunt TO_DATE(data,format),
TO_CHAR(data,format) unde formatul, inclus ntre , poate fi alctuit dintr-o combinaie
a urmtoarelor elemente separate de caracterul -:

.
Exemple:1.Expresia urmtoare este adevrat pentru prenumele care conin irul am
ncepnd cu a doua liter.
first_name LIKE _am%
2.Se selecteaz data angajrii n formatul yy-ll-aa
SELECT to_char(hire_date,'dd-mm-yy')
FROM employees

II Exerciii
1. a) Consultai diagrama exemplu HR (Human Resources) pentru lucrul n cadrul
laboratoarelor SQL.
b) Identificai cheile primare si cele externe ale tabelelor existente n schem, precum i
tipul relaiilor dintre aceste tabele.
2. S se iniieze o sesiune SQL*Plus folosind user ID-ul si parola indicate.
3. S se listeze structura tabelelor din schema HR (EMPLOYEES, DEPARTMENTS,
JOBS, JOB_HISTORY, LOCATIONS, COUNTRIES, REGIONS), observnd tipurile de
date ale coloanelor.
DESC[RIBE] employees
4. S se listeze coninutul tabelelor din schema considerat, afind valorile tuturor
cmpurilor.

SELECT * FROM employees;


5. Utiliznd comenzi Sql*Plus s se formateze rezultatul.
SET LINE 200
6. S se obin nc o dat rezultatul cererii precedente (exe 4.), fr a rescrie cererea.
7. Listai structura tabelului EMPLOYEES i apoi dai comanda RUN (sau /). Ce
observai? Comenzile SQL*Plus sunt pstrate n buffer?
8. S se afieze codul angajatului, numele, codul job-ului, data angajrii. Salvai
instruciunea SQL ntr-un fisier prob8_l1.sql. (comanda SAVE)
SELECT employee_id, last_name, job_id, hire_date
FROM employees;
9. a) Executai cererea din fiierul prob8_l1.sql. (comanda START)
b) Editai fiierul prob8_l1.sql, astfel nct, la rulare, capetele coloanelor s aib numele
cod, Nume, cod job, data angajarii. (comanda EDIT)
SELECT employee_id cod, last_name Nume, job_id AS cod job, hire_date AS
data angajarii
FROM employees;
10. S se listeze, cu si fr duplicate, codurile job-urilor din tabelul EMPLOYEES.
SELECT job_id FROM employees;
SELECT DISTINCT job_id FROM employees;
11. S se afieze numele complet concatenat cu job_id-ul, separate prin virgul i spaiu,
i etichetai coloana Angajat i titlu.
SELECT last_name|| , || first_name || , || job_id Angajat si titlu
FROM employees;
12. Creai o cerere prin care s se afieze toate datele din tabelul EMPLOYEES.
Separai fiecare coloan printr-o virgul. Etichetati coloana Informatii complete.
13. a) S se listeze numele i salariul angajailor care ctig mai mult de 5000 $.
SELECT last_name, salary
FROM employees
WHERE salary > 5000;
b) S se listeze numele i salariul pentru toi angajaii al cror salariu nu se afl n
intervalul 7000-17000$. Ordonai dup salariu.
Indicaie:Se va folosi operatorul BETWEEN: [NOT] BETWEEN valoare1 AND
valoare2.

SELECT last_name, salary

FROM employees
WHERE salary NOT BETWEEN 7000 AND 17000;
14. S se afieze numele i datele de contact pentru angajatul cu prenumele Steven.
SELECT first_name,last_name,email,phone_number
FROM employees
WHERE first_name = Steven;
15. S se afieze numele,data angajrii i job-id pentru persoanele care au fost angajate n
perioada '07-JUN-1994' and '01-JAN-1997'. S se ordoneze dupa data angajrii
descresctor. Pentru salariaii angajai n aceeai zi ordonarea se va face alfabetic dupa
nume.
Indicaie: Implicit se ordoneaza ASC. Ordonarea descendent presupune utilizarea lui
DESC.
SELECT last_name, hire_date, job_id
FROM employees
WHERE hire_date BETWEEN '07-JUN-1994' AND '01-JAN-1997'
ORDER BY hire_date DESC, last_name;
16. S se obin n doua moduri salariaii care lucreaz n departamentele 10,20.
Indicaie: Se va folosi operatorul IN: expresie IN (valoare_1, valoare_2, ,
valoare_n). Pentru a obine a doua soluie se va folosi operatorul OR.
SELECT last_name || || first_name, department_id
FROM employees
WHERE department_id IN (10,20);
SELECT last_name || || first_name, department_id
FROM employees
WHERE department_id = 10 OR department_id = 20;
17. S se listeze numele i salariile angajatilor care cstig mai mult de 1500 $ i lucreaz
n departamentul 10 sau 30. Se vor eticheta coloanele drept Angajat si Salariu lunar.
Indicaie: Se vor folosi operatorii logigi AND, OR.
SELECT last_name || || first_name, department_id
FROM employees
WHERE salary > 1500 AND (department_id = 10 OR department_id = 30);
18. S se afieze numele i data angajrii pentru fiecare salariat care a fost angajat n
1987. Se cer 2 soluii: una n care se lucreaz cu formatul implicit al datei si alta prin care
se formateaz data.
SELECT first_name, last_name, hire_date
FROM employees
WHERE hire_date LIKE ('%87%');

SELECT first_name, last_name, hire_date


FROM employees
WHERE TO_CHAR(hire_date,yyyy) = 1987;
19. S se afieze numele, salariu + salariul * comisionul (venitul), venitul dupa ce sa
aplic un impozit de 1% (venit net). pentru toi salariaii care cstig comisioane. Care
este rezultatul unei expresii dac unul dintre operanzi este NULL? Ordonai dupa
comision dup eliminarea clauzei WHERE. Unde sunt plasate valorile NULL?
Indicaie: Se va folosi o expresie de forma expresie IS NOT NULL.
SELECT last_name,salary + salary* commission_pct venit_brut,(salary + salary*
commission_pct )*0.01 venit_net
FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY commission_pct;
20. S se listeze angajaii care au a treia liter din nume a.
SELECT DISTINCT last_name FROM employees
WHERE LOWER(last_name) LIKE '__a%'
21. S se listeze numele tuturor angajatilor care au 2 litere L n nume i lucreaz n
departamentul 30 sau managerul lor este 7782.
SELECT last_name, department_id,manager_id
FROM employees
WHERE last_name LIKE %l%l%
AND (department_id=50 OR manager_id= 103);
22. S se afieze numele, job-ul i salariul pentru toi salariaii al caror job conine irul
clerk sau rep i salariul nu este egal cu 1000, 2000 sau 3000 $. (operatorul NOT IN).
SELECT last_name, job_id,salary
FROM employees
WHERE (LOWER(job_id) LIKE %clerk% OR LOWER(job_id) LIKE %rep%)
AND SALARY NOT IN (1000,2000,3000);

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