Sunteți pe pagina 1din 45

COLEGIUL ECONOMIC RAMNICU VALCEA

Elev : Profesor
coordonator:
Deliu Cristian Zamfir Sorin

SESIUNEA MAI 2009

1
1. Introducere………………………………………………………………………….

2. Baze de date………………………………………………………………………….

3. Proiectarea bazei de date ……………………………………………………….

3.1. Enunt……………………………………………………………………………………………

3.2. Diagrama initiala …………………………………………………………………………..

3.3. Reguli…………..………………………………………………………………………………

3.4. Diagrama finala……………………………………………………………………………..

3.5. Structura Tabelelor………………………………………………………………………..

3.6. Cerinte …………………………………………………………………………………………

3.7. Rezolvari ………………………………………………………………………………………

2
Misterul care înconjura calculatorul personal a dispărut şi probabil este timpul să depăşim
clişeele clasice. Ştiţi care sunt acestea. PC-ul pe care astăzi îl puteţi ţine într-o mână este la fel
de puternic ca şi calculatoarele de mărimea unei nave de război din anii ’50 care consumau tot
atâta energie cât toate fabricile din America de Nord puse la un loc - ceea ce probabil nu ar fi
prea mult, deoarece acestea ar ieşi prea mototolite din procesul de combinare. Nu mai este
nevoie să apelaţi la sfaturile unui guru ca să cumpăraţi un calculator. Puteţi să cumpăraţi un PC
din aceleaşi magazine din care cumpăraţi scule de pescuit, ciorapi sau maşini de spălat vase.
Copiii dumneavoastră - sau poate chiar dumneavoastră - probabil nici nu ştiu cum ar arăta
lumea fără calculatoare.

Unul dintre cele mai importante motive ale acestei popularităţi este faptul că PC-urile
au devenit atât de uşor de folosit. Mişcaţi puţin mouse-ul şi puteţi să editaţi o secvenţă video
sau să trimiteţi un mesaj electronic emirului din Bahrain. Învăţaţi să folosiţi un singur program
şi deja aveţi o imagine solidă a modului în care funcţionează toate celelalte.

Dar această uşurinţă de folosire nu este decât o imensă faţadă. În spatele scenei, atât
programele, cât şi calculatoarele necesare pentru a le rula sunt mult mai complicate decât
produsele, oricum complexe, de acum câţiva ani. În ultimul deceniu, programele au evoluat de
o mie de ori şi, din fericire, calculatoarele sunt de o mie de ori mai puternice. Este o minune,
dacă nu chiar un miracol - presupunând, desigur, că aceţi deja calculatorul potrivit pentru
programul pe care vreţi să-l rulaţi.

Calculatorul nu este ceva de care să vă fie teamă şi nu trebuie să fie un mister. Este o
maşină, şi chiar una destul de simplă. O maşină pe care puteţi învăţa să o stăpâniţi. Dacă există
ceva care îndepărtează oamenii de încercarea de a înţelege PC-urile, este elementul mistic din
jurul calculatoarelor.

3
Şi totuşi PC-urile sunt minunate, datorită modalităţilor prin care vă fac viaţa şi munca
mai uşoare şi uneori, mai distractive. Devenind din ce în ce mai puternice în ultimii ani,
calculatoarele au devenit din ce în ce mai minunate, preluând noi sarcini, precum editarea
informaţiilor video în Web sau rularea unor jocuri care tind să devină mai realiste decât însăşi
realitatea.

Ceea ce face un PC să fie util nu este partea hardware. Fără nici un ajutor, un PC este
mai leneş decât o zi fierbinte de vară la ţară. Nu face nimic alceva decât ceea ce îi spuneţi să
facă. Departe de a-şi folosi vasta inteligenţă într-un complot pentru preluarea controlului
asupra lumii, a unei nave spaţiale sau a timpului dumneavoastră liber, un PC nu este câtuşi de
puţin imaginativ. Nu face decât să vă aştepte ordinele şi să le execute ca un sclav. Nici măcar
unul dintre toate PC-urile din întreaga lume nu a avut vreodată un gând original. Tot ceea ce
fac PC-urile s-a născut în mintea umană.

4
Principiile modelului relaţional şi bazele de date relaţionale au fost pentru prima dată
prezentate de matematicianul (de la centrul de cercetări al IBM) Dr. E. F.Codd, în iunie 1970,
când a publicat un articol numit "Un model relaţional pentru marile bănci de date" (în original A
Relational Model of Data for Large Shared Databanks ). In respectivul articol, el a propus
modelul relaţional pentru sistemele de baze de date. Trebuie spus că şi până atunci fuseseră
manipulate şi prelucrate date economice, cataloage ale bibliotecilor, fişiere de personal... însă
într-un mod mai puţin formalizat, neunitar. Era de fapt pe vremea când portabilitatea aplicaţiilor
de pe un sistem de calcul pe altul era încă un vis, când majoritatea aplicaţiilor care manevrau
seturi mari de date se programau în limbaje precum COBOL, Fortran, PL/1, Algol.

Au mai existat (chiar înaintea introducerii modelului relaţional) modelele ierarhic şi


reţea. Modelul ierarhic înseamnă o structură arborescentă pentru bazele de date, pentru
organizarea informaţiei în general. Avem pentru asta exemplul tipic al structurii de fişiere pe
disc, sau modul în care s-au organizat sistemele HELP, încă de sub MS-DOS.

Modelul reţea, folosind aparatul teoriei mulţimilor, s-a dovedit mai general, incluzând
modelul ierarhic ca un caz particular al bazei de date de tip reţea.

Treptat, modelul relaţional s-a extins, dovedindu-de mai simplu şi mai eficient.

In Internet (pe Web) vorbim despre Baze de Date Distribuite, plasate pe mai multe
servere şi accesibile de pe diferite staţii de la distanţă. Este vorba de un nivel mai ridicat de
complexitate al gestiunii informaţiilor şi al aplicaţiilor specifice, dar, în majoritatea cazurilor
este vorba şi atunci de Baze de Date Relaţionale.

Mai mult, căutările în World Wide Web, indiferent care motor de căutare îl folosim, nu
sunt decât căutări în bazele de date construite de aceste motoare de căutare cu datele colectate în
procesul de investigare al paginilor Web accesibile. Iar diferenţele pe care, eventual, le sesizăm
în răspunsurile diferitelor motoare de căutare depind tocmai de modul în care sunt construite şi
întreţinute respectivele baze de date.

Chiar dacă F.E. Codd, ca matematician, a construit un model riguros, cu concepte


matematice, baza de date relaţională este percepută de utilizatorii săi ca o colecţie de tabele
(tablouri bidimensionale de date, numite şi relaţii), noţiune care nu necesită definiţii
suplimentare.

5
Sunt aici patru concepte care trebuie reţinute şi înţelese:

1. tabelele
2. coloanele tabelului
3. rândurile tabelului
4. câmpurile din tabel, de pe o anumită coloană şi linie.

Iată un exemplu care ilustrează aceste concepte:

Tabela CLIENŢI

--------------------------------------------------
| NrS NUME STARE ORAS |
|------------------------------------------------|
| S1 Ionescu 20 LONDRA |
| S2 Popescu 10 PARIS |
| S3 Teodorescu 30 PARIS |
--------------------------------------------------

Tabela PĂRŢI
---------------------------------------------------------
| NrP NUMEP CULOARE GREUTATE ORAS |
|-------------------------------------------------------|
| P1 NIT ROSU 12 LONDRA |
| P2 PIRON VERDE 17 PARIS |
| P3 SURUB ALBASTRU 17 ROME |
| P4 SURUB ROSU 14 LONDON |
---------------------------------------------------------
^
coloană

Tabela ORDINI
-------------------
| NrS NrP QTY |
|-----------------|
| S1 P1 300 |
| S1 P2 200 |
nd--------->| S1 P3 400 |
| S2 P1 300 |
| S2 P2 400 --|----câmp
| S3 P3 200 |
-------------------

Modelul relaţional al bazei de date imită procesele unei ramuri a algebrei, cunoscute sub
numele de "Algebră relaţională". Aceste procese implică:

• o colecţie de obiecte cunoscute sub numele de RELAŢII


• o mulţime de operatori care acţionează asupra relaţiilor pentru a
produce noi relaţii.

O relaţie, în cazul discret, poate fi privită şi înţeleasă ca o Tabela. Modificarea datelor se


realizează prin operaţii relaţionale aplicate asupra tabelelor. Spre exemplu, restricţia unei

6
relaţii, a unui tabel, va fi un nou tabel în care se păstrează doar anumite linii. Iar proiecţia unei
relaţii - unui tabel - va fi un nou tabel în care se păstrează doar anumite coloane.

Operatorii relaţionali

Operatorii relaţionali (în cadrul bazelor de date relaţionale) sunt definiţi în


tabelul următor:

Operatorul
Descrierea
Relaţional

este o operaţie care preia şi afişează datele din


relaţie.Este posibil să se afişeze toate rândurile sau doar
Restricţia rândurile care îndeplinesc o anume condiţie (sau mai multe
condiţii). Aceasta este de multe ori numită "submulţime
orizontală"

este operaţia care afişează anumite coloane din


Proiecţia
relaţie, fiind numită de aceea şi "submulţime verticală".

este rezultatul obţinut când rândurile a două mulţimi


Produsul
de date sunt concatenate conform condiţiilor specificate.

este rezultatul obţinut când rândurile a două mulţimi


"Join"
de date sunt concatenate conform condiţiilor specificate.

afişează toate rândurile care apar în una, în cealaltă,


Reuniunea
sau în ambele relaţii.

Intersecţia afişează toate rândurile care apar în ambele relaţii.

afişează rândurile care apar numai în prima relaţie


Diferenţa fără să apară în cea de a doua (în SQL se utilizează chiar
semnul - operatorul minus).

Iată un exemplu:

PRODUS
----------------- ------------------ --------------------------------
| Ionescu | | Profesor | | Ionescu | Profesor |
| Popescu | produs | Cercetător |------>| Ionescu | Cercetător |
| Iliescu | ------------------ | | |
----------------- | Popescu | Profesor |
| Popescu | Cercetător |
| | |
| Iliescu | Profesor |
| Iliescu | Cercetător |
--------------------------------
JOIN

7
----------------- -------------------- -----------------------------------
| Iliescu | 10 | | 10 | Secretariat | | Iliescu | 10 | 10 | Secretariat|
| Ţopescu | 10 | J | 20 | Cercetare |-->| Ţopescu | 10 | 10 | Secretariat|
| Ionescu | 20 | | 30 | Vânzări | | Ionescu | 20 | 20 | Cercetare |
| Ştefan | 30 | | 40 | Marketing | | Ştefan | 30 | 30 | Vânzări |
----------------- -------------------- ------------------------------------

Proprietăţi ale bazelor de date relaţionale

• O bază de date relaţională apare ca o colecţie de relaţii (tabele)


• Există o mulţime de operatori pentru transformarea şi combinarea relaţiilor:
o selecţia,
o proiecţia,
o produsul,
o join-ul,
o reuniunea,
o intersecţia,
o diferenţa
• Nu apar pointeri; conexiunile sunt făcute numai pe baza datelor.
• Există o independenţă totală a datelor.
• Limbajul utilizat pentru interogarea bazei de date este non-procedural şi
similar limbii engleze.
• Utilizatorul nu specifică calea de acces şi nu are nevoie să ştie cum este
aranjată fizic informaţia.
• Comenzile pentru selecţia sau refacerea datelor, cât şi acelea pentru
realizarea schimbărilor în baza de date sunt incluse într-un singur limbaj,
standardizat acum ca SQL.

Proprietăţile relaţiilor tabelare

Fiecare tabelă, individual, are următoarele proprietăţi:

• Nu există rânduri duplicate


• Nu există nume de coloane identice (duplicate)
• Ordinea rândurilor este neimportantă
• Ordinea coloanelor este neimportantă
• Valorile (câmpurile) sunt atomice (nedecompozabile).

SQL
• este limbajul utilizat pentru a accesa o bază de date relaţională;
• poate fi utilizat atunci când accesul la baza de date este necesar, de fiecare
instrument de gestiune a bazelor de date (Access, Oracle, SQL-Server, MySQL,...);
• este un limbaj simplu, ne-procedural, cu comenzi intuitive în limba engleză;
• este un limbaj standard pentru bazele de date.

Vorbind despre SQL, în multe cărţi se spune SQL = Structured Querry Language. Dar
SQL nu este un limbaj structurat în sensul structurării limbajelor de programare. De fapt, curând
după apariţia lucrării lui Codd, la IBM s-a realizat un sistem prototip pentru baze de date
relaţionale. S-a numit System R şi se baza pe un set de comenzi către baza de date, set de

8
comenzi numit SEQUEL (Structured English QUEry Language). Cu alte cuvinte un subset de
cereri către baza de date formulate strcturat în engleză. A fost punctul de plecare pentru SQL,
care a fost standardizat ca limbaj pentru bazele de date independent de sistemul de gestiune şi
de platforma de calcul. De aceea s-a şi scurtat numele, pentru a nu mai apare confuzii cu System
R şi cu vechiul limbaj SEQUEL.

O primă standardizare a SQL s-a petrecut încă din 1986, când au apărut specificaţiile
ANSI (American National Standards Institute), extinse în standardizarea ISO din 1989, apoi în
1992 şi încă mai recent, în 1999.

Simplitatea limbajului se reflectă în numărul mic de comenzi (zece) şi în faptul că nici


dimensiunea bazei de date, numărul de înregistrări, sau numărul de coloane, nici tipul datelor nu
influenţează forma comenzilor SQL. Ca urmare, toate sistemele actuale de gestiune de baze de
date acceptă comenzi în limbajul SQL.

In sistemele Oracle de baze de date, pentru scrierea aplicaţiilor şi pentru manipularea


datelor în afara bazei de date, se foloseşte un limbaj procedural numit PL/SQL, o extensie
procedurală a limbajului SQL, de fapt principalul limbaj (procedural) pentru realizarea
aplicaţiilor în sistemele Oracle . In particular, SQL-Plus este un produs Oracle în care pot fi
utilizate limbajele SQL şi PL/SQL.

Vom vedea că, în sistemul MySQL (de fapt în pachetul PHP, MySQL, Apache Web
server, pe care-l vom studia mai aprofundat) avem funcţii şi rutine speciale destinate scrierii
unor programe cu comenzi SQL, adică înglobării SQL într-un secvenţă procedurală structurată.

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 relaţionale, în


colectivul de la IBM s-a realizat un prototip de sistem de management al bazelor de date
relaţionale, numit System R, împreună cu un limbaj dedicat (pentru a crea şi a opera cu bazele
de date relaţionale), numit SEQUEL (Structured English QUEry Language). Expresiile din
SEQUEL seamănă cu propoziţiile din limba engleză, fiind desigur mai structurate. In paralel
firma IBM a scos pe piaţă produse cu baze de date relaţionale, bazate pe System R. Dar cu un
limbaj puţin diferit de SEQUEL. Astfel că l-a botezat SQL, eliminând vocalele din Sequel şi
trecând la pronunţia "es-qu-el". Chiar dacă sunt autori care consideră că SQL provine de la
Structured Query Language, asta nu-i adevărat.Iar SQL nu are nimic de a face cu limbajele de
programare structurată, precum Pascal sau C++.

In 1979, Corporaţia Oracle introduce prima implementare a SQL în variantă comercială.

In scurt timp SQL devine un standard industrial pentru bazele de date relaţionale.
Institutul National American de Standarde (ANSI) l-a adoptat ca limbaj standard pentru
gestiunea bazelor de date (RDBMS), încă în anul 1986. Organizaţia Internaţională de Standarde
(ISO) a adoptat deasemenea SQL ca limbaj standard pentru RDBMS. Toate RDBMS-urile

9
suportă unele forme de SQL şi toţi vânzătorii de astfel de sisteme s-au aliniat sau intenţionează
să se alinieze la standardele ANSI. Asta nu înseamnă că nu mai apar diferenţe. Chiar şi la
produsele aceleaşi firme, Microsoft Access şi SQL Server, pot fi semnalate diferenţe î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 (iniţial numit SEQUEL, ca limbaj de
interogare structurată) este limbajul standardizat ANSI şi ISO, utilizat de majoritatea sistemelor
ce manevrează baze de date relaţionale.

Trăsături caracteristice ale limbajului SQL

• SQL, ca şi majoritatea limbajelor de programare, foloseşte 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 informaţiile dorite, nu
cum se obţin acestea. Cu alte cuvinte, SQL nu cere să fie specificată metoda de
acces la date.
• Execuţia comenzilor SQL asupra înregistrărilor nu se poate face decât
secvenţial, asupra câte unei singure înregistrări. Setul de înregistrări fiind văzut ca
set de linii ale unui tabel.
• SQL poate fi folosit de un şir de utilizatori, incluzând administratorul bazei de
date, programatorii de aplicaţii, personalul de management şi multe alte tipuri de
utilizatori.
• SQL include comenzi pentru o varietate de sarcini, incluzând:
o selecţia unor date
o inserarea, extragerea şi ştergerea rândurilor dintr-un tabel
o crearea, modificarea şi ştergerea obiectelor de tip bază de date
o controlul accesului la baza de date şi la obiectele de tip bază de date
o verificarea - garantarea consistenţei 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 împărţite î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.

10
Primul pentru crearea structurii de bază de date, al doilea, după ce structura
există, pentru a adăuga 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 rânduri, pentru a schimba (actualiza)
rândurile existente, pentru a şterge rândurile nedorite din baza de date respectivă,
şi, în fine, SELECT - comanda cea mai utilizată, folosită pentru a căuta, a selecta
înregistrări din tabel sau dintr-o combinaţie de tabele ale bazei de date.

Comenzile de control (grupul DCL), la dispoziţia administratorului(DBA):


GRANT, REVOKE utilizate pentru a da sau a lua drepturi de acces (la comenzi DML,
deci la operarea unor modificări a bazei de date).

Sintaxa comenzilor diferă de la un grup la altul. Ne limităm acum doar la câte un


exemplu:

CREATE TABLE CUSTOMER (


CustomerID Integer PRIMARY KEY,
FirstName Character (15),
LastName Character (20) NOT NULL,
Title Character (5),
Street Character (25),
City Character (25),
State Character (2),
Phone Character (15) );

INSERT INTO CUSTOMER (CustomerID, FirstName, LastName)


VALUES (:vcustid, 'Dana', 'Popescu');

GRANT SELECT INSERT


ON CUSTOMER
TO Ana, Victor

Scrierea comenzilor SQL


Când scriem comenzi SQL, este important să ne reamintim câteva reguli
simple pentru construirea unor declaraţii valide care sunt şi uşor 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.

11
• 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 subsecvenţelor
sunt numerotate.
• O singură declaraţie poate fi considerată curentă, cât timp ea este într-un
buffer şi poate fi rulată într-un anumit număr de moduri :
o plasând un punct şi virgulă(;) la sfârşitul ultimei clauze.
o plasând un punct şi virgulă urmat de semnul / (slash) pe ultima linie în
buffer.
o plasând un slash (/) la prompterul SQL.
o scriind comanda SQL R[UN] la prompterul SQL.

Comenzile pot fi deci scrise, spre exemplu, în oricare din următoarele 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ă

Declaraţia SELECT regăseşte informaţia din baza de date, putând îngloba şi unul sau
mai mulţi operatori din algebra relaţională.

In cele mai simple forme trebuie să conţină:

1. O clauză SELECT, care listează coloanele pentru afişare astfel încât


este esenţiala o Proiecţie.
2. O clauză FROM care specifică tabela implicată.

Pentru a lista toate numerele departamentelor, numele angajaţilor şi numărul şefilor


(managerilor) introduceţi în tabela EMP următoarele:

SELECT DEPTNO, ENAME, MGR


FROM EMP;
DEPTNO ENAME MGR
------ ---------- -----
20 SMITH 7902
30 ALLEN 7698
30 WARD 7698
20 JONES 7839
30 MARTIN 7698
30 BLAKE 7839

12
10 CLARK 7839
20 SCOTT 7566
10 KING
30 TURNER 7698
20 ADAMS 7788
30 JAMES 7698
20 FORD 7566
10 MILLER 7782

De remarcat că numele coloanelor sunt separate prin spaţiu.

Este posibil să selectăm toate coloanele din tabelă prin specificarea unui asterix (*) după
cuvântul SELECT .

SELECT * FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


----- ------- ------- ---- --------- --------- ------- ------
7369 SMITH CLERK 7902 13-JUL-83 800. 00 20
7499 ALLEN SALESMAN 7698 15-AUG-83 1,600. 00 300.00 30
7521 WARD SALESMAN 7698 26-MAR-84 1,250. 00 500.00 30
7566 JONES MANAGER 7839 31-OCT-83 2,975. 00 20
7654 MARTIN SALESMAN 7698 05-DEC-83 1,250. 00 1.400.00 30
7698 BLAKE MANAGER 7839 11-JUN-84 2,850. 00 30
7782 CLARK MANAGER 7839 14-MAY-84 2,450. 00 10
7788 SCOTT ANALYST 7566 05-MAR-84 3,000. 00 20
7839 KING PRESIDENT 09-JUL-84 5,000. 00 10
7844 TURNER SALESMAN 7698 04-JUN-84 1,500. 00 .00 30
7876 ADAMS CLERK 7788 04-JUN-84 1,100. 00 20
7900 JAMES CLERK 7698 23-JUL-84 950. 00 30
7902 FORD ANALYST 7566 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 opţiuni ajută utilizatorul să ceară date şi să le manipuleze în


funcţie de scopurile interogării; de exemplu, execuţia calculelor, legarea coloanelor
impreună, sau afişarea şirurilor de litere din text.

Expresii aritmetice

O expresie este o combinaţie de una sau mai multe valori, operatori şi


funcţii, care se evaluează la o valoare.

13
Expresiile aritmetice pot conţine nume de coloane, valori numerice constante şi
operatori aritmetici:

Operatori Descriere
--------- ---------
+ adunare
- scădere
* înmulţire
/ împărţire

SELECT ENAME, SAL*12, COMM FROM EMP;

Daca expresia aritmetică conţine mai mult decât un operator, atunci priorităţile sunt *, /,
la început, apoi +, - (de la stânga la dreapta pentru operatorii cu aceeaşi prioritate).

In următorul exemplu, înmulţirea (250*12) este evaluată prima; apoi valoarea salariului
este adunată la rezultatul multiplicării(3000). Astfel pentru rândul lui SMITH avem :
800+3000=3800.

SELECT ENAME, SAL + 250 * 12 FROM EMP;

Parantezele pot fi utilizate pentru specificarea ordinii de execuţie a operatorilor, dacă, de


exemplu, adunarea e dorită înainte de înmulţire:

SELECT ENAME, (SAL + 250) * 12 FROM EMP;

Alias-uri de coloană

Când se afişează rezultatul unei interogări, în mod normal se utilizează


numele coloanelor selectate ca titlu. In multe cazuri acest nume poate fi criptic sau
fără înţeles.

Putem schimba un titlu de coloană utilizând un 'ALIAS'.

Un alias de coloană dă unei coloane un nume de titlu alternativ la ieşire.

Specificaţi aliasul după coloană, în lista selectată. Din oficiu, titlurile de tip alias vor fi
scrise forţat cu litere mari şi nu pot conţine spaţii (blankuri), numai dacă aliasul este inclus între
ghilimele(" ").

Pentru a afişa titlul de coloană ANNSAL. pentru salariul anual, însemnând SAL*12,
utilizaţi un alias de coloană:

SELECT ENAME, SAL*12 ANNSAL, COMM FROM EMP;

Odată definit, un alias poate fi utilizat de alte comenzi, precum cele din SQL-Plus.

14
Intr-o declaraţie 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,


introduceţi:

SELECT EMPNO||ENAME EMPLOYEE FROM EMP;

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

Tratarea valorilor nule

Dacă unui rând 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 declaraţie numai Salesman are un rezultat al salariului:

SELECT ENAME, SAL*12 + COMM ANNUAL_SAL FROM EMP;

ENAME ANNUAL_SAL
--------- ----------

15
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 toţi angajaţii, este necesar sa convertim
valoarea nula la un numar . Noi folosim funcţia NVL pentru a converti o valoare nula la o
valoare nenula.

Folositi funcţia NVL pentru a converti valoarea nula de la declaratia precedenta la 0.

SELECT ENAME, SAL*12+NVL(COMM, 0) ANNUAL_SAL


FROM EMP;
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 puteţi folosi funcţia NVL pentru a converti un numar nul, data
calendaristica sau şir de caractere la un alt numar, data calendaristica sau sir de
caractere de acceaşi lungime şi de acelaşi tip de date asteptate.

NVL(DATECOLUMN, '01-JAN-88')
NVL(NUMBERCOLUMN, 9)
NVL(CHARCOLUMN, 'STRING')

Prevenirea selecţiei rândurilor duplicate

16
Dacă nu se indică altfel, SQL*Plus afişează rezultatul unei interogări fără
eliminarea intrărilor duplicate .

Pentru a lista toate numerele de departament din tabela EMP, introduceţi:

SELECT DEPTNO
FROM EMP;
DEPTNO
------
20
30
30
20
30
30
10
20
10
30
20
30
20
10

Clauza DISTINCT

Pentru eliminarea valorilor duplicate din rezultat, includeţi restricţia


DISTINCT în comanda SELECT.

Pentru a elimina valorile duplicate afişate în exemplul următor introduceţi:

SELECT DISTINCT DEPTNO


FROM EMP;

DEPTNO
------
10
20
30

Coloane multiple pot fi specificate după restricţia DISTINCT şi restricţia DISTINCt


afectează toate coloanele selectate.

Pentru a afişa valorile distincte ale lui DEPTNO şi JOB, introduceţi:

SELECT DISTINCT DEPTNO, JOB


FROM EMP;

DEPTNO JOB
------ ---------
10 CLERK
10 MANAGER
10 PRESIDENT

17
20 ANALYST
20 CLERK
20 MANAGER
30 CLERK
30 MANAGER
30 SALESMAN

Aceasta afişează o listă a tuturor combinaţiilor diferite de ocupaţie şi numere de


departamente.

De notat că restricţia DISTINCT poate să fie referită numai o singură dată şi trebuie să
urmeze imediat după cuvântul de comandă SELECT.

Clauza ORDER BY

In mod normal ordinea rândurilor întoarse în rezultatul unei cereri este


nedefinită. Clauza ORDER BY poate fi utilizată pentru a sorta rândurile.

Dacă o folosim, clauza ORDEY BY trebuie să fie întotdeauna ultima în declaraţia


SELECT.

Pentru a sorta după ENAME, introduceţi:

SELECT ENAME, JOB, SAL*12, DEPTNO FROM EMP ORDER BY ENAME;


ENAME JOB SAL*12 DEPTNO
--------- ------- -------- ------
ADAMS CLERK 13200 20
ALLEN SALESMAN 19200 30
BLAKE MANAGER 34200 30
CLARK MANAGER 29400 10
FORD ANALYST 36000 20
JAMES CLERK 11400 30
JONES MANAGER 35700 20
KING PRESIDENT 60000 10
MARTIN SALESMAN 15000 30
MILLER CLERK 15600 10
SCOTT ANALYST 36000 20
SMITH CLERK 9600 20
TURNER SALESMAN 18000 30
WARD SALESMAN 15000 30

Ordonarea "din oficiu" a datelor


Ordinea sortării, 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ă.

18
Inversarea ordinii predefinite
Pentru a inversa această ordine, cuvântul de comandă DESC este specificat
după numele coloanei în clauza ORDER BY.

Pentru a inversa ordinea coloanei HIREDATE, deci datele cele mai târzii să fie afişate
primele, introduceţi:

SELECT ENAME, JOB, HIREDATE


FROM EMP
ORDER BY HIREDATE DESC;

ENAME JOB HIREDATE


--------- --------- ---------
JAMES CLERK 23-JUL-84
KING PRESIDENT 09-JUL-84
BLAKE MANAGER 11-JUN-84
TURNER SALESMAN 04-JUN-84
ADAMS CLERK 04-JUN-84
CLARK MANAGER 14-MAY-84
WARD SALESMAN 26-MAR-84
SCOTT ANALYST 05-MAR-84
MARTIN SALESMAN 05-DEC-83
FORD ANALYST 05-DEC-83
MILLER CLERK 21-NOV-83
JONES MANAGER 31-OCT-83
ALLEN SALESMAN 15-AUG-83
SMITH CLERK 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
specificaţi DESC după fiecare coloana.

Pentru a ordona după doua coloane şi afişa în ordinea inversa a salariului, introduceţi:

SELECT DEPTNO, JOB, ENAME


FROM EMP
ORDER BY DEPTNO, SAL DESC;

DEPTNO JOB ENAME


------ ------------ -------
10 PRESIDENT KING
10 MANAGER CLARK
10 CLERK MILLER
20 ANALYST SCOTT
20 ANALYST FORD
20 MANAGER JONES

19
20 CLERK ADAMS
20 CLERK SMITH
30 MANAGER BLAKE
30 SALESMAN ALLEN
30 SALESMAN TURNER
30 SALESMAN WARD
30 SALESMAN MARTIN
30 CLERK JAMES
Pentru a ordona după o coloana nu este necesar să o avem selectata.

ORDER BY şi valorile nule


In Oracle7, valorile nule sunt afişate ultimele pentru secventele ascendente
si sunt raportate primele cind rindurile sunt sortate în ordine descendenta.

Clauza ORDER BY este utilizată într-o interogare cind se doreste să se afişeze rindurile
într-o ordine specifica . Fara clauza ORDER BY rândurile 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 afişare a rindurilor nu influenteaza ordinea interna a rindurilor asa
cum sunt stocate în tabela.

Clauza WHERE

Clauza WHERE corespunde operatorului 'Restricţie' din algebra relaţionala.

Conţine o condiţie pe care rindurile trebuie să o indeplineasca în ordinea afişarii lor.

Clauza WHERE, daca este folosita, trebuie să urmeze clauzei FROM :

SELECT coloane FROM tabela


WHERE anumite condiţii sunt întâlnite
Clauza WHERE poate compara valori în coloana, valori literale, expresii
aritmetice sau funcţii.

Clauza WHERE asteapta trei elemente:

1. Un nume de coloana
2. Un operator de comparaţie
3. Un nume de coloana, constanta sau lista de valori.

Operatorii de comparaţie sunt utilizaţi în clauza WHERE şi pot fi impartiti in doua


categorii: logici şi SQL.

Operatorii logici

Acesti operatori verifica urmatoarele condiţii:

Operator Semnificaţie
-------- ------------
= egal cu

20
> 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 funcţie. Utilizati "Funcţii pe Caractere" din capitolul 4.

Pentru a afişa numele, numerele, ocupatia şi departamentele tuturor funcţionarilor,


introduceţi:

SELECT ENAME, EMPNO, JOB, DEPTNO FROM EMP


WHERE JOB = 'CLERK';

ENAME EMPNO JOB DEPTNO


--------- ----- ------- ------
SMITH 7369 CLERK 20
ADAMS 7876 CLERK 20
JAMES 7900 CLERK 30
MILLER 7934 CLERK 10

Pentru a găsi toate numele de departamente cu numerele de departament mai mare ca 20,
introduceţi:

SELECT DNAME, DEPTNO FROM DEPT


WHERE DEPTNO >20;

DNAME DEPTNO
---------- ------
SALES 30
OPERATIONS 40

Compararea unei coloane cu alta în cadrul aceluiaşi


rând
Puteţi compara o coloana cu o alta coloana în acelaşi rând, la fel ca şi cu o
valoare constanta.

De exemplu, presupunem ca dorim să obtinem acei angajaţi al caror comision estĺ mai
mare decat salariul lor:

SELECT ENAME, SAL, COMM FROM EMP


WHERE COMM> SAL;

21
ENAME SAL COMM
------ -------- --------
MARTIN 1, 250. 00 1, 400. 00

Operatori SQL

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

Operatori SQL

Operator Semnificaţie
-------- ------------
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 angajaţii ai caror salariu este între 1000 şi 2000:

SELECT ENAME, SAL


FROM EMP
WHERE 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 angajaţii care au unul din cele trei numere de
marca(MGR):
SELECT EMPNO, ENAME, SAL, MGR
FROM EMP
WHERE MGR IN (7902, 7566, 7788);

EMPNO ENAME SAL MGR


----- ----- --------- -----

22
7369 SMITH 800. 00 7902
7788 SCOTT 3, 000. 00 7566
7876 ADAMS 1, 100. 00 7788
7902 FORD 3, 000. 00 7566

Daca sunt utilizate caracterele sau datele calendaristice, ele trebuie


introduse între ghilimele(' ').

Operatorul LIKE

Uneori nu se cunosc valorile exacte pe care le cautam. Utilizând operatorul


LIKE este posibil să selectam rândurile care se potrivesc cu un model specificat de
caractere. Operatia de petter-matching a caracterelor poate fi asemanată cu o
cautare 'wild-card'. Doua simboluri 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 toţi angajaţii al caror nume începe cu un S, introduceţi:

SELECT ENAME FROM EMP


WHERE ENAME LIKE 'S%';

ENAME
--------
SMITH
SCOTT

Caracterul '_' poate fi utilizat pentru cautarea unui anumit numar de carac-
tere.

De exemplu pentru a lista toţi angajaţii care au un nume exact de patru caractere
lungime:

SELECT ENAME FROM EMP


WHERE ENAME LIKE '____';

ENAME
-----
WARD
KING
FORD

Semnele '%' şi '_'pot fi utilizate în orice combinaţie de caractere.

Operatorul IS NULL

23
Operatorul IS NULL face teste specifice pentru valorile care sunt NULL.

SELECT ENAME, MGR


FROM EMP
WHERE MGR IS NULL;

ENAME MGR
------ ----
KING

Negarea expresiilor
Urmatorii operatori fac teste de negaţie:
Operator Descriere
--------- ----------
!= diferit de(VAX, UNIX, PC)
^= diferit de(IBM)
<> diferit de(toate o/s)
NOT NUMECOL= diferit de
NOT NUMECOL> mai mic sau egal

Operatori SQL

Operator Descriere
-------- ---------
NOT BETWEEN nu se afla între doua valori date
NOT IN nu se afla într-o lista dată de valori
NOT LIKE diferit de şirul
IS NOT NULL nu este o valoare nula
Pentru a găsi angajaţii ai caror salariu nu este într-un interval, introdu- ceţi:

SELECT ENAME, SAL


FROM EMP
WHERE SAL NOT BETWEEN 1000 AND 2000;

ENAME SAL
--------- --------
SMITH 800. 00
JONES 2, 975. 00
BLAKE 2, 850. 00
CLARK 2, 450. 00
SCOTT 3, 000. 00
KING 5, 000. 00
JAMES 950. 00
FORD 3, 000. 00

Pentru a afla acei angajaţi a caror meserie nu începe cu M,


introduceţi:

SELECT ENAME, JOB


FROM EMP
WHERE JOB NOT LIKE 'M%';

ENAME JOB

24
-------- --------
SMITH CLERK
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN
SCOTT ANALYST
KING PRESIDENT
TURNER SALESMAN
ADAMS CLERK
JAMES CLERK
FORD ANALYST
MILLER CLERK

Pentru a afla toţi angajaţii care au un manager(MGR), introduceţi:

SELECT ENAME, MGR


FROM EMP
WHERE 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

Interogarea datelor cu condiţii multiple


Operatorii AND sau OR pot fi utilizaţi pentru a compune expresii logice.

Predicatul AND este adevărat numai daca ambele condiţii sunt 'adevărate'; predicatul
OR este adevărat daca cel putin una din condiţii este 'adevărata'.

In urmatoarele doua exemple, condiţiile sunt aceleasi, dar predicatele difera. Priviti cum
rezultatul este dramatic modificat.

Pentru a găsi toţi funcţionarii care câştigă între 1000 şi 2000, introduceţi:
SELECT EMPNO, ENAME, JOB, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000
AND JOB = 'CLERK';

25
EMPNO ENAME JOB SAL
---- ------- -------- --------
7876 ADAMS CLERK 1, 100. 00
7934 MILLER CLERK 1, 300. 00

Pentru a afla toţi angajaţii care sunt şi funcţionari şi/sau


funcţionari care castiga între 1000 şi 2000, introduceţi:

SELECT EMPNO, ENAME, JOB, SAL


FROM EMP
WHERE SAL BETWEEN 1000 AND 2000
OR JOB = 'CLERK';

EMPNO ENAME JOB SAL


----- -------- ------- --------
7369 SMITH CLERK 800. 00
7499 ALLEN SALESMAN 1, 600. 00
7521 WARD SALESMAN 1, 250. 00
7654 MARTIN SALESMAN 1, 250. 00
7844 TURNER SALESMAN 1, 500. 00
7876 ADAMS CLERK 1, 100. 00
7900 JAMES CLERK 950. 00
7934 MILLER CLERK 1, 300. 00

Puteţi combina AND sau OR în acceaşi expresie logica. când AND sau OR apar in
aceeaşi clauza WHERE, toţi operatorii AND sunt evaluaţi mai întai şi apoi toţi operatorii OR.
Vom spune ca operatorii AND au o precedenta mai mare decat OR.

Deoarece AND are o precedenta mai mare decat OR urmatoarea declaraţie SQL intoarce
toţi managerii cu salarii peste 1500$ şi toţi vânzătorii.

SELECT EMPNO, ENAME, JOB, SAL, DEPTNO


FROM EMP
WHERE SAL> 1500
AND JOB = 'MANAGER'
OR JOB = 'SALESMAN';

EMPNO ENAME JOB SAL DEPTNO


----- ------- -------- -------- ------
7499 ALLEN SALESMAN 1, 600. 00 30
7521 WARD SALESMAN 1, 250. 00 30
7566 JONES MANAGER 2, 975. 00 20
7654 MARTIN SALESMAN 1, 250. 00 30
7698 BLAKE MANAGER 2, 850. 00 30
7782 CLARK MANAGER 2, 450. 00 10
7844 TURNER SALESMAN 1, 500. 00 30

Daca doriti să selectaţi toţi managerii şi vânzătorii cu salarii peste 1500$ puteţi
întroduce:
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
FROM EMP
WHERE SAL >1500
AND (JOB = 'MANAGER'
OR JOB = 'SALESMAN');

26
EMPNO ENAME JOB SAL DEPTNO
----- ------ --------- -------- ------
7499 ALLEN SALESMAN 1, 600. 00 30
7566 JONES MANAGER 2, 975. 00 20
7698 BLAKE MANAGER 2, 850. 00 30
7782 CLARK MANAGER 2, 450. 00 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 CONDIŢII


ENAME
(VARCHAR2)
___________
WHERE ENAME = 'SCOTT' | |
| SCOTT V V|
| ___|
| SCOTT|____
| |
| MILLER |
| |
~~~~ ~~ ~~~
Oracle nu face umplerea cu blancuri la compararea
cu coloanele VARCHAR2
ENAME
(CHAR)
------------
| |
| SCOTT V V|
WHERE ENAME = 'SCOTT' | . . |
| SCOTT|V V|
| |. |
| MILLER| V|
~~~~ ~~~~ ~~
Oracle face umplerea cu blancuri la compararea cu coloanele CHAR.

Tipurile de date caracter şi condiţii


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 condiţii implica date de tip caracter, acestea
pot varia în funcţie 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 rând este intors pentru conditia:

WHERE ENAME = 'SCOTT'

27
când un alt rând stocat în coloana ENAME are mai multe caractere decat şirul de
comparat.

Pentru coloanele cu tipul CHAR, oricum, Oracle face umplere când valorile coloanelor
sunt iniţial stocate, facându-le pe toate de aceeaşi lungime.

Aceeaşi condiţie va întoarce ambele rânduri pentru SCOTT, indiferent de cate spaţii de
sfârsit au fost adaugate când valorile au fost stocate în tabela.

Oracle umple cu blancuri şirul de comparat în cel de al doilea caz şi de aceea spaţiile
stocate sunt nesemnificative.

Precedenta operatorilor

Toţi operatorii sunt aranjaţi într-o ierarhie ceea ce le determina precedenta.


Intr-o expresie operaţiile sunt executate în ordinea precedentei lor de la mare la
mica. Când operatorii au precedenta egala atunci ei se evalueaza de la stanga la
dreapta.

1. Toţi operatorii de comparaţie ş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ă când sunteţi în dubiu despre care dintre doua operaţii vor fi executate
mai întai când o expresie este evaluata, sunteţi liberi să utilizaţi parantezele pentru a clarifica
semnificatia dorita şi pentru a va asigura ca SQL*Plus face ceea ce doriti.

Să presupunem ca doriti să gasiti toţi managerii, din orice departament, si toţi


funcţionarii 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 [DISTINCT] [*, coloana alias], . . . ]


FROM tabela
WHERE condiţie(ii)
ORDER BY [coloana, expr] [ASC/DESC];

28
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 - restricţioneaza cererea la rândurile care îndeplinesc o


condiţie. Poate conţine valori de coloane, expresii şi literali

AND/OR - poate fi utilizat într-o clauza WHERE pentru a construi condiţii


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 secţiune 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 fişier de comanda. In plus, comenzile
SQL pot fi derivate. Ele sunt folosite pentru:

• formatarea rezultatelor
• setarea optiunilor
• editarea şi stocarea declaraţiilor SQL

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

29
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 Introduceţi numele vostru de user şi apasaţi RETURN: SQL*Plus va
afişa promptul :"Enter Password:". Introduceţi parola voastra şi
apasaţi din nou RETURN.
o Pentru protecţia voastra, parola nu va apare pe ecran. SQL*Plus va
afişa promptul sau: SQL>
o Aceasta indica linia de comanda . Acolo sunt doua feluri de comenzi şi
puteţi întroduce pe acesta linie de comanda:comenzi SQL sau comenzi
SQL*Plus.
2. SQLPLUS username
o Veţi fi îndemnaţi să va daţi parola.
3. SQLPLUS username/password
o Veţi fi logaţi la SQL*Plus. In acest caz parolz v a fi afişata.

Alegeţi metoda pe care o preferati.

Editarea declaraţiilor SQL utilizând comenzi SQL*Plus

1. Când veţi întroduce o comanda SQL, aceasta este stocată într-o


zona de memorie utilizată de buferul SQL şi ramane acolo pana ce veţi întroduce o
noua comanda.
2. Daca apasaţi [RETURN] înainte de a completa o comanda,
SQL*Plus va afişa un numar de linie.
3. Terminatorul pentru declaraţiile SQL este un ';'.
4. Cat timp declaratia SQL este în bufer, sunt cateva operaţii de
editare directe care pot fi executate utilizând 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
respectiv
LIST L listeaza toate liniile din buferul SQL.
LIST n Ln listeaza o linie (specificată de n)
LIST m, n L m n listeaza un numar de linii(de la m la n).
RUN R afişeaza şi executa comanda SQL curenta din
buffer.
/ executa comanda SQL care este curenta în
bufer.

Diversitatea comenzilor SQL*Plus

30
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 fişierelor. Comenzile identificate
aici sunt amestecate şi trebuie să le folosiţi în următoarele exerciţ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 fişier a conţinutului buferului SQL.

GET numefis - încarca conţinutul unui fişier salvat în prealabil în buffer.

START numefis - ruleaza un fişier de comanda salvat în prealabil. Fişierele de


comanda sunt tratate în capitolul 10.

ED numefis - utilizeaza un editor de default pentru a edita conţinutul unui


fişier salvat.

EXIT - paraseste SQL*Plus.

31
Se doreste informatizarea activitatiilor unei
agentii de transport.Despre abonatii agentiei (persoane
fizice) se cunosc urmatoarele date : CNP-ul, nume,
prenume, adresa, nr. Telefon, e-mail.

Pe abonamente si bilete sunt inscriptionate un


cod unic de inregistrare cat si tariful de transport.

Tariful este diferit in functie de


destinatie,precum si de durata pentru care a fost
cumparat.Doar anumite categorii(elevi,studenti,donatori)
beneficiaza de reduceri,in timp ce gratuitatile se
acorda ,printre altele,pensionarilor,persoanelor cu
dizabilitati ori revolutionarilor.

Calitatea transportului oferit de agentia noastra


este ridicata, oferind conditii optime pentru transportul in
comun.Agentia noastra dispune de microbuze dotate la
cel mai inalt nivel in conformitate cu conditiile impuse de
Uniunea Europeana.

Circulatia mijloacelor de transport se desfasoara dupa


urmatorul program:

• zile lucratoare 5,00 – 23,15

• simbata 5,30 – 23,00

• duminica 6,00 – 23,00

Mentionam ca autobuzele circula dupa un orar prestabilit pentru a


asigura ritmicitate si pentru a scurta timpul de asteptare in statii.
Orarele de circulatie au fost extinse si pentru liniile de tramvai, dar
aici pot aparea, in anumite perioade din zi, mici diferente cauzate de
aglomeratiile din zona centrala, pauze de curent, autovehicule
stationate neregulamentar pe calea de rulare, defectiuni tehnice.

32
Pe raza municipiului Cluj-Napoca functioneaza 90 de puncte de
vinzare a biletelor si abonamentelor din care:

- 26 birouri abonamente (se vind toate tipurile de abonamente –


numai in zilele lucratoare);

- 43 tonete de vinzare a biletelor si abonamentelor integrale (deschise


inclusiv simbata si duminica);

- 21 tonete de vinzare a biletelor.

Publicul calator are posibilitatea cumpararii abonamentelor integrale


si in zilele de simbata si duminica de la tonetele de vinzare a biletelor
si abonamentelor.

Abonamentele se elibereaza cu anticipatie de pina la 5 zile.

Calatoria cu abonamente ramine in continuare avantajoasa, datorita


tarifului practicat, precum si a posibilitatii efectuarii de calatorii
nelimitate pe linia respectiva si a folosirii oricarui mijloc de transport
pe traseul comun.

33
Agentie
# id Angajat
* adresa # cnp
are * nume
* nr_telefon
o e_mail * functie
lucreaza
* salariu
are * data_angajarii
o nr_telefon
are o e_mail

apartine

Abonament
Client
este abonat
# id_abonament
# nume
*denumirea
#id_abonament
*data_expirarii
*adresa
*pret
o nr_telefon

Depozit
# id
* adresa
* nr_telefon
o e_mail
34
Angajat
# cnp
are * nume
* functie lucreaza
* salariu
are * data_angajarii
o nr_telefon
are o e_mail

apartine apartine

Lista2
Lista1
#id_lista
#id_lista

apartine apartine

este vandut

Produs
Client
# id_produs
#id
*denumirea
* nume
*data_expirarii
*adresa cumpara
*pret
o nr_telefon

STRUCTURA TABELULUI ABONAMENTE

35
DATELE CONTINUTE DE TABELUL ABONAMENTE

STRUCTURA TABELULUI AGENTII

36
DATELE CONTINUTE DE TABELUL AGENTII

STRUCTURA TABELULUI ANGAJATI

37
DATELE CONTINUTE DE TABELUL ANGAJATI

STRUCTURA TABELULUI CLIENTI

38
DATELE CONTINUTE DE TABELUL CLIENTI

39
1. Sa se afiseze lista tuturor agentiilor.
2. Sa se afiseze adresa agentieicu numarul de telefon
0241254356.
3. Sa se afiseze functia si salariul angajatului Marinescu
Ionel.
4. Sa se afiseze numarul angajatilor cu o vechime in
agentie mai mare de 3 ani.
5. Sa se calculeze suma de bani necesara pentru salarii.
6. Sa se afiseze toate abonamentele ordonate
descrescator dupa pret.
7. Sa se afiseze abonamentele cu termenul de valabilitate
expirat.
8. Sa se afiseze lista clientilor agentiei.

40
1. select * from agentii

2. select adresa from agentii where "NR_TELEFON"='0250324317'

3. select nume, functie , salariu from angajati where nume=’ Popescu Ion’

41
4. select count(*) from angajati where sysdate-data_angajarii>3

5. select sum(salariu) from angajati

6. select destinatia from abonamente order by pret desc

42
7. select * from abonamente where "DATA_EXPIRARII" >= sysdate + 700

8. select * from client

43
44
45

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