Crear consultas con algo aparte de una tabla (Visual Database Tools)
se aplica a:sql Server
Cada vez que escribe una consulta de recuperación, expone qué columnas desea, qué filas necesita y dónde debe el procesador de consultas encontrar los datos originales. Normalmente, estos datos originales constan de una tabla o de varias tablas combinadas. Pero los datos originales pueden provenir de orígenes distintos de tablas. De hecho, puede proceder de vistas, consultas, sinónimos o funciones definidas por el usuario que devuelven una tabla.
Usar una vista en lugar de una tabla
Puede seleccionar filas de una vista. Por ejemplo, supongamos que la base de datos incluye una vista denominada "ExpensiveBooks", en la que cada fila describe un título cuyo precio supera los 19,99. La definición de vista podría tener este aspecto:
SELECT *
FROM titles
WHERE price > 19.99
Puede seleccionar los libros de psicología costosos simplemente seleccionando los libros de psicología de la vista ExpensiveBooks. El código SQL resultante podría tener este aspecto:
SELECT *
FROM ExpensiveBooks
WHERE type = 'psychology'
De forma similar, una vista puede participar en una operación JOIN (unión). Por ejemplo, puede encontrar las ventas de libros caros uniendo simplemente la tabla de ventas con la vista ExpensiveBooks. El código SQL resultante podría tener este aspecto:
SELECT *
FROM sales
INNER JOIN
ExpensiveBooks
ON sales.title_id
= ExpensiveBooks.title_id
Para obtener más información sobre cómo agregar una vista a una consulta, vea Agregar tablas a consultas (Visual Database Tools).
Usar una consulta en lugar de una tabla
Puede seleccionar filas de una consulta. Por ejemplo, supongamos que ya ha escrito una consulta que recupera títulos e identificadores de los libros coautores: los libros con más de un autor. Sql podría tener este aspecto:
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
A continuación, puede escribir otra consulta que se basa en este resultado. Por ejemplo, puede escribir una consulta que recupere los libros de psicología coautores. Para escribir esta nueva consulta, puede usar la consulta existente como origen de los datos de la nueva consulta. El código SQL resultante podría tener este aspecto:
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'
El texto resaltado muestra la consulta existente utilizada como origen de los datos de la nueva consulta. Tenga en cuenta que la nueva consulta usa un alias ("co_authored_books") para la consulta existente. Para obtener más información sobre los alias, vea Crear alias de tabla (Visual Database Tools) y Crear alias de columna (Visual Database Tools).
Del mismo modo, una consulta puede participar en una operación JOIN. Por ejemplo, puede encontrar las ventas de libros de coautoría costosos simplemente uniendo la vista ExpensiveBooks con la consulta que recupera los libros de coautoría. El código SQL resultante podría tener este aspecto:
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
)
Para obtener más información sobre cómo agregar una consulta a una consulta, vea Agregar tablas a consultas (Visual Database Tools).
Usar una función User-Defined en lugar de una tabla
En SQL Server 2000 o posterior, puede crear una función definida por el usuario que devuelva una tabla. Estas funciones son útiles para realizar lógicas complejas o de procedimientos.
Por ejemplo, supongamos que la tabla employee contiene una columna adicional, employee.manager_emp_id y que existe una clave externa de manager_emp_id a employee.emp_id. Dentro de cada fila de la tabla employee, la columna manager_emp_id indica el jefe del empleado. Más precisamente, indica el emp_id del jefe del empleado. Puede crear una función definida por el usuario que devuelva una tabla que contenga una fila para cada empleado que trabaje dentro de una jerarquía organizativa de alto nivel determinada. Puede llamar a la función fn_GetWholeTeam y diseñarla para tomar una variable de entrada: el emp_id del administrador cuyo equipo desea recuperar.
Puede escribir una consulta que use la función fn_GetWholeTeam como origen de datos. El código SQL resultante podría tener este aspecto:
SELECT *
FROM
fn_GetWholeTeam ('VPA30890F')
"VPA30890F" es el emp_id del administrador cuya organización desea recuperar. Para obtener más información sobre cómo agregar una función definida por el usuario a una consulta, consulte Agregar tablas a consultas (Visual Database Tools). Para obtener una descripción completa de las funciones definidas por el usuario, consulte User-Defined Functions.