Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoConcettina Bucci Modificato 10 anni fa
1
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore di quello di Abel? SUBQUERY : qual è il salario di Abel? Usare le subquery significa elaborare due query contemporaneamente e usare il risultato della prima come valore di ricerca per la seconda
2
SINTASSI SELECT select_list FROM tabella WHERE espr operatore (SELECT select list FROM tabella); la subquery viene eseguita prima della main query il risultato della subquery viene usato per eseguire la main query è utile, ad esempio, per selezionare righe da una tabella e le condizioni dipendono dalla tabella stessa
3
SINTASSI è possibile usare subquery in - WHERE - HAVING - FROM nella sintassi loperatore può essere,>=,<> oppure operatori su righe multiple come IN
4
USO DI UNA SUBQUERY SELECT last_name FROM employees WHERE salary > (SELECT salary FROM employees WHERE last_name= Abel); mettere la subquery tra parentesi mettere la subquery ad destra delloperatore INNER QUERY OUTER QUERY
5
TIPI DI SUBQUERY Single-row subquery Multiple-row subquery Main subquery Main subquery ST_CLERK SA_MAN
6
SINGLE-ROW SUBQUERY Restituiscono un solo valore si possono utilizzare gli operatori su singola riga OperatoreSignificato =uguale >maggiore di >=maggiore o uguale di <minore a <=minore ugale a <>diverso
7
SINGLE-ROW SUBQUERY Esempio SELECT last_name, job_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE job_id = 141);
8
SINGLE-ROW SUBQUERY Esempio SELECT last_name, job_id,salary FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE job_id = 141) AND salary > (SELECT salary FROM employees WHERE employee_id = 143); ST_CLERK 2600
9
USARE FUNZIONI DI GRUPPO NELLE SUBQUERY È possibile usare funzioni di gruppo nella subquery che restituiscono un solo valore SELECT last_name, job_id,salary FROM employees WHERE salary > (SELECT MIN(salary) FROM employees); 2500
10
SINGLE-ROW SUBQUERY Oracle server esegue prima la subquery Oracle server restituisce risultati nella clausola HAVING della main query SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);
11
SINGLE-ROW SUBQUERY Qual è lerrore? SELECT employee_id, last_name FROM employees WHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id );
12
SINGLE-ROW SUBQUERY E se la subquery non restituisce risultati? No rows selected Non ci sono impiegati di nome Haas. Louter query prende in input il risultato della subquery che è null e lo usa nella clausola WHERE. SELECT last_name, job_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE last_name = Haas);
13
MULTIPLE-ROW SUBQUERY restituisce più di una riga usa gli operatori multipli OperatoreDescrizione IN Uguale ad ogni membro della lista ANY Compara i valori della main query con ogni valore restituito dalla subquery ALL Compara i valori della main query con tutti i valori restituiti dalla subquery
14
MULTIPLE-ROW SUBQUERY La query visualizza gli impiegati che non sono programmatori (IT_PROG) e il cui salario è minori di quello di ogni programmatore. SELECT employee_id, last_name, job_id FROM employees WHERE salary < ANY (SELECT salary FROM employees WHERE job_id = IT_PROG) AND job_id <> IT_PROG;
15
MULTIPLE-ROW SUBQUERY La query visualizza gli impiegati il cui salario è minore del salario di tutti gli impiegati con job IT_PROG e che non sono IT_PROG IN, ANY e ALL possono essere usate con loperatore NOT SELECT employee_id, last_name, job_id FROM employees WHERE salary < ALL (SELECT salary FROM employees WHERE job_id = IT_PROG) AND job_id <> IT_PROG;
16
MULTIPLE-ROW SUBQUERY Se uno dei valori restituiti dalla subquery è nullo, la query restituisce null. SELECT emp.last_name FROM employees emp WHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr);
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.