Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
si applica a:SQL Server
Ogni volta che si scrive una query di recupero, si definiscono le colonne desiderate, le righe desiderate e dove Query Processor deve trovare i dati originali. In genere, questi dati originali sono costituiti da una tabella o da più tabelle unite insieme. Tuttavia, i dati originali possono provenire da origini diverse dalle tabelle. Infatti, può provenire da viste, query, sinonimi o funzioni definite dall'utente che restituiscono una tabella.
Uso di una vista al posto di una tabella
È possibile selezionare le righe da una visualizzazione. Si supponga, ad esempio, che il database includa una vista denominata "ExpensiveBooks", in cui ogni riga descrive un titolo il cui prezzo supera 19,99. La definizione della vista potrebbe essere simile alla seguente:
SELECT *
FROM titles
WHERE price > 19.99
È possibile selezionare i libri di psicologia costosi semplicemente selezionando i libri di psicologia dalla visualizzazione ExpensiveBooks. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology'
Analogamente, una visualizzazione può partecipare a un'operazione JOIN. Ad esempio, è possibile trovare le vendite di libri costosi semplicemente aggiungendo la tabella vendite alla visualizzazione ExpensiveBooks. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT *
FROM sales
INNER JOIN
ExpensiveBooks
ON sales.title_id
= ExpensiveBooks.title_id
Per altre informazioni sull'aggiunta di una vista a una query, vedere Aggiungere tabelle alle query (Visual Database Tools).
Uso di una query al posto di una tabella
È possibile selezionare righe da una query. Si supponga, ad esempio, di aver già scritto una query che recupera i titoli e gli identificatori dei libri coautori, ovvero i libri con più autori. Il codice SQL potrebbe essere simile al seguente:
SELECT
titles.title_id, title, type
FROM
titleauthor
INNER JOIN
titles
ON titleauthor.title_id
= titles.title_id
GROUP BY
titles.title_id, title, type
HAVING COUNT(*) > 1
È quindi possibile scrivere un'altra query basata su questo risultato. Ad esempio, è possibile scrivere una query che recupera i libri di psicologia coautore. Per scrivere questa nuova query, è possibile usare la query esistente come origine dei dati della nuova query. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT
title
FROM
(
SELECT
titles.title_id,
title,
type
FROM
titleauthor
INNER JOIN
titles
ON titleauthor.title_id
= titles.title_id
GROUP BY
titles.title_id,
title,
type
HAVING COUNT(*) > 1
)
co_authored_books
WHERE type = 'psychology'
Il testo evidenziato mostra la query esistente utilizzata come origine dei dati della nuova query. Si noti che la nuova query usa un alias ("co_authored_books") per la query esistente. Per altre informazioni sugli alias, vedere Create Table Aliases (Visual Database Tools) e Create Column Aliases (Visual Database Tools).
Analogamente, una query può partecipare a un'operazione di JOIN. Ad esempio, è possibile trovare le vendite di libri coautori costosi semplicemente aggiungendo la visualizzazione ExpensiveBooks alla query che recupera i libri coautori. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT
ExpensiveBooks.title
FROM
ExpensiveBooks
INNER JOIN
(
SELECT
titles.title_id,
title,
type
FROM
titleauthor
INNER JOIN
titles
ON titleauthor.title_id
= titles.title_id
GROUP BY
titles.title_id,
title,
type
HAVING COUNT(*) > 1
)
Per ulteriori informazioni sull'integrazione di una query in un'altra, vedere Aggiungere tabelle alle query (Visual Database Tools).
Uso di una funzione User-Defined al posto di una tabella
In SQL Server 2000 o versione successiva è possibile creare una funzione definita dall'utente che restituisce una tabella. Tali funzioni sono utili per eseguire logica complessa o procedurale.
Si supponga, ad esempio, che la tabella employee contenga una colonna aggiuntiva, employee.manager_emp_id e che esista una chiave esterna da manager_emp_id a employee.emp_id. All'interno di ogni riga della tabella dipendente, la colonna manager_emp_id indica il capo del dipendente. Più precisamente, indica il emp_id del capo del dipendente. È possibile creare una funzione definita dall'utente che restituisce una tabella contenente una riga per ogni dipendente che lavora all'interno di una particolare gerarchia organizzativa del manager di alto livello. È possibile chiamare la funzione fn_GetWholeTeam e progettarla per accettare una variabile di input, ovvero il emp_id del manager di cui si vuole recuperare il team.
È possibile scrivere una query che usa la funzione fn_GetWholeTeam come origine dei dati. Il codice SQL risultante potrebbe essere simile al seguente:
SELECT *
FROM
fn_GetWholeTeam ('VPA30890F')
"VPA30890F" è il emp_id del manager di cui si vuole recuperare l'organizzazione. Per altre informazioni sull'aggiunta di una funzione definita dall'utente a una query, vedere Aggiungere tabelle alle query (Visual Database Tools). Per una descrizione completa delle funzioni definite dall'utente, vedere User-Defined Funzioni.