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
o
o
o
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
State
Character
Phone
Character

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

NOT NULL,

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.
o plasnd un punct i virgul urmat de semnul / (slash) pe ultima linie n buffer.
o plasnd un slash (/) la prompterul SQL.
o 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
7698
7782
7788
7839
7844
7876
7900
7902

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

*
EMP;
JOB
MGR
------- ---CLERK
7902
SALESMAN 7698
SALESMAN 7698
MANAGER 7839
SALESMAN 7698
MANAGER 7839
MANAGER 7839
ANALYST 7566
PRESIDENT
SALESMAN 7698
CLERK
7788
CLERK
7698
ANALYST 7566

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
11-JUN-84 2, 850. 00
30
14-MAY-84 2, 450. 00
10
05-MAR-84 3, 000. 00
20
09-JUL-84 5, 000. 00
10
04-JUN-84 1, 500. 00
. 00
30
04-JUN-84 1, 100. 00
20
23-JUL-84
950. 00
30
05-DEC-83 3, 000. 00
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

ENAME,

SAL*12 + COMM ANNUAL_SAL

FROM

EMP;

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,

0) ANNUAL_SAL

ENAME
ANNUAL_SAL
--------- ---------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

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,

'01-JAN-88')

NVL(NUMBERCOLUMN,
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
EMP;

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

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
DEPTNO
-----10
20
30

DISTINCT
EMP;

DEPTNO

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,

DEPTNO

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

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

SMITH
TURNER
WARD

CLERK
SALESMAN
SALESMAN

9600
18000
15000

20
30
30

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
SCOTT
MARTIN
FORD
MILLER
JONES
ALLEN
SMITH

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

HIREDATE
--------23-JUL-84
09-JUL-84
11-JUN-84
04-JUN-84
04-JUN-84
14-MAY-84
26-MAR-84
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

SAL DESC;

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

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

DNAME,

DEPTNO

FROM
WHERE

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
MARTIN
TURNER
ADAMS
MILLER

1,
1,
1,
1,
1,

250.
250.
500.
100.
300.

00
00
00
00
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
--------!=
^=
<>
NOT NUMECOL=
NOT NUMECOL>

Descriere
---------diferit de(VAX, UNIX,
diferit de(IBM)
diferit de(toate o/s)
diferit de
mai mic sau egal

PC)

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
SAL
--------- -------SMITH
800. 00
JONES
2, 975. 00
BLAKE
2, 850. 00

CLARK
SCOTT
KING
JAMES
FORD

2,
3,
5,

450. 00
000. 00
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:

introducei:

ENAME, MGR
EMP
MGR IS NOT NULL;

ENAME
MGR
------- ----SMITH
7902
ALLEN
7698
WARD
7698
JONES
7839
MARTIN
7698
BLAKE
7839
CLARK
7839
SCOTT
7566
TURNER
7698
ADAMS
7788
JAMES
7698
FORD
7566
MILLER
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
----7369
7499
7521
7654
7844
7876
7900
7934

EMPNO, ENAME, JOB, SAL


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

ENAME
-------SMITH
ALLEN
WARD
MARTIN
TURNER
ADAMS
JAMES
MILLER

JOB
------CLERK
SALESMAN
SALESMAN
SALESMAN
SALESMAN
CLERK
CLERK
CLERK

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

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

EMPNO, ENAME,
EMP
SAL> 1500

JOB,

SAL,

DEPTNO

AND
OR
EMPNO
----7499
7521
7566
7654
7698
7782
7844

JOB = 'MANAGER'
JOB = 'SALESMAN';
ENAME
------ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
TURNER

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

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

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

DEPTNO
-----00
00
00
00

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

WHERE ENAME = 'SCOTT'

ENAME
(VARCHAR2)
___________
|
|
| 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:
o SQL*Plus: Version 3. 1. 1 Production on Mon Oct 4 1993 Copyright (c)
1992, Oracle Corporation, California, USA. All rights reserved. Enter
Username:
o Introducei numele vostru de user i apasai RETURN: SQL*Plus va afia
promptul :"Enter Password:". Introducei parola voastra i apasai din
nou RETURN.
o Pentru protecia voastra, parola nu va apare pe ecran. SQL*Plus va afia
promptul sau: SQL>
o 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
o Vei fi ndemnai s va dai parola.
3. SQLPLUS username/password
o 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:
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'ul
LIST
LIST n
LIST m,

L
Ln
n

L m n

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

n).
RUN

afieaza i executa comanda SQL curenta

din
/

buffer.
executa

comanda

SQL care

este curenta

n
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.
EMPNO
----7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

LOSAL
----700
1201
1401
2001
3001

HISAL
----1200
1400
2000
3000
9999

Selectai toate informaiile din tabela EMP.


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

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

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

HIREDATE
-------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

SAL
COMM DEPTNO
-------- ------- -----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 DNAME
------ ----------

10
40
20
30
5.

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
7788
7369

ENAME
----ADAMS
CLARK
FORD
JONES
KING
MILLER
SCOTT
SMITH

JOB
----CLERK
MANAGER
ANALYST
MANAGER
PRESIDENT
CLERK
ANALYST
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
7566 05-MAR-84
7902 13-JUN-83

SAL COMM DEPTNO


-------- ---- -----1, 100. 00
20
2, 450. 00
10
3, 000. 00
20
2, 975. 00
20
5, 000. 00
10
1, 300. 00
10
3, 000. 00
20
800. 00
20

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

JOB
----CLERK
CLERK

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

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

SAY
-------800. 00
1, 600. 00
1, 250. 00
2, 975. 00
1, 250. 00
2, 850. 00
2, 450. 00
3, 000. 00

TURNER
ADAMS
JAMES
FORD
MILLER

SALESMAN
CLERK
CLERK
ANALYST
CLERK

1,
1,

500. 00
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;

DNAME

20)

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

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