La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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.

Presentazioni simili


Presentazione sul tema: "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."— Transcript della presentazione:

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 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);


Scaricare ppt "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."

Presentazioni simili


Annunci Google