Sunteți pe pagina 1din 28

INTRODUCERE IN SQL

Este vorba de o introducere n limbajul de interogare utilizat pentru a accesa o baz de date.
La scurt timp dup ce E. F. Codd a descris structura bazei de date relaionale, n colectivul de
la IBM s-a realizat un prototip de sistem de management al bazelor de date relaionale, numit
System R, mpreun cu un limbaj dedicat (pentru a crea i a opera cu bazele de date
relaionale), numit SEQUEL (Structured English QUEry Language). Expresiile din SEQUEL
seamn cu propoziiile din limba englez, fiind desigur mai structurate. In paralel firma IBM
a scos pe pia produse cu baze de date relaionale, bazate pe System R. Dar cu un limbaj
puin diferit de SEQUEL. Astfel c l-a botezat SQL, eliminnd vocalele din Sequel i trecnd
la pronunia "es-qu-el". Chiar dac sunt autori care consider c SQL provine de la Structured
Query Language, asta nu-i adevrat.Iar SQL nu are nimic de a face cu limbajele de
programare structurat, precum Pascal sau C++.
In 1979, Corporaia Oracle introduce prima implementare a SQL n variant comercial.
In scurt timp SQL devine un standard industrial pentru bazele de date relaionale. Institutul
National American de Standarde (ANSI) l-a adoptat ca limbaj standard pentru gestiunea
bazelor de date (RDBMS), nc n anul 1986. Organizaia Internaional de Standarde (ISO) a
adoptat deasemenea SQL ca limbaj standard pentru RDBMS. Toate RDBMS-urile suport
unele forme de SQL i toi vnztorii de astfel de sisteme s-au aliniat sau intenioneaz s se
alinieze la standardele ANSI. Asta nu nseamn c nu mai apar diferene. Chiar i la produsele
aceleai firme, Microsoft Access i SQL Server, pot fi semnalate diferene n implementarea
limbajului SQL.
SQL poate fi folosit n dou moduri:

direct la terminal, adic n mod comand (interactiv, sau batch)


n cadrul unor programe scrise ntr-un limbaj de programare, precum C++, sau Visual
Basic.

In concluzie: Un sistem de management al bazei de date necesit un limbaj de interogare


pentru a permite utilizatorului s acceseze datele. SQL (iniial numit SEQUEL, ca limbaj de
interogare structurat) este limbajul standardizat ANSI i ISO, utilizat de majoritatea
sistemelor ce manevreaz baze de date relaionale.

Trsturi caracteristice ale limbajului SQL

SQL, ca i majoritatea limbajelor de programare, folosete cuvinte din limba englez.


In mod special cuvintele select, insert, delete ca elemente ale setului de comenzi.
SQL este un limbaj neprocedural: specific care sunt informaiile dorite, nu cum se
obin acestea. Cu alte cuvinte, SQL nu cere s fie specificat metoda de acces la date.
Execuia comenzilor SQL asupra nregistrrilor nu se poate face dect secvenial,
asupra cte unei singure nregistrri. Setul de nregistrri fiind vzut ca set de linii ale
unui tabel.

SQL poate fi folosit de un ir de utilizatori, incluznd administratorul bazei de date,


programatorii de aplicaii, personalul de management i multe alte tipuri de utilizatori.

SQL include comenzi pentru o varietate de sarcini, incluznd:


o

selecia unor date

inserarea, extragerea i tergerea rndurilor dintr-un tabel

crearea, modificarea i tergerea obiectelor de tip baz de date

controlul accesului la baza de date i la obiectele de tip baz de date

verificarea - garantarea consistenei bazei de date

La nceput, sistemele de management a bazelor de date au utilizat un limbaj separat pentru


fiecare categorie de sarcini n parte. SQL le-a unificat pe toate acestea ntr-un singur limbaj.
Logic, comenzile limbajului SQL sunt mprite n trei componente:

limbajul de definire a datelor (Data Definition Language)- DDL,


limbajul de manipulare a datelor (Data Manipulation Language)- DML,

limbajul de control al datelor (Data Control Language)-DCL.

Primul pentru crearea structurii de baz de date, al doilea, dup ce structura exist, pentru a
aduga date n tabele i pentru a le manipula. A treia component ofer posibilitatea de a
proteja (securiza) datele.

Setul de comenzi SQL


Comenzile de definire a datelor (DDL): CREATE, ALTER, DROP
aceste trei comenzi sunt utilizate dinamic pentru a crea, utiliza i terge orice structur
de date, n particular tabele.
Comenzile de manipulare a datelor (DML): INSERT, UPDATE, DELETE i SELECT
utilizate pentru a introduce noi rnduri, pentru a schimba (actualiza) rndurile
existente, pentru a terge rndurile nedorite din baza de date respectiv, i, n fine,
SELECT - comanda cea mai utilizat, folosit pentru a cuta, a selecta nregistrri din
tabel sau dintr-o combinaie de tabele ale bazei de date.
Comenzile de control (grupul DCL), la dispoziia administratorului(DBA): GRANT,
REVOKE
utilizate pentru a da sau a lua drepturi de acces (la comenzi DML, deci la operarea
unor modificri a bazei de date).
Sintaxa comenzilor difer de la un grup la altul. Ne limitm acum doar la cte un exemplu:
CREATE TABLE CUSTOMER (
CustomerID
Integer
FirstName
Character
LastName
Character
Title
Character
Street
Character
City
Character

PRIMARY KEY,
(15),
(20)
(5),
(25),
(25),

NOT NULL,

State
Phone

Character (2),
Character (15) );

INSERT INTO CUSTOMER (CustomerID, FirstName, LastName)


VALUES (:vcustid, 'Dana', 'Popescu');
GRANT SELECT INSERT
ON CUSTOMER
TO Ana, Victor

N. B. Am menionat doar principalele comenzi din SQL. Comanda cea mai intens folosit,
SELECT, urmeaz a fi prezentat pe larg mai jos. Pentru o list complet a comenzilor trebuie
parcurs Manualul de Referin al Limbajului SQL.

Scrierea comenzilor SQL


Cnd scriem comenzi SQL, este important s ne reamintim cteva reguli simple pentru
construirea unor declaraii valide care sunt i uor de citit i de editat:
Comenzile SQL pot fi scrise pe una sau mai multe linii.
Clauzele sunt uzual plasate pe linii separate.

Poate fi folosit tabelarea.

Cuvintele de comand nu pot fi separate pe mai multe linii.

Comenzile SQL pot fi scrise fie cu majuscule fie cu minuscule (nu sunt 'case
sensitive').

O comand SQL este introdus la prompterul SQL, iar liniile subsecvenelor sunt
numerotate.

O singur declaraie poate fi considerat curent, ct timp ea este ntr-un buffer i


poate fi rulat ntr-un anumit numr de moduri :
o

plasnd un punct i virgul(;) la sfritul ultimei clauze.

plasnd un punct i virgul urmat de semnul / (slash) pe ultima linie n buffer.

plasnd un slash (/) la prompterul SQL.

scriind comanda SQL R[UN] la prompterul SQL.

Comenzile pot fi deci scrise, spre exemplu, n oricare din urmtoarele forme:
SELECT * FROM EMP;
SELECT
*
FROM
EMP
;

SELECT *
FROM EMP;
In acest document, pentru claritate, comenzile SQL sunt sparte n clauze.

Blocul de interogare de baz


Declaraia SELECT regsete informaia din baza de date, putnd ngloba i unul sau mai
muli operatori din algebra relaional.
In cele mai simple forme trebuie s conin:
1. O clauz SELECT, care listeaz coloanele pentru afiare astfel nct este eseniala o
Proiecie.
2. O clauz FROM care specific tabela implicat.
Pentru a lista toate numerele departamentelor, numele angajailor i numrul efilor
(managerilor) introducei n tabela EMP urmtoarele:
SELECT
FROM
DEPTNO
-----20
30
30
20
30
30
10
20
10
30
20
30
20
10

DEPTNO,
EMP;
ENAME
---------SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

ENAME,

MGR

MGR
----7902
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

De remarcat c numele coloanelor sunt separate prin spaiu.


Este posibil s selectm toate coloanele din tabel prin specificarea unui asterix ( * ) dup
cuvntul SELECT .
SELECT
FROM
EMPNO
----7369
7499
7521
7566
7654

ENAME
------SMITH
ALLEN
WARD
JONES
MARTIN

*
EMP;
JOB
------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN

MGR
---7902
7698
7698
7839
7698

HIREDATE
SAL
COMM DEPTNO
--------- --------- ------- -----13-JUL-83
800. 00
20
15-AUG-83 1, 600. 00
300. 00
30
26-MAR-84 1, 250. 00
500. 00
30
31-OCT-83 2, 975. 00
20
05-DEC-83 1, 250. 00 1. 400. 00
30

7698
7782
7788
7839
7844
7876
7900
7902

BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD

MANAGER 7839
MANAGER 7839
ANALYST 7566
PRESIDENT
SALESMAN 7698
CLERK
7788
CLERK
7698
ANALYST 7566

11-JUN-84
14-MAY-84
05-MAR-84
09-JUL-84
04-JUN-84
04-JUN-84
23-JUL-84
05-DEC-83

2,
2,
3,
5,
1,
1,

850. 00
450. 00
000. 00
000. 00
500. 00
100. 00
950. 00
3, 000. 00

. 00

30
10
20
10
30
20

30

20

Alte elemente n clauza SELECT


Este posibil s se includ i alte elemente n clauza SELECT.
Expresii aritmetice
Alias-uri de coloane

Coloane concatenate

Litere sau iruri de caractere

Toate aceste opiuni ajut utilizatorul s cear date i s le manipuleze n funcie de scopurile
interogrii; de exemplu, execuia calculelor, legarea coloanelor impreun, sau afiarea
irurilor de litere din text.

Expresii aritmetice
O expresie este o combinaie de una sau mai multe valori, operatori i funcii, care se
evalueaz la o valoare.
Expresiile aritmetice pot conine nume de coloane, valori numerice constante i operatori
aritmetici:
Operatori
--------+
*
/
SELECT
FROM

Descriere
--------adunare
scdere
nmulire
mprire
ENAME,
EMP;

SAL*12,

COMM

Daca expresia aritmetic conine mai mult dect un operator, atunci prioritile sunt *, /, la
nceput, apoi +, - (de la stnga la dreapta pentru operatorii cu aceeai prioritate).
In urmtorul exemplu, nmulirea (250*12) este evaluat prima; apoi valoarea salariului este
adunat la rezultatul multiplicrii(3000). Astfel pentru rndul lui SMITH avem :
800+3000=3800.
SELECT ENAME,
FROM
EMP;

SAL + 250 * 12

Parantezele pot fi utilizate pentru specificarea ordinii de execuie a operatorilor, dac, de


exemplu, adunarea e dorit nainte de nmulire:
SELECT
FROM

ENAME,
EMP;

(SAL + 250) * 12

Alias-uri de coloan
Cnd se afieaz rezultatul unei interogri, n mod normal se utilizeaz numele coloanelor
selectate ca titlu. In multe cazuri acest nume poate fi criptic sau fr neles.
Putem schimba un titlu de coloan utiliznd un 'ALIAS'.
Un alias de coloan d unei coloane un nume de titlu alternativ la ieire.
Specificai aliasul dup coloan, n lista selectat. Din oficiu, titlurile de tip alias vor fi scrise
forat cu litere mari i nu pot conine spaii (blankuri), numai dac aliasul este inclus ntre
ghilimele(" ").
Pentru a afia titlul de coloan ANNSAL. pentru salariul anual, nsemnnd SAL*12, utilizai
un alias de coloan:
SELECT
FROM

ENAME,
EMP;

SAL*12 ANNSAL,

COMM

Odat definit, un alias poate fi utilizat de alte comenzi, precum cele din SQL-Plus.
Not:
Intr-o declaraie SQL, un alias de coloan poate fi utilizat numai n clauza SELECT.

Operatorul de concatenare
Operatorul de concatenare (||) permite coloanelor s fie legate cu alte coloane, iar
expresiilor aritmetice sau valorilor constante s creeze o expresie de caractere.
Coloanele din cealalta parte a operatorului sunt combinate pentru a obtine o singura
coloana.
Pentru a combina EMPNO i ENAME i s se dea aliasul EMPLOYEE expresiei,
introducei:
SELECT
FROM

EMPNO||ENAME
EMP;

EMPLOYEE

EMPLOYEE
-------------------------------------------------------

7369SMITH
7499ALLEN
7521WARD
7566JONES
7654MARTIN
7698BLAKE
7782CLARK
7788SCOTT
7839KING
7844TURNER
7876ADAMS
7900JAMES
7902FORD
7934MILLER

Literali
Un literal este orice caracter, expresie, numar inclus n lista lui SELECT care nu este un
nume de coloana sau un alias de coloana.
Un literal n lista lui SELECT este reprezentat de fiecare rnd returnat la iesire. Sirurile
de literali dintr-un text cu un format oarecare pot fi incluse in rezultatul interogarii i
sunt tratate ca o coloana lista selectata.
Literalii de tip dat calendaristica i caracter pot fi nchisi ntre ghilimele
simple(');literlalii de tip numar nu au nevoie de ghilimele simple(').
Urmatoarea declaraie conine literali selectai prin concatenare i printr-un alias de
coloana:
SELECT
FROM

EMPNO||'-'||ENAME EMPLOYEE,
'WORKS IN DEPARTMENT',
DEPTNO
EMP;

EMPLOYEE
'WORKS IN DEPARTMENT'
------------------ -------------------7369-SMITH
WORKS IN DEPARTMENT
7499-ALLEN
WORKS IN DEPARTMENT
7521-WARD
WORKS IN DEPARTMENT
7566-JONES
WORKS IN DEPARTMENT
7654-MARTIN
WORKS IN DEPARTMENT
7698-BLAKE
WORKS IN DEPARTMENT
7782-CLARK
WORKS IN DEPARTMENT
7788-SCOTT
WORKS IN DEPARTMENT
7839-KING
WORKS IN DEPARTMENT
7844-TURNER
WORKS IN DEPARTMENT
7876-ADAMS
WORKS IN DEPARTMENT
7900-JAMES
WORKS IN DEPARTMENT
7902-FORD
WORKS IN DEPARTMENT
7934-MILLER
WORKS IN DEPARTMENT

DEPTNO
-----20
30
30
20
30
30
10
20
10
30
20
30
20
10

Tratarea valorilor nule


Dac unui rnd ii lipseste o valoare pentru o anumita coloana, despre acea valoare se
spune ca este nula.
O valoare nula este o valoare care este sau incorecta, sau necunoscuta, sau inaplicabila.
O valoare nula nu este la fel ca 'zero'. Zero este un numar. Valoarea nula ocupa un octet
n reprezentarea interna.
Valoarea nula este tratat corect de catre SQL.
Dac orice valoare de coloana ntr-o expresie este nula atunci rezultatul este nul. In
urmatoarea declaraie numai Salesman are un rezultat al salariului:
SELECT
FROM

ENAME,
EMP;

SAL*12 + COMM ANNUAL_SAL

ENAME
ANNUAL_SAL
--------- ---------SMITH
ALLEN
19500
WARD
15500
JONES
MARTIN
16400
BLAKE
CLARK
SCOTT
KING
TURNER
18000
ADAMS
JAMES
FORD
MILLER

Dac dorim s obtinem un rezultat pentru toi angajaii, este necesar sa convertim
valoarea nula la un numar . Noi folosim funcia NVL pentru a converti o valoare nula la
o valoare nenula.
Folositi funcia NVL pentru a converti valoarea nula de la declaratia precedenta la 0.
SELECT
FROM

ENAME,
EMP;

SAL*12+NVL(COMM,

ENAME
ANNUAL_SAL
--------- ---------SMITH
9600
ALLEN
19500
WARD
15500
JONES
35700
MARTIN
16400
BLAKE
34200

0) ANNUAL_SAL

CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

29400
36000
60000
18000
13200
11400
36000
15600

NVL asteapta doua argumente:


1. o expresie
2. o valoare nenula
De notat ca putei folosi funcia NVL pentru a converti un numar nul, data
calendaristica sau ir de caractere la un alt numar, data calendaristica sau sir de
caractere de acceai lungime i de acelai tip de date asteptate.
NVL(DATECOLUMN,
NVL(NUMBERCOLUMN,

'01-JAN-88')

NVL(CHARCOLUMN,

9)
'STRING')

Prevenirea seleciei rndurilor duplicate


Dac nu se indic altfel, SQL*Plus afieaz rezultatul unei interogri fr eliminarea
intrrilor duplicate .
Pentru a lista toate numerele de departament din tabela EMP, introducei:
SELECT
FROM
DEPTNO
-----20
30
30
20
30
30
10
20
10
30
20
30
20
10

DEPTNO
EMP;

Clauza DISTINCT
Pentru eliminarea valorilor duplicate din rezultat, includei restricia DISTINCT n
comanda SELECT.
Pentru a elimina valorile duplicate afiate n exemplul urmtor introducei:
SELECT
FROM

DISTINCT
EMP;

DEPTNO

DEPTNO
-----10
20
30

Coloane multiple pot fi specificate dup restricia DISTINCT i restricia DISTINCt


afecteaz toate coloanele selectate.
Pentru a afia valorile distincte ale lui DEPTNO i JOB, introducei:
SELECT
FROM
DEPTNO
-----10
10
10
20
20
20
30
30
30

DISTINCT DEPTNO,
EMP;

JOB

JOB
--------CLERK
MANAGER
PRESIDENT
ANALYST
CLERK
MANAGER
CLERK
MANAGER
SALESMAN

Aceasta afieaz o list a tuturor combinaiilor diferite de ocupaie i numere de


departamente.
De notat c restricia DISTINCT poate s fie referit numai o singur dat i trebuie s
urmeze imediat dup cuvntul de comand SELECT.

Clauza ORDER BY
In mod normal ordinea rndurilor ntoarse n rezultatul unei cereri este nedefinit.
Clauza ORDER BY poate fi utilizat pentru a sorta rndurile.
Dac o folosim, clauza ORDEY BY trebuie s fie ntotdeauna ultima n declaraia
SELECT.

Pentru a sorta dup ENAME, introducei:


SELECT
FROM
ORDER BY

ENAME,
EMP
ENAME;

JOB,

SAL*12,

ENAME
--------ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER
SCOTT
SMITH
TURNER
WARD

JOB
SAL*12 DEPTNO
------- -------- -----CLERK
13200
20
SALESMAN
19200
30
MANAGER
34200
30
MANAGER
29400
10
ANALYST
36000
20
CLERK
11400
30
MANAGER
35700
20
PRESIDENT 60000
10
SALESMAN
15000
30
CLERK
15600
10
ANALYST
36000
20
CLERK
9600
20
SALESMAN
18000
30
SALESMAN
15000
30

DEPTNO

Ordonarea "din oficiu" a datelor


Ordinea sortrii, este predefinit ascendent:
La valorile numerice, cele mai mici primele
La valorile de tip date calendaristice, cele mai mici primele.

Valorile de tip caracter, n ordinea alfabetic.

Inversarea ordinii predefinite


Pentru a inversa aceast ordine, cuvntul de comand DESC este specificat dup
numele coloanei n clauza ORDER BY.
Pentru a inversa ordinea coloanei HIREDATE, deci datele cele mai trzii s fie afiate
primele, introducei:
SELECT
FROM
ORDER BY

ENAME, JOB, HIREDATE


EMP
HIREDATE DESC;

ENAME
--------JAMES
KING
BLAKE
TURNER
ADAMS
CLARK
WARD

JOB
--------CLERK
PRESIDENT
MANAGER
SALESMAN
CLERK
MANAGER
SALESMAN

HIREDATE
--------23-JUL-84
09-JUL-84
11-JUN-84
04-JUN-84
04-JUN-84
14-MAY-84
26-MAR-84

SCOTT
MARTIN
FORD
MILLER
JONES
ALLEN
SMITH

ANALYST
SALESMAN
ANALYST
CLERK
MANAGER
SALESMAN
CLERK

05-MAR-84
05-DEC-83
05-DEC-83
21-NOV-83
31-OCT-83
15-AUG-83
13-JUN-83

Ordonarea dup mai multe coloane


Este posibil s se ordoneze dup mai multe coloane. Limita este numarul de coloane din
tabela. In clauza ORDER BY se specifica coloanele pentru ordonat separate prin
virgula. Daca una sau toate coloanele trebuie s fie inversate specificai DESC dup
fiecare coloana.
Pentru a ordona dup doua coloane i afia n ordinea inversa a salariului, introducei:
SELECT
FROM
ORDER BY
DEPTNO
-----10
10
10
20
20
20
20
20
30
30
30
30
30
30

DEPTNO,
EMP
DEPTNO,

JOB,

ENAME

JOB
-----------PRESIDENT
MANAGER
CLERK
ANALYST
ANALYST
MANAGER
CLERK
CLERK
MANAGER
SALESMAN
SALESMAN
SALESMAN
SALESMAN
CLERK

SAL DESC;
ENAME
------KING
CLARK
MILLER
SCOTT
FORD
JONES
ADAMS
SMITH
BLAKE
ALLEN
TURNER
WARD
MARTIN
JAMES

Pentru a ordona dup o coloana nu este necesar s o avem SELECT-ata.

ORDER BY i valorile nule


In Oracle7, valorile nule sunt afiate ultimele pentru secventele ascendente si sunt
raportate primele cind rindurile sunt sortate n ordine descendenta.
Atenie:
Clauza ORDER BY este utilizat ntr-o interogare cind se doreste s se afieze rindurile
ntr-o ordine specifica . Fara clauza ORDER BY rndurile sunt returnate ntr-o ordine
convenita de ORACLE i va trebui s ne bazam pe el- ordinea determinat fiind

consistenta de la cerere la cerere. De notat ca ordinea de afiare a rindurilor nu


influenteaza ordinea interna a rindurilor asa cum sunt stocate n tabela.

Clauza WHERE
Clauza WHERE corespunde operatorului 'Restricie' din algebra relaionala.
Conine o condiie pe care rindurile trebuie s o indeplineasca n ordinea afiarii lor.
Clauza WHERE, daca este folosita, trebuie s urmeze clauzei FROM :
SELECT
FROM
WHERE

coloane
tabela
anumite condiii sunt ntlnite

Clauza WHERE poate compara valori n coloana, valori literale, expresii aritmetice sau
funcii.
Clauza WHERE asteapta trei elemente:
1. Un nume de coloana
2. Un operator de comparaie
3. Un nume de coloana, constanta sau lista de valori.
Operatorii de comparaie sunt utilizai n clauza WHERE i pot fi impartiti in doua
categorii: logici i SQL.

Operatorii logici
Acesti operatori verifica urmatoarele condiii:
Operator
-------=
>
>=
<
<=

Semnificaie
-----------egal cu
mai mare decit
mai mare sau egal
mai mic decit
mai mic sau egal

Sirurile de caractere i datele calendaristice n clauza


WHERE
Coloanele din ORACLE pot avea urmatoarele tipuri:caracter, numar sau data
calendaristica.
Sirurile de caractere i datele calendaristice din clauza WHERE trebuie sa fie nchise n
ghilimele simple('). Sirurile de caractere trebuie s se supra- puna cu valoarea coloanei
daca nu, trebuie modificate de o funcie. Utilizati "Funcii pe Caractere" din capitolul 4.

Pentru a afia numele, numerele, ocupatia i departamentele tuturor funcionarilor,


introducei:
SELECT
FROM
WHERE

ENAME,
EMPNO,
EMP
JOB = 'CLERK';

ENAME
EMPNO
--------- ----SMITH
7369
ADAMS
7876
JAMES
7900
MILLER
7934

JOB,

DEPTNO

JOB
DEPTNO
------- -----CLERK
20
CLERK
20
CLERK
30
CLERK
10

Pentru a gsi toate numele de departamente cu numerele de departament mai mare ca


20, introducei:
SELECT
FROM
WHERE

DNAME,
DEPTNO
DEPT
DEPTNO >20;

DNAME
---------SALES
OPERATIONS

DEPTNO
-----30
40

Compararea unei coloane cu alta n cadrul aceluiai rnd


Putei compara o coloana cu o alta coloana n acelai rnd, la fel ca i cu o valoare
constanta.
De exemplu, presupunem ca dorim s obtinem acei angajai al caror comision est mai
mare decat salariul lor:
SELECT
FROM
WHERE
ENAME
-----MARTIN

ENAME,
SAL,
EMP
COMM> SAL;

COMM

SAL
COMM
--------------1, 250. 00
1, 400. 00

Operatori SQL
Sint patru operatori SQL care opereaza pe toate tipuril de date:
Operatori SQL
Operator
--------

Semnificaie
------------

BETWEEN. . AND. . .
ntre doua valori(inclusiv)
IN(list)
compara cu o lista de valori
LIKE
compara cu un model de tip caracter
IS NULL
est o valoare nula

Operatorul BETWEEN
Realizeaza teste pentru valori ntre, si inclusiv, o valoare minima i o valoare maxima.
Presupunind ca dorim s vedem angajaii ai caror salariu este ntre 1000 i 2000:
SELECT
FROM
WHERE

ENAME, SAL
EMP
SAL BETWEEN 1000 AND 2000;

ENAME
SAL
------- ---------ALLEN
1, 600. 00
WARD
1, 250. 00
MARTIN
1, 250. 00
TURNER
1, 500. 00
ADAMS
1, 100. 00
MILLER
1, 300. 00

De notat ca valorile specificate sunt inclusive i ca limita minima trebuie specificat


prima.

Operatorul IN
Testeaza valorile dintr-o lista specificata.
Presupunem ca dorim s gasim angajaii care au unul din cele trei numere de
marca(MGR):
SELECT
FROM
WHERE
EMPNO
----7369
7788
7876
7902

ENAME
----SMITH
SCOTT
ADAMS
FORD

EMPNO,
ENAME,
SAL,
MGR
EMP
MGR IN (7902, 7566, 7788);
SAL
MGR
--------- ----800. 00 7902
3, 000. 00 7566
1, 100. 00 7788
3, 000. 00 7566

Daca, caracterele sau datele calendaristice sunt utilizate, ele trebuie introduse ntre
ghilimele(' ').

Operatorul LIKE

Uneori nu se cunosc valorile exacte pe care le cautam. Utiliznd operatorul LIKE este
posibil s selectam rndurile care se potrivesc cu un model specificat de caractere.
Operatia de petter-matching a caracterelor poate fi asemanat cu o cautare 'wild-card'.
Doi simboli se pot utiliza la construirea irului de cautare.
Simbol
-----%
-

Reprezentare
-----------orice secventa de zero sau mai multe caractere
un singur caracter oarecare

Pentru a lista toi angajaii al caror nume ncepe cu un S, introducei:


SELECT
FROM
WHERE

ENAME
EMP
ENAME LIKE 'S%';

ENAME
-------SMITH
SCOTT

Caracterul '_' poate fi utilizat pentru cautarea unui anumit numar de carac- tere.
De exemplu pentru a lista toi angajaii care au un nume exact de patru caractere
lungime:
SELECT
FROM
WHERE

ENAME
EMP
ENAME LIKE '____';

ENAME
----WARD
KING
FORD

Semnele '%' i '_'pot fi utilizate n orice combinaie de caractere.

Operatorul IS NULL
Operatorul IS NULL face teste specifice pentru valorile care sunt NULL.
SELECT
FROM
WHERE
ENAME
-----KING

ENAME, MGR
EMP
MGR IS NULL;
MGR
----

Negarea expresiilor
Urmatorii operatori fac teste de negaie:
Operator
--------!=
^=
<>

Descriere
---------diferit de(VAX, UNIX,
diferit de(IBM)
diferit de(toate o/s)

PC)

NOT NUMECOL=
NOT NUMECOL>

diferit de
mai mic sau egal

Operatori SQL
Operator
-------NOT BETWEEN
NOT IN
NOT LIKE
IS NOT NULL

Descriere
--------nu se afla ntre doua valori date
nu se afla ntr-o lista dat de valori
diferit de irul
nu este o valoare nula

Pentru a gsi angajaii ai caror salariu nu este ntr-un interval, introdu- cei:
SELECT
FROM
WHERE

ENAME, SAL
EMP
SAL NOT BETWEEN 1000 AND 2000;

ENAME
--------SMITH
JONES
BLAKE
CLARK
SCOTT
KING
JAMES
FORD

SAL
-------800. 00
2, 975. 00
2, 850. 00
2, 450. 00
3, 000. 00
5, 000. 00
950. 00
3, 000. 00

Pentru a afla acei angajai a caror meserie nu ncepe cu M,


SELECT
FROM
WHERE
ENAME
-------SMITH
ALLEN
WARD
MARTIN
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

ENAME, JOB
EMP
JOB NOT LIKE 'M%';
JOB
-------CLERK
SALESMAN
SALESMAN
SALESMAN
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

Pentru a afla toi angajaii care au un manager(MGR),


SELECT
FROM
WHERE

introducei:

ENAME, MGR
EMP
MGR IS NOT NULL;

ENAME
MGR
------- ----SMITH
7902
ALLEN
7698
WARD
7698

introducei:

JONES
MARTIN
BLAKE
CLARK
SCOTT
TURNER
ADAMS
JAMES
FORD
MILLER

7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

Nota:
Daca o valoare NULL este utilizat ntr-o comparaie, atunci operatorul de comparaie
trebuie s fie IS sau IS NOT NULL. Daca acesti operatori nu sunt uti lizai i valoarea
NULL este comparata, atunci rezultatul este ntotdeauna FALSE
De exemplu, COMM!=NULL este ntotdeauna falsa. Rezultatul este fals deoarece o
valoare NULL poate s nu fie egala sau diferita cu orice alta valoare alta decat NULL.
De notat ca o astfel de eroare nu este semnalata, rezultatul fiind ntotdea- una fals.

Interogarea datelor cu condiii multiple


Operatorii AND sau OR pot fi utilizai pentru a compune expresii logice.
Predicatul AND este adevrat numai daca ambele condiii sunt 'adevrate'; predicatul
OR este adevrat daca cel putin una din condiii este 'adevrata'.
In urmatoarele doua exemple, condiiile sunt aceleasi, dar predicatele difera Priviti cum
rezultatul este dramatic modificat.
Pentru a gsi toi funcionarii care ctig ntre
1000 i 2000, introducei:
SELECT
FROM
WHERE
AND

EMPNO, ENAME, JOB, SAL


EMP
SAL BETWEEN 1000 AND 2000
JOB = 'CLERK';

EMPNO ENAME
JOB
---------- -------7876 ADAMS
CLERK
7934 MILLER
CLERK

SAL
-------1, 100. 00
1, 300. 00

Pentru a afla toi angajaii care sunt i funcionari i/sau


funcionari care castiga ntre 1000 i 2000, introducei:
SELECT
FROM
WHERE
OR
EMPNO
-----

ENAME
--------

EMPNO, ENAME, JOB, SAL


EMP
SAL BETWEEN 1000 AND 2000
JOB = 'CLERK';
JOB
-------

SAL
--------

7369
7499
7521
7654
7844
7876
7900
7934

SMITH
ALLEN
WARD
MARTIN
TURNER
ADAMS
JAMES
MILLER

CLERK
SALESMAN
SALESMAN
SALESMAN
SALESMAN
CLERK
CLERK
CLERK

800. 00
600. 00
250. 00
250. 00
500. 00
100. 00
950. 00
1, 300. 00
1,
1,
1,
1,
1,

Putei combina AND sau OR n acceai expresie logica. cnd AND sau OR apar in
aceeai clauza WHERE, toi operatorii AND sunt evaluai mai ntai i apoi toi
operatorii OR. Vom spune ca operatorii AND au o precedenta mai mare decat OR.
Deoarece AND are o precedenta mai mare decat OR urmatoarea declaraie SQL
intoarce toi managerii cu salarii peste 1500$ i toi vnztorii.
SELECT
FROM
WHERE
AND
OR
EMPNO
----7499
7521
7566
7654
7698
7782
7844

EMPNO, ENAME, JOB,


EMP
SAL> 1500
JOB = 'MANAGER'
JOB = 'SALESMAN';

ENAME
------ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
TURNER

JOB
-------SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
SALESMAN

SAL,

SAL
-------1, 600.
1, 250.
2, 975.
1, 250.
2, 850.
2, 450.
1, 500.

DEPTNO

DEPTNO
-----00
00
00
00
00
00
00

30
30
20
30
30
10
30

Daca doriti s selectai toi managerii i vnztorii


cu salarii peste 1500$ putei ntroduce:
SELECT
FROM
WHERE
AND
OR
EMPNO
----7499
7566
7698
7782

EMPNO, ENAME, JOB,


EMP
SAL >1500
(JOB = 'MANAGER'
JOB = 'SALESMAN');
ENAME
-----ALLEN
JONES
BLAKE
CLARK

JOB
--------SALESMAN
MANAGER
MANAGER
MANAGER

SAL
-------1, 600.
2, 975.
2, 850.
2, 450.

SAL,

DEPTNO
-----00
00
00
00

DEPTNO

30
20
30
10

Parantezele specifica ordinea n care operatorii vor fi evaluati. In al doilea exemplu


operatorul OR este evaluat naintea operatorului AND.

TIPURI DE DATE CARACTER I CONDIII


ENAME
(VARCHAR2)

WHERE ENAME = 'SCOTT'

___________
|
|
| SCOTT V V|
|
___|
| SCOTT|____
|
|
| MILLER
|
|
|
~~~~ ~~ ~~~

Oracle nu face umplerea cu blancuri la compararea


cu coloanele VARCHAR2

WHERE ENAME = 'SCOTT'

ENAME
(CHAR)
-----------|
|
| SCOTT V V|
|
. . . . |
| SCOTT|V V|
|
|.
|
| MILLER| V|
~~~~ ~~~~ ~~

Oracle face umplerea cu blancuri la compararea


cu coloanele CHAR.

Tipurile de date caracter i condiii


Tipurile de baza ale datelor stocate ntr-o tabela oracle sunt:caracter, valoare numerica
sau dat calendaristica. Vom discuta toate variantele n detaliu mai tarziu. De cate ori
rezultatele unei condiii implica date de tip caracter, acestea pot varia n funcie de tipul
coloanei;ORACLE nzestreaza coloanela cu tipul CHAR pentru valori de lungime fixa i
cu tipul VARCHAR2 pentru valori de lungime variabila.
Pentru coloanele cu tipul VARCHAR2, Oracle nu umple irul de comparare i de aceea
va face o potrivire exacta. In primul exemplu, doar un singur rnd este intors pentru
conditia:
WHERE ENAME = 'SCOTT'

cnd un alt rnd stocat n coloana ENAMe are mai multe caractere decat irul de
comparat.
Pentru coloanele cu tipul CHAR, oricum, Oracle face umplere cnd valorile coloanelor
sunt iniial stocate, facndu-le pe toate de aceeai lungime.
Aceeai condiie va ntoarce ambele rnduri pentru SCOTT, indiferent de cate spaii de
sfrsit au fost adaugate cnd valorile au fost stocate n tabela.

Oracle umple cu blancuri irul de comparat n cel de al doilea caz i de aceea spaiile
stocate sunt nesemnificative.

Precedenta operatorilor
Toi operatorii sunt aranjai ntr-o ierarhie ceea ce le determina precedenta . Intr-o
expresie operaiile sunt executate n ordinea precedentei lor de la mare la mica.
cnd operatorii au precedenta egala atunci ei se evalueaza de la stanga la dreapta.
1. Toi operatorii de comparaie i SQL au precedenta egala: =, !=, <, >, <=, >=,
BETWEEN. . . AND, IN, LIKE, IS NULL.
2. NOT(pentru a inversa rezultatul unei expresii logice. De ex: WHERE
not(sal>2000))
3. AND
4. OR.
De fiecare dat cnd suntei n dubiu despre care dintre doua operaii vor fi executate
mai ntai cnd o expresie este evaluata, suntei liberi s utilizai parantezele pentru a
clarifica semnificatia dorita i pentru a va asigura ca SQL*Plus face ceea ce doriti.
S presupunem ca doriti s gasiti toi managerii, din orice departament, si toi
funcionarii din departamentul 10:
SELECT *
FROM
EMP
WHERE JOB='MANAGER' OR (JOB = 'CLERK' AND DEPTNO = 10);

Parantezele de deasupra sunt necesare, AND are o precedenta mai mare decat OR, dar
ele clarifica semnificatia expresiei.

SELECT-Sumar
Urmatoarele clauze sunt nchise n comanda SELECT:
SELECT
FROM
WHERE
ORDER BY

[DISTINCT] [*, coloana alias],


tabela
condiie(ii)
[coloana, expr] [ASC/DESC];

SELECT
selecteaza cel putin o coloana
Alias
poate fi folosit pentru coloanele din lista selectata
*

. . . ]

desemneza toate coloanele


DISTINCT
poate fi utilizat pentru eliminarea duplicatelor
FROM Tabela
desemneaza tabela din care provin coloanele
WHERE
restricioneaza cererea la rndurile care ndeplinesc o condiie. Poate conine
valori de coloane, expresii i literali
AND/OR
poate fi utilizat ntr-o clauza WHERE pentru a construi condiii mai complexe.
AND are prioritate peste OR.
()
pot fi utilizate pentru a forta prioritatea
ORDER BY
ntotdeauna apare la sfarsit . Specifica ordinea de sortare. Una sau mai multe
coloane pot fi specificate aici.
ASC
ordinea ascendenta este ordinea de sortar ( implicita) i nu trebuie specificat.
DESC
inverseaza ordinea de sortare de default i trebuie specificat dup un nume de
coloana.
Clauzele pot fi introduse pe linii separate n buffer i tabelarea este utilizat pentru
claritate i n editare.

Logarea la SQL*Plus
Aceasta seciune explica cum s ne logam la SQL*Plus i liniile de iesire ale tipurilor de
comenzi ce pot rezulta n cadrul sau.
SQL*Plus
SQL*Plus este un program scris de Corporatia Oracle, ce produce un mediu pentru
comenzile SQL ce pot fi tastate direct sau rulate dintr-un fiier de comanda. In plus,
comenzile SQL pot fi derivate. Ele sunt folosite pentru:

formatarea rezultatelor
setarea optiunilor

editarea i stocarea declaraiilor SQL

Odat ce v-ai logat la sistemul vostru de operare, sunt 3 moduri pentru a va loga la
SQL*Plus:
1. SQLPLUS
o Vei vedea dup aceasta un mesaj ca acesta:

SQL*Plus: Version 3. 1. 1 Production on Mon Oct 4 1993 Copyright (c)


1992, Oracle Corporation, California, USA. All rights reserved. Enter
Username:

Introducei numele vostru de user i apasai RETURN: SQL*Plus va afia


promptul :"Enter Password:". Introducei parola voastra i apasai din
nou RETURN.

Pentru protecia voastra, parola nu va apare pe ecran. SQL*Plus va afia


promptul sau: SQL>

Aceasta indica linia de comanda . Acolo sunt doua feluri de comenzi i


putei ntroduce pe acesta linie de comanda:comenzi SQL sau comenzi
SQL*Plus.

2. SQLPLUS username
Vei fi ndemnai s va dai parola.

3. SQLPLUS username/password
Vei fi logai la SQL*Plus. In acest caz parolz v a fi afiata.

Alegei metoda pe care o preferati.

Editarea declaraiilor SQL utiliznd comenzi SQL*Plus


1. Cnd vei ntroduce o comanda SQL, aceasta este stocat ntr-o zona de memorie
utilizat de buferul SQL i ramane acolo pana ce vei ntroduce o noua comanda.
2. Daca apasai [RETURN] nainte de a completa o comanda, SQL*Plus va afia un
numar de linie.
3. Terminatorul pentru declaraiile SQL este un ';'.
4. Cat timp declaratia SQL este n bufer, sunt cateva operaii de editare directe care
pot fi executate utiliznd comenzi SQL*Plus:

ul

Comanda
Abrevierea
ROL
---------------------------------------------------------------------APPEND text
A text
adauga 'text' la sfarsitul liniei curente.
CHANGE
C/old/new
schimba vechiul text cu noul text n linia
curenta.
CHANGE
C/text/
sterge 'text'-ul din linia curenta
CLEAR BUFFER
CL BUFF
sterge toate liniile din buferul SQL.
DEL
sterge linia curenta.
INPUT
I
insereaza un numar nedefinit de linii.
INPUT
I text
nsereaza o linie constituita din 'text'LIST
LIST n
LIST m,

n).
din

RUN

L
Ln

respectiv
listeaza toate liniile din buferul SQL.
listeaza o linie (specificat de n)
listeaza un numar de linii(de la m la

afieaza i executa comanda SQL curenta

L m n

buffer.
executa

comanda

SQL care

este curenta

bufer.

Diversitatea comenzilor SQL*Plus


Comenzile SQL (precum SELECT) sunt mijloace de acces la date prin kernelul Oracle.
Comenzile SQL sunt utilizate n special pentru controlul mediului, formatarea
rezultatelor interogarilor i controlul fiierelor. Comenzile identificate aici sunt
amestecate i trebuie s le folosii n urmtoarele exerci#355;ii.
Comenzile SQL sunt introduse la promptul SQL> pe o linie, ele nu vor deschide un
buffer.
Comanda + Descriere
SAVE numefis
permite salvarea ntr-un fiier a coninutului buferului SQL.
GET numefis
ncarca coninutul unui fiier salvat n prealabil n buffer.
START numefis
ruleaza un fiier de comanda salvat n prealabil. fiierele de comanda sunt tratate
n capitolul 10.
ED numefis
utilizeaza un editor de default pentru a edita coninutul unui fiier salvat.
EXIT
paraseste SQL*Plus.

Capitolul 2 Exerci#355;ii-Introducere n SQL


Aceste exerci#355;ii intenioneaza s dezvaluie toate subiectele neobservate la o lectura
anterioara. Daca avei timp ncercai ntrebarea 13.
Workshop
1.

Selectai toate informaiile din tabela SALGRADE.


GRADE
----1
2
3
4
5

2.

LOSAL
----700
1201
1401
2001
3001

HISAL
----1200
1400
2000
3000
9999

Selectai toate informaiile din tabela EMP.

EMPNO ENAME

JOB

MGR

HIREDATE

SAL

COMM DEPTNO

----7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

----SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

---7902
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

-------13-JUN-83
15-AUG-83
26-MAR-84
31-OCT-83
05-DEC-83
11-JUL-84
14-MAY-84
05-MAR-84
09-JUL-84
04-JUN-84
04-JUN-84
23-JUL-84
05-DEC-83
21-NOV-83

-------- ------- -----800. 00


20
1, 600. 00
300. 00
30
1, 250. 00
500. 00
30
2, 975. 00
20
1, 250. 00 1, 400. 00
30
2, 850. 00
30
2, 450. 00
10
3, 000. 00
20
5, 000. 00
10
1, 500. 00
. 00
30
1, 100. 00
20
950. 00
30
3, 000. 00
20
1, 300. 00
10

14 nregistrri selectate.
3.

Listai toi angajaii care au salariul ntre 1000 i 2000.

ENAME DEPTNO
----- -----ALLEN
30
WARD
30
MARTIN
30
TURNER
30
ADAMS
20
MILLER
10

SAL
-------1, 600.
1, 250.
1, 250.
1, 500.
1, 100.
1, 300.

00
00
00
00
00
00

6 nregistrri selectate.

4. Listai numerele de departament i numele n ordinea numelor


departamentelor.
DEPTNO
-----10
40
20
30
5.

DNAME
---------ACCOUNTING
OPERATIONS
RESEARCH
SALES

Afiai toate tipurile diferite de job-uri.

JOB
--------ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
6.

Listai detaliile angajailor din departamentele 10 i 20 n


ordinea alfabetic a numelui.

EMPNO
----7876
7782
7902
7566
7839
7934

ENAME
----ADAMS
CLARK
FORD
JONES
KING
MILLER

JOB
----CLERK
MANAGER
ANALYST
MANAGER
PRESIDENT
CLERK

MGR
---7788
7839
7566
7839

HIREDATE
--------04-JUN-84
14-MAY-84
05-DEC-83
31-OCT-83
09-JUL-84
7782 21-NOV-83

SAL
-------1, 100.
2, 450.
3, 000.
2, 975.
5, 000.
1, 300.

COMM DEPTNO
---- -----00
20
00
10
00
20
00
20
00
10
00
10

7788 SCOTT
7369 SMITH

ANALYST
CLERK

7566 05-MAR-84
7902 13-JUN-83

3,

000. 00
800. 00

20
20

8 nregistrri selectate.
7. Listai numele i ocupaiile tuturor funcionarilor
n departamentul 20.
ENAME
-----SMITH
ADAMS

JOB
----CLERK
CLERK

8.

Afiai toi angajaii ai caror nume conine TH sau LL


n interior.

ENAME
-----SMITH
ALLEN
MILLER
9.

Listai urmatoarele detalii pentru toi angajaii care


au un manager.

ENAME
-----SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
TURNER
ADAMS
JAMES
FORD
MILLER

JOB
-------CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
SALESMAN
CLERK
CLERK
ANALYST
CLERK

SAY
-------800. 00
1, 600. 00
1, 250. 00
2, 975. 00
1, 250. 00
2, 850. 00
2, 450. 00
3, 000. 00
1, 500. 00
1, 100. 00
950. 00
3, 000. 00
1, 300. 00
13 nregistrri selectate.

10.

Afieaza numele i totalul remuneraiei pentru toi angajaii.

ENAME
REMUNERATION
------- -----------SMITH
9600
ALLEN
19500
WARD
15500
JONES
35700
MARTIN
16400
BLAKE
34200
CLARK
29400
SCOTT
36000
KING
60000
TURNER
18000
ADAMS
13200
JAMES
11400
FORD
36000
MILLER
15600

14 nregistari selectate.
11.
ENAME
------SMITH
ALLEN
JONES
MARTIN
FORD
MILLER

Afieaza toi salariaii care au fost angajai n anul 1983.


DEPTNO
-----20
30
20
30
20
10

HIREDATE
--------13-JUN-83
15-AUG-83
31-OCT-83
05-DEC-83
05-DEC-83
21-NOV-830
6 nregistrri selectate.

12. Afiai numele, salariul anual i comisionul pentru toi


vnztorii
ai caror salariu lunar este mai mare decat comisionul lor. Ieirea va
fi
ordonat dup salariu,
cele m ai mari primele. Daca doi sau mai
muli
angajai au acelai salariu trebuie sortai dup nume n odinea
celor
mai mari salarii.
ENAME
-----ALLEN
TURNER
WARD

ANNUAL_SAL
COMM
---------- -------19200
300. 00
18000
. 00
15000
500. 00

Incercati-va aptitudinile cu acesta.


13.

Selectai informaiile dup cum sunt selectate.

Cine, cnd i cum


-------------------------------------------------------------------SMITH HAS HELD THE POSITION OF CLERK
IN DEPT 20 SINCE 13-JUN-83
ALLEN HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 15-AUG-83
WARD
HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 26-MAR-84
JONES HAS HELD THE POSITION OF MANAGER
IN DEPT 20 SINCE 31-OCT-83
MARTIN HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 05-DEC-83
BLAKE HAS HELD THE POSITION OF MANAGER
IN DEPT 30 SINCE 11-JUN-84
CLARK HAS HELD THE POSITION OF MANAGER
IN DEPT 10 SINCE 14-MAY-84
SCOTT HAS HELD THE POSITION OF ANALYST
IN DEPT 20 SINCE 05-MAR-84
KING
HAS HELD THE POSITION OF PRESIDENT IN DEPT 10 SINCE 09-JUL-84
TURNER HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 04-JUN-84
ADAMS HAS HELD THE POSITION OF CLERK
IN DEPT 20 SINCE 04-JUN-84
JAMES HAS HELD THE POSITION OF CLERK
IN DEPT 30 SINCE 23-JUL-84
FORD
HAS HELD THE POSITION OF ANALYST
IN DEPT 20 SINCE 05-DEC-83
MILLER HAS HELD THE POSITION OF CLERK
IN DEPT 10 SINCE 21-NOV-83
14 nregistrri selectate.

Capitolul 2 - Rezolvri

1.

SELECT
FROM

*
SALGRADE;

2.

SELECT
FROM

*
EMP;

3.

SELECT
FROM
WHERE

ENAME,
DEPTNO,
SAL
EMP
SAl BETWEEN 1000 AND 2000;

4.

SELECT
FROM
ORDER BY

DEPTNO,
DEPT
DNAME;

5.

SELECT
FROM

DISTINCT JOB
EMP;

6.

SELECT
FROM
WHERE
ORDER BY

*
EMP
DEPTNO IN (10,
ENAME;

7.

SELECT
FROM
WHERE
AND

ENAME, JOB
EMP
JOB = 'CLERK'
DEPTNO = 20;

8.

SELECT
FROM
WHERE
OR

ENAME
EMP
ENAME LIKE '%TH%'
ENAME LIKE '%LL%';

9.

SELECT
FROM
WHERE

ENAME,
JOB,
SAL
EMP
MGR IS NOT NULL;

10.

SELECT
FROM

ENAME,
EMP;

11.

SELECT
FROM
WHERE

ENAME,
DEPTNO,
HIREDATE
EMP
HIREDATE LIKE '%83';

12.

SELECT
FROM
WHERE
AND JOB
ORDER BY

ENAME,
SAL*12 ANNUAL SAL,
EMP
SAL >COMM
= 'SALESMAN'
SAL DESC,
ENAME;

13.

SELECT

FROM

DNAME

20)

SAL*12+NVL(COMM,

0) REMUNERATION

COMM

ENAME||
' HAS HELD THE POSITION OF '||
JOB||
' IN DEPT '||
DEPTNO||
' SINCE '||
HIREDATE "Who,
what and when"
EMP;

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