5° Anno TEORIA 4. Introduzione al linguaggio SQL | Page 56

16 . Il linguaggio SQL Vers . 9.3 – Marzo 2024
UTILIZZO di Subquery nella clausola FROM
E ' possibile utilizzare una sottointerrogazione ( o sottoquery o subquery ) anche nella clausola FROM , con questa sintassi :
SELECT ....... FROM (< SubQuery >) [ AS ] nome ...
Notate che è obbligatorio assegnare un nome alla subquery , per poterla referenziare nelle altre parti della query .
Ad esempio :
SELECT t1 .*, Tabella2 .*
FROM ( SELECT A1 , A2 FROM Tabella1 WHERE A3 > 5 ) AS t1 , Tabella2 WHERE t1 . K1 = Tabella2 . K2 ;
In questo caso l ' output della subquery viene chiamato " t1 " ed il riferimento è usato sia nella SELECT sia nella condizione di EQUI-JOIN .
Esempio di sottoquery che produce una tabella derivata
Consideriamo le seguenti tre relazioni relative all ’ utilizzo di laboratori da parte di una classe di studenti :
Laboratorio ( CodLab , Denominazione , NumPosti ,) Classe ( CodClasse , NumAlunni )
Utilizza ( CodClasse , CodLab ,) con l ’ attributo " CodClasse " che è chiave esterna ( FK ) sull ’ attributo " CodClasse " della relazione " Classe " con l ’ attributo " CodLab " che è chiave esterna ( FK ) sull ’ attributo " CodLab " della relazione " Laboratorio "
Consideriamo la seguente interrogazione : Query : Vogliamo conoscere la denominazione dei laboratori utilizzati dalla classe " A45 " Partendo dall ’ EQUI-JOIN tra le tabelle Laboratorio e Utilizza
SELECT Laboratorio . Denominazione FROM Laboratorio , Utilizza WHERE ( Laboratorio . CodClasse = Utilizza . CodClasse );
è possibile , anche per ragioni di efficienza , " anticipare " la selezione per CodClasse = " A45 " sulla tabella " Utilizza " prima di effettuare il join giungendo alla seguente subquery :
SELECT Denominazione FROM Laboratorio , ( SELECT CodLab
FROM Utilizza SUB-QUERY
WHERE CodClasse = " A45 ") AS t1
WHERE Laboratorio . CodLab = t1 . CodLab ;
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 56