Documente Academic
Documente Profesional
Documente Cultură
BD Oracle01oracle
BD Oracle01oracle
Obiective
Cunoasterea capabilitatilor instructiunilor SELECT
Executarea unor instructiuni SELECT de baza
Cunoasterea diferentelor dintre instructiunile SQL si comenzile SQL*Plus
Posibilitatile comenzii SQL SELECT
Comanda SELECT extrage informatii din bazele de date. Folosind comanda SELECT , poti face
urmatoarele :
SELECTIE (SELECTION): poate fi folosita pentru a alege liniile de care ai nevoie din tabelele
de date. Poti folosi criterii diferite de selectie limitind ceea ce vrei sa vezi.
PROIECTARE (PROJECTION): poate fi folosita pentru a alege coloanele din tabele de care ai
nevoie in interogarea rezultat. Poti alege oricate coloane de tabele ai nevoie.
COMBINAREA (JOIN) : poate fi folosita pentru a uni datele aflate in tabele diferite prin
crearea unei legaturi intre coloanele tabelelor de unde provin datele. Vei invata mai multe despre
COMBINARE intr-o lectie ulterioara.
SELECT - SINTAXA DE BAZA
SELECT [ DISTINCT ] {*, column [alias] , ..}
FROM table ;
SELECT pentru identificarea coloanelor
FROM pentru identificarea tabelelor
Intr-o forma mai simpla , instructiunea SELECT include urmatoarele:
LOC
-------------------NEW YORK
DALLAS
CHICACO
BOSTON
Dreapta
Afisarea implicita :
HIREDATE
------ ------- ----17-NOV-81
01-MAY-81
09-JUN-81
02-APR-81
28-SEP-81
20-FEB-81
SAL
- ------------5000
2850
2450
2975
1250
1600
Capul de coloana de date calendaristice sau caractere poate fi trunchiat, dar capul de coloana
numerica nu poate fi trunchiat. Coloanele cap de tabel sunt afisate implicit cu litere mari. Tu poti
rescrie titlul coloanelor cu un alias. Folosirea alias-urilor va fi prezentata intr-o lectie ulterioara.
Expresii aritmetice
Crearea expresiilor numerice si de date folosind operatori aritmetici
Operator
+
*
/
Descriere
Adunare
Scadere
Inmultire
Impartire
Expresii aritmetice
E posibil sa ai nevoie sa modifici felul in care sa afisezi datele, executind calcule . Acest
lucru este posibil utilizind operatiile aritmetice. Expresiile aritmetice pot contine nume de coloane,
constante numerice si operatori aritmetici.
Operatori aritmetici
In tabelul de mai sus gasiti operatorii aritmetici disponibili in SQL. Poti folosi acesti
operatori in orice clauza SQL exceptind clauza FROM.
Folosirea operatorilor aritmetici
SQL> SELECT ename, sal, sal+300
2 FROM emp;
ENAME
-------------------KING
SAL
SAL+300
---------- --------------------5000
5300
4
BLAKE
CLARK
JONES
MARTIN
2850
2450
2975
1250
3150
2750
3275
1550
Prioritatea operatorilor
Daca o expresie aritmetica contine mai mult de un operator, inmultirea si impartirea sunt
evaluate primele. Daca operatorii folositi intr-o expresie sunt de aceeasi prioritate, evaluarea se va
face de la stinga la dreapta. Poti folosi parantezele pentru a forta expresia din paranteze sa fie
evaluata prima.
SQL> SELECT ename, sal, 12*sal+100
2 FROM emp;
ENAME
SAL
12*SAL+100
--------------------------------------------KING
5000
60100
BLAKE
2850
34300
CLARK
2450
28500
In exemplul dat sunt afisate cimpurile nume, salariu si compensatia anuala a angajatilor.
Aceasta este calculata inmultind salariul lunar cu 12 plus o prima de 100$. Deci, inmultirea se
efectueaza inaintea adunarii.
NOTA Folosirea parantezelor pentru a intari ordinea fireasca a operatiilor va arata astfel :
(12*SAL)+100 operatie care nu va schimba rezultatul.
Folosirea parantezelor
SQL> SELECT ename, sal, 12*(sal+100)
2 FROM emp;
5
ENAME
-----------------KING
BLAKE
CLARK
SAL
------------5000
2850
2450
12*(SAL+100)
-----------------61200
35400
30600
TURNER
JOB
COMM
--------------------- ----------------PRESIDENT
MANAGER
SALESMAN
Valoarea nul
Daca o linie nu are date pentru o coloana particulara, aceasta valoare se numeste nula.
Valoarea nul este nedisponibila, neatribuita, necunoscuta sau inaplicabila. Valoarea nul nu
este aceeasi cu zero sau spatiu. Zero este numar iar spatiul este un caracter.
Coloanele din orice tip pot contine valoarea vida, cu exceptia celor care au fost definite
nenule sau Key primare in coloanele create.
In coloana COMM din tabela EMP, esti atentionat ca doar un vinzator (SALESMAN) poate
cistiga comision. Alti angajati nu sunt indreptatiti sa primeasca comisioane. Valoarea vida reprezinta
un fapt. Trebuie subliniat faptul ca vinzatorul are comisionul 0 nu null.
Valoarea nula in expresiile aritmetice
Expresiile aritmetice care contin valoarea nul sunt evaluate ca nule.
SQL> SELECT ename NAME, 12*sal+comm
2 FROM emp
3 where ename=KING;
NAME
----------KING
12*SAL+ COMM
---------------- -----_______________
Daca o coloana dintr-o expresie aritmetica contine valoarea nula, rezultatul este nul. De
exemplu, daca incerci sa executi o impartire la zero, obtii o eroare. Oricum , daca imparti un numar
cu valoarea nula, rezultatul este nul sau necunoscut.
In exemplul de sus , angajatul KING nu este vinzator (salesman) si nu primeste comision.
Deoarece coloana COMM in expresia aritmetica este nula, rezultatul este nul.
Cind afisam rezultatul unei interogari, SQL* Plus foloseste normal numele coloanei ca si cap de
tabel. In multe cazuri, acest cap de tabel nu este sugestiv si de aici dificultatea de a intelege. Poti
schimba numele coloanei folosind aliasul.
Specifica aliasul dupa numele coloanei in lista SELECT , folosind spatiul ca separator. Implicit,
capul de tabel obtinut prin alias este scris cu litere mari. Daca aliasul contine spatii, caractere
speciale (ca $ sau #), sau au importanta literele mari (mici), scrie aliasul intre ghilimele ().
SQL> SELECT ename AS name, sal salary
2 FROM emp;
NAME
-------------
SALARY
-------------------
Annual Salary
-----------------------
Primul exemplu afiseaza numele si salariul lunar al tuturor angajatilor. Astfel cuvintul cheie
AS a fost folosit inainte de alias. Rezultatul interogarii trebuie sa fie acelasi daca civintul cheie AS
este folosit sau nu. Un alt aspect este ca name si salary au fost scrise cu litere mici iar afisarea s-a
facut cu litere mari. Deci , implicit capul de coloana apare cu litere mari.
In cel de-al doilea exemplu afisam numele si salariul anual al angajatilor. Deoarece Annual
Salary implica folosirea spatiului, aliasul trebuie scris cu ghilimele. Astfel va fi afisat exact ceea ce
este scris in expresia SELECT.
Operatorul de concatenare
Concateneaza coloanele sau sirurile de caractere cu alte coloane
Siruri de caractere
Un literal este un caracter, expresie sau numar inclus in lista SELECT
Valorile literale pentru datele calendaristice si caractere trebuie incluse intre ghilimele simple
Fiecare sir de caractere este afisat o data pentru fiecare rand intors
SQL> SELECT ename || || is a || job
2
AS Employee Details
3
FROM emp;
Exemplul de mai sus afiseaza numele si meseriile tuturor angajatilor. Coloana are titlul Detaliile
angajatului. Observati spatiile dintre ghilimelele simple din instructiunea SELECT. Spatiile
imbunatatesc lizibilitatea iesirii.
In exemplul urmator, numele si salariul fiecarui angajat este concatenat cu un literal pentru a da
randurilor mai mult inteles.
SQL>
SELECT ename || : || 1 || Month salary = || sal Monthly
2
FROM emp;
Rinduri duplicate
In mod predefinit interogarile afiseaza toate rindurile, incluzand rindurile duplicate.
SQL> SELECT deptno
2
FROM emp;
SQL*Plus va afisa rezultatul interogarii fara a elimina rindurile duplicate, decat daca ii este
indicat. Exemplul de mai sus afiseaza toate numerele de departamente din tabelul EMP.
Eliminarea rindurilor duplicate
Se face folosind cuvantul cheie DISITINCT in clauza SELECT.
SQL> SELECT DISTINCT deptno
2
FROM
emp;
Se pot specifica coloane multiple dupa clauza DISTINCT. Aceasta clauza afecteaza toate
coloanele selectate, si rezultatul reprezinta o combinatie de coloane distincta.
SQL> SELECT DISTINCT deptno, job
2
FROM
emp;
Buffer
Instructiuni SQL
SERVE
R
SQL*Plus
Comenzi SQL*Plus
Rezultatele interogarii
Raport
Formatat
SQL si SQL*Plus
SQL este un limbaj de comenzi pentru comunicarea cu Serverul Oracle din orice instrument
sau aplicatie. SQL Oracle contine multe extensii. Cand se introduce o instructiune SQL, aceasta este
stocata intr-o parte a memorie numita buffer-ul SQL si ramane acolo pana cand se introduce o noua
instructiune.
SQL*Plus este un instrument Oracle care recunoaste si trimite instructiuni SQL la server
pentru executie si contine propriu limbaj de comenzi.
Caracteristicile SQL
Poate fi folosit de o larga gama de utilizatori, inclusiv cei neprogramatori
Este un limbaj neprocedural
Reduce timpul necesar pentru crearea si mentenanta sistemelor
Este un limbaj cu sintaxa in engleza
Caracteristicile SQL*Plus
Accepta instructiuni ad-hoc
Accepta fisiere cu instructiuni SQL
Furnizeaza un editor in mod linie pentru modificarea instructiunilor SQL
Controleaza setarile de mediu
Formateaza rezultatele interogarilor in rapoarte
Acceseaza bazele de date locale si la distanta
Comparatii SQL si SQL*Plus
SQL
SQL*Plus
Este un limbaj pentru comunicarea cu serverul Recunoaste instructiuni SQL si le trimite la
Oracle pentru accesarea datelor
server
9
Sumar SQL*Plus
Te poti loga in SQL*Plus
Poti afla structura unei tabele
Poti edita instructiuni SQL
Poti executa instructiuni SQL din SQL*Plus
Poti salva instructiuni SQL in fisiere
Poti executa fisierele salvate
Poti incarca comenzi din fisier in buffer pentru editare
Categorie
Mediu
Scop
Afecteaza comportamentul general al instructiunilor SQL pentru sesiunea
respectiva
Formatare
Formateaza rezultatele interogarii
Manipulari de fisiere Salveaza, incarca si ruleaza fisiere de script
Executie
Trimite instructiuni SQL din bufferul SQL la serverul Oracle
Editare
Modifica instructiuni SQL in buffer
Interactiune
Permite crearea si trimiterea variabilelor la instructiuni SQL, afisarea
variabilelor si listarea mesajelor pe ecran
Amestecate
Are diferite comenzi pentru conectarea la baza de date, manipularea
mediului SQL*Plus si afisarea coloanelor
Conectarea la SQL*Plus
SQL*Plus se poate apela in functie de tipul sistemului de operare sau a mediului Windows in
care rulezi. Pentru conectarea intr-un mediu Windows:
1. Start -> Programs -> Oracle for Windows NT -> SQL*Plus8.0
2. Se completeaza: username, parola si baza de date
Pentru conectarea intr-un mediu de tip linie de comanda:
1. Te conectezi la masina
10
dept
Name
Null?
Type
------------------------------------------------------------------------DEPTNO
NOT NULL
NUMBER(2)
DNAME
VARCHAR2(14)
LOC
VARCHAR2(13)
Se afiseaza informatii despre structura tabelei DEPT. Null? Indica daca o coloana trebuie sa
contina date; NOT NULL indica faptul ca acea coloana trebuie sa contina date. Type afiseaza tipul
de date al coloanei.
Tip de date
Descriere
NUMBER(p,s)
Valori numerice avand un numar maxim de p cifre, unde s este
numarul de cifre din dreapta virgulei
VARCHAR2(s)
Sir de caractere de lungime variabila cu lungime maxima s
DATE
Date calendaristice intre 1 ianuarie 4712 i.c. si 31 decembrie 9999 d.c.
CHAR(s)
Sir de caractere de lungime fixa s
11
Nota: Poti introduce doar o singura comanda SQL*Plus la prompterul SQL. Aceste comenzi nu
sunt stocate in bufer. Pentru a continua o comanda pe linia urmatoare se pune (-).
Comenzi SQL*Plus pentru fisiere
SAVE filename
- salveaza continutul buferului SQL intr-un fisier. Cu APPEND se
[REP[LACE]APP[END]]
adauga la sfarsitul fisierului sau cu REPLACE se suprascrie
continutul fisierului
GET filename
- scrie continutul uni fisier in buffer SQL (extensia predefinita este
.sql)
START filename
- ruleaza un fisier script
@ filename
- la fel ca START
ED[IT]
- lanseaza editorul si salveaza continutul bufferului intr-un fisier
afiedt.buf
ED[IT] filename
- lanseaza editorul pentru editarea continutului unui fisier salvat
SPO[OL] [filename]
- stocheaza rezultatul unei interogari intr-un fisier. OFF inchide
OFF | OUT
fisierul. OUT inchide fisierul si il trimite la imprimanta sistem
EXIT
- iese din SQL*Plus
REZUMAT
SELECT [DISITNCT] { *, column[alias]}
FROM table;
Folositi SQL*Plus ca un mediu pentru:
Executarea instructiunilor SQL
Editarea instructiunilor SQL
Practica
Selectarea tutror datelor din diferite tabele
Descrierea structurii tabelelor
Efectuarea calculelor aritmetice si specificarea aliasurilor de coloana
Folosirea editorului SQL*Plus
1. Initiati o sesiune SQL*Plus.
2. Comenzile SQL*Plus acceseaza o baza de date: adevarat / fals.
3. Instructiunea SELECT se va executa cu succes : adevarat / fals.
SELECT ename, job, sal SALARY
FROM emp;
4. Instructiunea SELECT se va executa cu succes : adevarat / fals.
SELECT *
FROM
salgrade;
5. In instructiunea urmatoare sunt cateva erori. Identificati-le.
SELECT empno, ename
Salary x 12 ANNUAL SALARY
FROM
emp;
6. Afisati structura tabelei DEPT si continutul ei.
7. Afisati structura tabelei EMP. Creati o interogare care sa afiseze numele, meseria, data angajarii
si numarul angajatului pentru fiecare angajat, numarul angajatului aparand primul. Salvati
instructiunea intr-un fisier xxx.sql.
8. Rulati interogarea din fisierul xxx.sql.
9. Afisati meseriile distincte din tabela EMP.
12
10. Incarcati fisierul xxx.sql in bufferul SQL. Redenumiti numele coloanelor cu Emp#, Employee,
Job, Hire Date si apoi rulati interogarea.
11. Afisati numele concatenat cu meseria, separate de virgula si un spatiu si numiti coloana
Employee and Title.
12. Afisati datele din tabela EMP. Separati fiecare coloana cu o virgula si numiti coloana
THE_OUTPUT.
13