Sintaxa de Bază A Instrucţiunilor SQL. Restricţionarea Şi Sortarea Datelor Obţinute În Urma Interogării Unei Baze de Date
Sintaxa de Bază A Instrucţiunilor SQL. Restricţionarea Şi Sortarea Datelor Obţinute În Urma Interogării Unei Baze de Date
Introducere
SQL (Structured Query Language) este unul dintre limbajele relaţionale de cereri care formează
nucleul multor sisteme de gestiune a bazelor de date. El a fost dezvoltat pentru sistemul de gestiune
al bazelor de date System R de cercetători din cadrul IBM Research Laboratory, San Jose-California
la sfârşitul anilor ’70. SQL a fost standardizat şi a devenit limbajul de referinţă pentru bazele de
date relaţionale.
SQL este un limbaj de comenzi pentru comunicarea cu serverul Oracle din orice aplicaţie. Când se
introduce o instrucţiune SQL, aceasta este stocată într-o zonă de memorie numită buffer-ul SQL şi
ea va rămâne în buffer până în momentul introducerii unei noi instrucţiuni.
SQL*Plus este un instrument Oracle care recunoaşte şi trimite instrucţiuni SQL la server pentru
execuţie şi conţine propriul limbaj de comenzi.
SQL*Plus SERVER
Raport
formatat
1
Următorul tabel cuprinde câteva elemente de comparaţie între SQL şi SQL*Plus.
SQL SQL*Plus
Este un limbaj pentru comunicarea cu serverul Oracle Recunoaşte instrucţiuni SQL şi le trimite la server
pentru accesarea datelor
Este bazat pe standardul ANSI SQL Este o interfaţă proprietate Oracle pentru executarea
instrucţiunilor SQL
Manipulează date şi definiţii de tabele în baze de date Nu permite manipularea valorilor în baze de date
O instrucţiune se stochează in bufferul SQL pe una sau Este permisă o comandă pe linie şi nu este memorată în
mai multe linii bufferul SQL
Nu are caracter de continuare Foloseşte caracterul (-) pentru continuarea unei comenzi
dacă aceasta nu încape pe o linie
Foloseşte un caracter de terminare pentru executarea Nu are nevoie de caractere de terminare. Se execută
imediată a comenzii imediat
Nu pot fi abreviate Pot fi abreviate
Foloseşte funcţii pentru anumite formatări Foloseşte comenzi pentru formatări
Categorie Scop
Mediu Afectează comportamentul general al instrucţiunilor SQL pentru sesiunea respectivă
Formatare Formatează rezultatele interogării
Manipulări de fişiere Salvează, încarcă şi rulează fişiere de script
Execuţie Trimite instrucţiuni SQL din bufferul SQL la serverul Oracle
Editare Modifică instrucţiunea SQL aflată în buffer
Interacţiune Permite crearea şi pasarea variabilelor către instrucţiuni SQL, afişarea variabilelor şi listarea
mesajelor pe ecran
Diverse Diferite comenzi pentru conectarea la baza de date, manipularea mediului SQL*Plus şi afişarea
coloanelor
Modul de apel al SQL*Plus depinde de tipul sistemului de operare sau a mediului Windows utilizat.
Pentru conectarea în mediul Windows NT trebuie urmaţi următorii paşi:
1. Start -> Programs -> Oracle-OraHome92 -> Application Development -> SQL Plus;
2. Se completează: username, parola şi numele bazei de date.
Pentru conectarea într-un mediu de tip linie de comandă se lansează următoarea comandă:
Sqlplus [username[/password[@database]]]
unde: username = numele utilizatorului din baza de date;
password = parola de conectare la baza de date;
@database = şirul de conectare la baza de date (numele bazei de date).
Notă: Din motive de securitate se recomandă introducerea numelui de utilizator şi a numelui bazei
de date, urmând ca apoi, la promptul Password, să se introduce parola.
2
Sintaxa de bază a instrucţiunilor SQL
Instrucţiunea SELECT
Pentru extragerea informaţiilor din baza de date se utilizează instrucţiunea SELECT. Cu ajutorul
acestei comenzi se pot realiza următoarele operaţii asupra datelor din baza de date:
• SELECŢIE (SELECTION): evaluarea rezultatului interogării va lua în calcul numai anumite
linii din tabelele de date, pe baza unor criterii de selecţie.
• PROIECŢIE (PROJECTION): rezultatul interogării va conţine numai anumite coloane din
tabele de date.
• JONCŢIUNE (JOIN) : utilizată pentru a combina date aflate în tabele diferite prin crearea unei
legături între coloanele corespunzătoare.
Pentru a construi instrucţiuni valide, uşor de citit şi de editat trebuie avute în vedere următoarele
reguli:
• în general instrucţiunile SQL pot fi scrise cu litere mari sau mici;
• instrucţiunile SQL pot fi introduse pe una sau mai multe linii;
• cuvintele cheie nu pot fi abreviate sau despărţite în linii diferite;
• de obicei clauzele sunt plasate pe linii separate pentru creşterea lizibilităţii textului;
• este de preferat ca toate cuvintele cheie să fie introduse cu majuscule, iar toate celelalte cuvinte,
cum ar fi numele de tabele şi coloane, să fie introduse cu litere mici;
• în mediul SQL*Plus, o instrucţiune SQL este introdusă la promt-ul SQL, iar următoarele linii
aparţinând instrucţiunii sunt numerotate. Acesta se numeşte buffer-ul SQL. Numai o singură
instrucţiune SQL poate exista în buffer la un moment de timp.
Notă:
- un cuvânt cheie se referă la o clauză SQL, cum ar fi SELECT, FROM;
- o clauză reprezintă o parte a unei instrucţiuni SQL (e.g. SELECT empno, ename);
- o instrucţiune este dată de o combinaţie de una sau mai multe clauze (e.g. SELECT * FROM
emp).
3
Execuţia instrucţiunilor SQL se poate face prin:
• plasarea caracterului ‘;’ la sfârşitul ultimei clauze;
• plasarea caracterului ‘/’ la sfârşitul ultimei linii din buffer;
• plasarea unui caracter slash ‘/’ la prompt-ul SQL;
• lansarea în SQL*Plus a comenzii RUN (la promt-ul SQL).
Dacă se doreşte afişarea tuturor coloanele cu date dintr-un tabel se foloseşte cuvântul cheie
SELECT împreună cu un asterix (*) . În exemplul de mai jos, tabelul dept conţine trei coloane
(DEPTNO, DNAME si LOC) şi patru linii, câte o linie pentru fiecare departament.
Acelaşi rezultat se poate obţine şi dacă enumerăm toate coloanele după cuvântul cheie SELECT. De
exemplu, următoarea instrucţiune SQL afişează toate coloanele şi toate liniile din tabelul dept.
În cazul în care se doreşte afişarea unor anumite coloane din tabel, se va specifica în clauza
SELECT numele acelor coloane, separate prin virgulă (‘,’). Ordinea în care coloanele selectate vor
fi afişate pe ecran este dată de ordinea în care au fost enumerate în clauza SELECT. De exemplu,
pentru a afişa toate departamentele şi oraşele din tabelul scott.dept se va executa următoarea
instrucţiune SQL:
Expresii aritmetice
În cazul în care se doreşte modificarea modului de afişare a datelor, în sensul executării unor
calcule sau creării unor scenarii, se pot utiliza expresii aritmetice. Expresiile aritmetice pot conţine
4
nume de coloane, constante numerice si operatori aritmetici (+, -, *, /). Aceşti operatori pot fi
utilizaţi în orice clauză SQL, exceptând clauza FROM.
În exemplul următor se doreşte afişarea numelui (ename), salariului (sal) şi a valorii sal+300
pentru fiecare angajat din tabelul scott.emp. Instrucţiunea SQL corespunzătoare este:
Exemplul anterior utilizează operatorul “+” pentru a mări salariile cu 300 pentru toţi angajaţii şi
afişează o nouă coloană SAL+300. De notat că SAL+300 nu este o coloană nouă în tabelul
scott.emp. Implicit, denumirea noii coloane este dată de expresia aritmetică care a generat-o (în
acest caz SAL+300).
Dacă o expresie aritmetică conţine mai mult de un operator, înmulţirea şi împărţirea sunt evaluate
primele, apoi adunarea şi scăderea. Dacă operatorii folosiţi într-o expresie sunt de aceeaşi prioritate,
evaluarea se va face de la stânga la dreapta. Folosirea parantezelor determină ca expresia dintre
paranteze sa fie evaluată prima.
Valoarea null
Dacă o linie nu are date pentru o coloană particulară, această valoare se numeşte null. Semnificaţia
valori null este de dată nedisponibilă, neatribuită, necunoscută sau inaplicabilă. Valoarea null nu
este aceeaşi cu valoarea 0 (pentru date de tip numeric) sau “” (pentru datele de tip şir de caractere).
Coloanele de orice tip pot conţine valoarea null, cu excepţia celor care au fost definite la creare ca
fiind NOT NULL sau chei primare (PRIMARY KEY).
Se observă că în coloana COMM din tabelul scott.emp doar angajatul TURNER poate avea
comision, ceilalţi angajaţi nefiind îndreptăţiţi să primească comision.
Dacă valoarea unei coloane ce apare într-o expresie aritmetică este null, rezultatul este null. După
cum se ştie, o încercare de împărţire la zero generează o eroare. În cazul unei împărţiri la o
valoarea null, rezultatul este null (necunoscut).
La afişarea rezultatului unei interogări, SQL* Plus foloseşte numele coloanei ca şi cap de tabel.
Deoarece în multe cazuri acest cap de tabel nu este sugestiv, se poate schimba numele coloanei
afişate folosind un alias de coloană. Alias-ul se specifică în clauza SELECT, imediat după numele
coloanei. Dacă alias-ul conţine spaţii, caractere speciale ($ sau # - plasate la începutul alias-ului)
sau dacă au importanţă literele mari (mici) se va scrie alias-ul între ghilimele (“ ”).
5
SQL> SELECT ename AS name, sal salary NAME SALARY
2 FROM scott.emp; ---- --------
………
SQL> SELECT ename “Name”, sal*12 “Annual Salary” Name Annual Salary
2 FROM scott.emp; ------ --------------
……
Primul exemplu afişează numele şi salariul lunar al tuturor angajaţilor. Cuvântul cheie opţional AS
a fost folosit înainte de alias, rezultatul fiind acelaşi dacă AS ar fi lipsit din clauza SELECT. De
notat că alias-urile name şi salary au fost scrise cu litere mici, iar la afişare au apărut scrise cu
majuscule.
În cel de-al doilea exemplu se doreşte afişarea numelor anagajaţilor şi a salariilor anuale. Deoarece
alias-ul Annual Salary implică folosirea spaţiului, alias-ul trebuie scris între ghilimele (“ ”).
Operatorul de concatenare ( || )
În cazul în care se doreşte concatenarea unor coloane, a unor expresii aritmetice sau valori constante
pentru a crea expresii de tip şir de caractere se va utiliza operatorul de concatenare (||). Coloanele ce
apar de o parte şi de alta a operatorului de concatenare sunt combinate pentru a forma o singură
coloană la afişare.
În exemplul de mai sus, coloanele ENAME şi JOB sunt concatenate, iar coloanei rezultante i se
atribuie alias-ul Employees. Cuvântul cheie AS folosit înaintea alias-ului măreşte lizibilitatea
instrucţiunii SELECT.
Şiruri de caractere
Un “literal” este orice caracter, expresie sau număr inclus în lista SELECT care nu este un nume de
coloană sau alias. Un literal este afişat pentru fiecare linie returnată de interogare. Valorile literale
pentru datele calendaristice şi caractere trebuie incluse între (‘ ’).
Exemplul de mai sus afişează numele şi ocupaţia tuturor angajaţilor, numele coloanei fiind
Employee Details. Spaţiile dintre ghilimelele simple din instrucţiunea SELECT au fost
introduse pentru îmbunătăţirea lizibilităţii ieşirii.
6
Eliminarea rândurilor duplicat
In mod predefinit interogările afişează toate liniile, inclusiv cele duplicat.
SQL*Plus va afişa rezultatul interogării fără a elimina rândurile duplicat. Exemplul de mai sus
afişeaza toate departamentele din tabelul scott.emp.
Eliminarea duplicatelor se face folosind cuvântul cheie DISTINCT în clauza SELECT.
SQL> SELECT DISTINCT deptno DEPTNO
2 FROM scott.emp; ---------
10
20
30
În cazul în care se specifică mai multe coloane după clauza DISTINCT vor fi afectate toate
coloanele selectate, rezultatul reprezentând o combinaţie distinctă a acestor coloane.
Comenzi PL*SQL
Tabelul de mai sus conţine informaţii privind structura tabelului scott.dept, numele coloanelor
fiind enumerate în coloana Name. Coloana Null? indică dacă o coloană trebuie să conţină date.
Valoarea NOT NULL semnifică faptul că valoarea null nu este permisă în acea coloană. Type
reprezintă tipul de date al coloanei.
7
• C[HANGE] / old / new - schimbă textul old cu cel new în linia curentă
• C[HANGE] / text / - şterge text din linia curentă din buffer
• C[LEAR] BUFF[ER] - şterge toate liniile din bufferul SQL
• DEL - şterge linia curentă din buffer
• DEL n - şterge linia n din buffer
• DEL m n - şterge din buffer toate liniile având numărul cuprins între m şi n
• I[NPUT] - inserează un număr nedefinit de linii
• I[NPUT] text - inserează o linie în buffer, conţinutul liniei fiind dat de text
• L[IST] - listează toate liniile din bufferul SQL
• L[IST] n - listează linia n din buffer
• L[IST] m n - listează liniile de la m la n din buffer
• n - linia n devine linia curentă din buffer
• n text - înlocuieşte linia n din buffer cu text
• 0 text - inserează în buffer o linie înaintea liniei 1
Notă: La prompt-ul SQL se poate introduce doar o singură comandă SQL*Plus, ce nu este stocată
în buffer. Pentru a continua o comandă pe linia următoare se va plasa caracterul (-) la sfârşitul liniei.
SAVE filename - salvează conţinutul buffer-ului SQL într-un fişier. Opţiunea APPEND adaugă la sfârşitul
[REP[LACE]APP[END]] fişierului, iar opţiunea REPLACE suprascrie conţinutul fişierului;
GET filename - conţinutul fişierului filename este încărcat în buffer-ul SQL (extensia implicită pentru
fişier este .sql);
START filename - rulează fişierul script filename;
@ filename - are acelaşi efect ca în cazul utilizării comenzii START;
ED[IT] - lansează editorul şi salvează conţinutul buffer-ului în fişierul afiedt.buf;
ED[IT] filename - lansează editorul pentru editarea conţinutului unui fişier salvat;
SPO[OL] [filename] - stochează rezultatul unei interogări într-un fişier. OFF închide fişierul. OUT închide
OFF | OUT fişierul şi îl trimite la imprimantă sistem;
EXIT - ieşire din SQL*Plus;
În urma interogării unei baze de date poate apare necesitatea reducerii numărului de linii afişate sau
specificării ordinii în care să fie afişate datele. Acest referat prezintă regulile SQL folosite pentru
realizarea acestor acţiuni, noţiunile prezentate fiind însoţite de numeroase exemple.
EMP
EMPNO ENAME JOB … DEPTNO “… returnează toţi angajaţii din
7839 KING PRESIDENT 10 departamentul 10”
7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
…
EMP
EMPNO ENAME JOB … DEPTNO
7839 KING PRESIDENT 10
7782 CLARK MANAGER 10
7934 MILLER CLERK 10
8
Să presupunem, conform exemplului de mai sus, că se doreşte afişarea tuturor angajaţilor din
departamentul 10 (prezintă interes doar setul de linii care au valoarea 10 în coloana DEPTNO).
Această metodă de restricţionare reprezintă baza clauzei WHERE în SQL.
Clauza WHERE poate compara valorile din coloane, valori literale, expresii aritmetice sau funcţii,
fiind compusă din trei elemente:
• numele coloanei
• operatorul de comparaţie
• nume de coloană, constantă sau listă de valori
Şirurile de caractere şi datele calendaristice utilizate în clauza WHERE trebuie incluse între
apostrofuri (‘ ‘). Toate căutările la nivel de caracter sunt case-sensitive (i.e. se face distincţie între
litere mici şi majuscule). Datele calendaristice sunt memorate de Oracle în formatul secol, an, luna,
zi, ore, minute şi secunde. Afişarea implicită a datei este DD-MON-YY.
Notă: valorile numerice nu trebuie incluse între apostrofuri.
Operatori de comparaţie
Operatorii de comparaţie (=, >, >=, <, <=, <>) sunt folosiţi în condiţii care compară două expresii.
Utilizarea lor în clauza WHERE respectă următorul format:
Exemple:
WHERE hiredate=’01-JAN-95’
9
WHERE sal>=1500
WHERE ename=’SMITH’
Alţi operatori de comparaţie ce pot fi utilizaţi într-o clauză WHERE sunt prezentaţi în tabelul
următor:
Operator Semnificaţie
BETWEEN… AND … Între două valori (inclusiv)
IN (listă) Potriveşte orice valoare din listă
LIKE Potriveşte un tip de caracter
IS NULL Este valoare null
Operatorul BETWEEN
Operatorul BETWEEN se utilizează pentru selectarea valorilor dintr-un interval.
Operatorul IN
Operatorul IN este utilizat pentru căutare într-o listă de valori. El poate fi utilizat cu orice tip de
dată.
SQL> SELECT empno, ename, sal, mgr EMPNO ENAME SAL MGR
2 FROM scott.emp ------ ------- ------ -----
3 WHERE mgr IN (7902, 7566, 7788); 7902 FORD 3000 7566
7369 SMITH 800 7902
7788 SCOTT 3000 7566
7876 ADAMS 1100 7788
Următorul exemplu returnează câte o linie din tabelul scott.emp pentru fiecare angajat al cărui
nume este inclus în lista de nume din clauza WHERE.
SQL> SELECT empno, ename, mgr, deptno
2 FROM scott.emp
3 WHERE ename IN (‘FORD’, ‘ALLEN’);
Notă: dacă în listă sunt folosite caractere sau date calendaristice, acestea trebuie incluse între
apostrofuri (‘ ‘).
Operatorul LIKE
10
Simbol Descriere
% Reprezintă orice secvenţă de caractere
_ (underscore) Reprezintă un singur caracter
Instrucţiunea SELECT de mai sus returnează numele angajaţilor din tabelul scott.emp al căror
nume începe cu “S”. Numele care încep cu “s” nu vor fi returnate.
În anumite cazuri, operatorul LIKE poate fi utilizat în locul operatorului BETWEEN. Următorul
exemplu afişează numele şi data angajării tuturor angajaţilor a căror angajare s-a făcut între ianuarie
1981 şi decembrie 1981.
ENAME
SQL> SELECT ename -----
2 FROM scott.emp JAMES
3 WHERE ename LIKE ‘_A%’; WARD
• Dacă se doreşte căutarea caracterelor ‘%’ sau ‘_’ se va folosi opţiunea ESCAPE, care precizează
de fapt caracterul care va fi utilizat drept Escape.
Următoarea instrucţiune SELECT afişează numele tuturor angajaţilor al căror nume conţine
secvenţa de caractere “A_S”.
Operatorul IS NULL
Operatorul IS NULL este utilizat pentru căutarea valorilor null. Deoarece valoarea null are
semnificaţia unei valori indisponibile, neatribuite, necunoscute sau neaplicabile ea nu poate apare în
cadrul unei operaţii de comparaţie, deoarece ar conduce la un rezultat null. De exemplu, pentru a
afişa numele, funcţia şi comisionul tuturor angajaţilor care nu au dreptul la comision se va folosi
următoarea instrucţiune SELECT:
SQL> SELECT ename, job, comm ENAME JOB COMM
2 FROM scott.emp ------ --------- -----
3 WHERE comm IS NULL; KING PRESIDENT
BLAKE MANAGER
CLARK MANAGER
Un operator logic combină două componente de tip condiţie pentru a produce un singur rezultat
bazat pe acestea sau inversează rezultatul unei singure condiţii. În SQL sunt disponibili trei
operatori logici: AND, OR şi NOT.
Operator Comentariu
AND Returnează TRUE dacă ambele componente ale condiţiei sunt adevărate
OR Returnează TRUE dacă una din componentele condiţiei este adevărată
NOT Returnează TRUE dacă respectiva condiţie este falsă
11
Folosirea operatorului AND
SQL> SELECT empno, ename, job, sal EMPNO ENAME JOB SAL
2 FROM scott.emp ----- ------- ------ ------
3 WHERE sal>=1100 7876 ADAMS CLERK 1100
4 AND job=’CLERK’; 7934 MILLER CLERK 1300
În exemplul de mai sus ambele condiţii trebuie să fie adevărate pentru a fi selectată o înregistrare.
De aceea, un angajat care are funcţia CLERK şi câştigă mai mult de $1100 va fi selectat.
Notă: - toate căutarile de tip caracter sunt case-sensitive.
- şirurile de caracter trebuie incluse între apostrofuri (‘ ‘).
Folosirea operatorului OR
SQL> SELECT empno, ename, job, sal EMPNO ENAME JOB SAL
2 FROM scott.emp ------ ------ ---------- ------
3 WHERE sal>=1100 7839 KING PRESIDENT 5000
4 OR job=’CLERK’; 7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
……
În exemplul de mai sus, vor fi selectate înregistrările care îndeplinesc cel puţin o condiţie: fie
sal>=1100, fie job=’CLERK’.
În exemplul de mai sus este afişat numele şi funcţia tuturor angajaţilor a căror funcţie nu este
CLERK, MANAGER sau ANALYST.
Notă: operatorul NOT poate fi combinat şi cu alţi operatori SQL, cum ar fi BETWEEN, LIKE şi IS
NULL.
WHERE job NOT IN (‘CLERK’, ‘ANALYST’)
WHERE sal NOT BETWEEN 1000 AND 1500
WHERE comm IS NOT NULL
Precedenţa operatorilor
Prioritate Operator
1 – maximă Toţi operatorii de comparaţie
2 NOT
3 AND
4 – minimă OR
Notă: aceste reguli pot fi încălcate folosind paranteze.
12
Clauza ORDER BY
Liniile returnate de o interogare sunt afişate într-o ordine oarecare. Pentru sortarea liniilor se
utilizează clauza ORDER BY, care, dacă este folosită, trebuie să apară ultima în instrucţiunea
SELECT. Sortarea se poate face dupa o coloană, o expresie sau după un alias de coloană.
Sintaxă:
SELECT expresie
FROM tabel
[WHERE conditie]
[ORDER BY {coloana, expresie} [ASC|DESC];
unde:
ORDER BY specifică ordinea în care sunt afişate liniile.
ASC ordonează liniile ascendent – implicit.
DESC ordonează liniile descendent.
Dacă nu este folosită clauza ORDER BY ordinea sortării este nedefinită şi Serverul Oracle poate
afişa liniile în ordine diferită pentru două interogări identice.
SELECT-ul următor afişează rezultatele interogării ordonate descrescător după coloana hiredate.
SQL> SELECT ename, job, deptno, hiredate ENAME JOB DEPTNO HIREDATE
2 FROM scott.emp ------- -------- ------- ---------
3 ORDER BY hiredate DESC; ADAMS CLERK 20 12-JAN-83
SCOTT ANALYST 20 09-DEC-82
MILLER CLERK 10 23-JAN-82
JAMES CLERK 30 03-DEC-81
FORD ANALYST 20 03-DEC-81
KING PRESIDENT 10 17-NOV-81
MARTIN SALESMAN 30 28-SEP-81
…
În următorul exemplu liniile sunt sortate după coloanele deptno şi sal, iar liniile având aceeaşi
valoare pentru deptno fiind sortate descendent după sal.
13
SQL> SELECT ename, deptno, sal ENAME DEPTNO SAL
2 FROM scott.emp ------- --------- ------
3 ORDER BY deptno, sal DESC; KING 10 5000
CLARK 10 2450
MILLER 10 1300
FORD 20 3000
……
Notă: se poate face sortare şi după o coloană care nu este în lista clauzei SELECT.
Probleme
8. Afişaţi numele şi salariul angajaţilor din tabelul scott.emp care câştigă mai mult de $2850.
Salvaţi instrucţiunea SQL în fişierul p8.sql şi apoi rulaţi-l.
9. Modificaţi p8.sql astfel încât să afişaţi numele şi salariul tuturor angajaţilor ale căror salarii nu
intră în intervalul $1500 - $2850. Salvaţi instrucţiunea în fişierul p9.sql şi apoi rulaţi din nou
interogarea.
10. Afişaţi numele şi numerele de departament ale angajaţilor care lucrează în departamentele 10,
respectiv 30, ordonaţi alfabetic după nume.
11. Modificaţi fişierul p9.sql şi listaţi numele şi salariul angajaţilor care câştigă mai mult de $1500
şi lucrează în departamentul 10 sau 30. Redenumiţi coloanele din rezultat Angajat şi Salar
Lunar. Salvaţi modificările în fişierul p11.sql şi apoi rulaţi-l.
12. Afişaţi numele şi funcţia pentru angajaţii care nu au manager.
13. Afişaţi numele, salariul şi comisionul pentru toţi angajaţii care au comision. Sortaţi datele în
ordine descendentă după salariu şi comision.
14. Afişaţi numele angajaţilor care conţin 2 caractere ‘L’ consecutive în numele lor şi îndeplinesc
următoarea condiţie: lucrează în departamentul 30 sau au manager cu marca 7782.
15. Modificaţi p11.sql şi afişaţi numele, salariul şi comisionul pentru toţi angajaţii care au
comisionul mai mare decât salariul mărit cu 10%. Salvaţi modificările în fişierul p15.sql şi apoi
rulaţi-l.
16. Afişaţi numele, funcţia şi salariul angajaţilor ce au funcţia Clerk sau Analyst şi al căror salariu
nu este de $1000, $3000 sau $5000.
17. Afişaţi numele, funcţia şi data angajării persoanelor angajate între 10 februarie 1981 şi 1 mai
1981. Ordonaţi înregistrările returnate de interogare crescător după data angajării.
14