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 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 o o 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 ----7902 7698 7698 7839 7698 7839 7839 7566 7698 7788 7698 7566 7782 MGR

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

30 10 20 10 30 20 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 ENAME, EMP; Descriere --------adunare scdere nmulire mprire 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; DEPTNO -----20 30 30 20 30 30 10 20 10 30 20 30 20 10

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

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, 0) ANNUAL_SAL

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

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, NVL(CHARCOLUMN, '01-JAN-88') 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 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 --------CLERK MANAGER PRESIDENT ANALYST CLERK MANAGER CLERK MANAGER SALESMAN JOB

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 --------ADAMS ALLEN BLAKE CLARK FORD JAMES JONES KING MARTIN MILLER SCOTT SMITH TURNER WARD ENAME, EMP ENAME; JOB, SAL*12, DEPTNO

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

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 --------JAMES KING BLAKE TURNER ADAMS CLARK WARD ENAME, JOB, HIREDATE EMP HIREDATE DESC; 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

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

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

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'; JOB, DEPTNO

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

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 ---------SALES OPERATIONS DNAME, DEPTNO DEPT DEPTNO >20; 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 -------SMITH SCOTT ENAME EMP ENAME LIKE 'S%';

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 ----WARD KING FORD ENAME EMP ENAME LIKE '____';

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 MGR ---ENAME, MGR EMP MGR IS NULL;

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> Operatori SQL Operator -------NOT BETWEEN NOT IN NOT LIKE IS NOT NULL

diferit de mai mic sau egal

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 --------SMITH JONES BLAKE CLARK SCOTT KING JAMES FORD ENAME, SAL EMP SAL NOT BETWEEN 1000 AND 2000; SAL -------800. 00 2, 975. 00 2, 850. 00 2, 450. 00 3, 000. 00 5, 000. 00 950. 00 3, 000. 00 introducei:

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 ENAME, MGR EMP MGR IS NOT NULL;

introducei:

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

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'; SAL -------1, 100. 00 1, 300. 00

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

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'; JOB -------SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER SALESMAN SAL, DEPTNO

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

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


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
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, RUN L Ln n R 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 afieaza i executa comanda SQL curenta

n). din

buffer. executa bufer.

comanda

SQL care

este curenta

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. JOB MGR HIREDATE SAL COMM DEPTNO

EMPNO ENAME

----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. SAL -------1, 600. 1, 250. 1, 250. 1, 500. 1, 100. 1, 300.

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

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

EMPNO ----7876 7782 7902 7566 7839 7934

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 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. 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 -----SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT TURNER ADAMS JAMES FORD MILLER

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. 2. 3.

SELECT FROM SELECT FROM SELECT FROM WHERE SELECT FROM ORDER BY SELECT FROM SELECT FROM WHERE ORDER BY SELECT FROM WHERE AND SELECT FROM WHERE OR SELECT FROM WHERE SELECT FROM SELECT FROM WHERE SELECT FROM WHERE AND JOB ORDER BY SELECT

* SALGRADE; * EMP; ENAME, DEPTNO, SAL EMP SAl BETWEEN 1000 AND 2000; DEPTNO, DEPT DNAME; DNAME

4.

5. 6.

DISTINCT JOB EMP; * EMP DEPTNO IN (10, ENAME; ENAME, JOB EMP JOB = 'CLERK' DEPTNO = 20; ENAME EMP ENAME LIKE '%TH%' ENAME LIKE '%LL%'; ENAME, JOB, SAL EMP MGR IS NOT NULL; ENAME, EMP; SAL*12+NVL(COMM, 0) REMUNERATION

20)

7.

8.

9.

10. 11.

ENAME, DEPTNO, HIREDATE EMP HIREDATE LIKE '%83'; ENAME, SAL*12 ANNUAL SAL, EMP SAL >COMM = 'SALESMAN' SAL DESC, ENAME; COMM

12.

13.

FROM

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

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