Documente Academic
Documente Profesional
Documente Cultură
Laborator 3 SQL
Interogri multi-relaie. Operaia de join. Operatori pe mulimi.
Subcereri necorelate.
I. [Obiective]
n acest laborator vom continua lucrul cu interogri multi-relaie (acestea sunt
cele care regsesc date din mai multe tabele). Am introdus deja diferite tipuri de join.
Vom relua aceste operaii, vom analiza i o alt metod de implementare a lor i de
asemenea vom utiliza operatori pe mulimi
i subcereri necorelate (fr
sincronizare).
Foarte utile n rezolvarea exerciiilor propuse vor fi funciile SQL, prezentate n
laboratorul 2.
II. [Join]
Am implementat deja operaia de join (compunere a tabelelor) n cadrul unor
exemple relative la modelul luat n considerare (HR).
Join-ul este operaia de regsire a datelor din dou sau mai multe tabele, pe
baza valorilor comune ale unor coloane. De obicei, aceste coloane reprezint cheia
primar, respectiv cheia extern a tabelelor. Reamintim c pentru a realiza un join ntre
n tabele, va fi nevoie de cel puin n 1 condiii de join.
Tipuri de join :
Inner join (equijoin, join simplu) corespunde situaiei n care valorile de pe
coloanele ce apar n condiia de join trebuie s fie egale.
Nonequijoin - condiia de join conine ali operatori dect operatorul egalitate.
Left | Right | Full Outer join un outer join este utilizat pentru a obine n
rezultat i nregistrrile care nu satisfac condiia de join. Operatorul pentru outer
join este semnul plus inclus ntre paranteze (+), care se plaseaz n acea parte a
condiiei de join care este deficitar n informaie. Efectul acestui operator este
de a uni liniile tabelului care nu este deficitar n informaie i crora nu le
corespunde nicio linie n cellalt tabel cu o linie cu valori null. Operatorul (+)
poate fi plasat n orice parte a condiiei de join, dar nu n ambele pri.
Full outer join left outer join + right outer join.
Obs: O condiie care presupune un outer join nu poate utiliza operatorul IN i nu poate fi
legat de alt condiie prin operatorul OR.
Obs: Un caz special al operaiei de join este self join join-ul unui tabel cu el nsui. n
ce situaie concret (relativ la modelul nostru) apare aceast operaie?
Obs : Alias-urile pot fi utilizate oriunde, ca o notaie mai scurt, n locul denumirii
tabelului. Ele pot avea lungimea de maxim 30 de caractere, dar este recomandat s fie
scurte i sugestive. Dac este atribuit un alias unui tabel din clauza FROM, atunci el
trebuie s nlocuiasc apariiile numelui tabelului n instruciunea SELECT.
Un alias poate fi utilizat pentru a califica denumirea unei coloane. Calificarea unei
coloane cu numele sau alias-ul tabelului se poate face :
opional, pentru claritate i pentru mbuntirea timpului de acces la baza de
date;
obligatoriu, ori de cte ori exist o ambiguitate privind sursa coloanei.
Ambiguitatea const, de obicei, n existena unor coloane cu acelai nume n mai
utiliza paranteze.
Operatorul UNION returneaz toate liniile selectate de dou cereri, eliminnd
duplicatele. Acest operator nu ignor valorile null i are preceden mai mic
dect operatorul IN.
Operatorul UNION ALL returneaz toate liniile selectate de dou cereri, fr a
elimina duplicatele. Precizrile fcute asupra operatorului UNION sunt valabile i
n cazul operatorului UNION ALL. n cererile asupra crora se aplic UNION ALL
nu poate fi utilizat cuvntul cheie DISTINCT.
Operatorul INTERSECT returneaz toate liniile comune cererilor asupra crora
se aplic. Acest operator nu ignor valorile null.
Operatorul MINUS determin liniile returnate de prima cerere care nu apar n
rezultatul celei de-a doua cereri. Pentru ca operatorul MINUS s funcioneze,
este necesar ca toate coloanele din clauza WHERE s se afle i n clauza
SELECT.
Observaii:
n mod implicit, pentru toi operatorii cu excepia lui UNION ALL, rezultatul este
ordonat cresctor dup valorile primei coloane din clauza SELECT.
Pentru o cerere care utilizeaz operatori pe mulimi, cu excepia lui UNION ALL,
server-ul Oracle elimin liniile duplicat.
n instruciunile SELECT asupra crora se aplic operatori pe mulimi, coloanele
selectate trebuie s corespund ca numr i tip de date. Nu este necesar ca numele
coloanelor s fie identice. Numele coloanelor din rezultat sunt determinate de numele
care apar n clauza SELECT a primei cereri.
IV. [Subcereri]
Prin intermediul subcererilor se pot construi interogri complexe pe baza unor
instruciuni simple.
O subcerere (subinterogare) este o comand SELECT integrat ntr-o clauz a
altei instruciuni SQL, numit instruciune printe sau instruciune exterioar.
Subcererile mai sunt numite instruciuni SELECT imbricate sau interioare.
Rezultatele subcererii sunt utilizate n cadrul cererii exterioare, pentru a
determina rezultatul final. n funcie de modul de evaluare a subcererii n raport cu
cererea exterioar, subcererile pot fi:
nesincronizate (necorelate) sau
sincronizate (corelate).
Prima clas de subcereri este evaluat dinspre interior ctre exterior, adic
interogarea extern acioneaz pe baza rezultatului cererii interne. Al doilea tip de
subcerere este evaluat invers, adic interogarea extern furnizeaz valori cererii interne,
iar rezultatele subcererii sunt transferate cererii externe.
Subcererile nesincronizate care apar n clauza WHERE a unei interogri sunt de
forma urmtoare:
SELECT
FROM
WHERE
V. [Exerciii - join]
1. Scriei o cerere pentru a se afia numele, luna (n litere) i anul angajrii pentru toi
salariaii din acelai departament cu Gates, al cror nume conine litera a. Se va
exclude Gates. Se vor da 2 soluii pentru determinarea apariiei literei A n nume. De
asemenea, pentru una din metode se va da i varianta join-ului conform standardului
SQL99.
2. S se afieze codul i numele angajailor care lucreaz n acelasi departament cu
cel puin un angajat al crui nume conine litera t. Se vor afia, de asemenea, codul i