Subconsultes SQL
Puede usar una subconsulta en lugar de una expresión en la lista de campos de una instrucción SELECT o en una ubicación o la cláusula HAVING. En una subconsulta, se utiliza una instrucción SELECT para proporcionar un conjunto de valores específicos para evaluar en el WHERE o HAVING expresión de la cláusula.
Use el predicado ANY o SOME, que son sinónimos, para recuperar registros de la consulta principal que satisfagan la comparación con los registros recuperados en la subconsulta. El ejemplo siguiente devuelve todos los productos cuyo precio unitario es mayor que el de cualquier producto vendido con un descuento del 25% o más:
SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);
Use el predicado ALL para recuperar solo los registros de la consulta principal que satisfagan la comparación con todos los registros recuperados en la subconsulta. Si ha cambiado alguna a todos en el ejemplo anterior, la consulta devolverá sólo los productos cuyo precio unitario es mayor que la de todos los productos vendidos con un descuento del 25% o más. Esto es mucho más restrictivo.
Use el predicado IN para recuperar solo los registros de la consulta principal para los que algún registro de la subconsulta contiene un valor igual. El ejemplo siguiente devuelve todos los productos con un descuento del 25% o más:
SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);
Por el contrario, puede usar NOT IN para recuperar solo los registros de la consulta principal para los que ningún registro de la subconsulta contiene un valor igual.
Use el predicado EXISTS (con la opcional palabra reservada NOT) en comparaciones verdadero o falso para determinar si la subconsulta devuelve todos los registros.
También puede usar alias de nombre de tabla en una subconsulta para hacer referencia a tablas enumeradas en una cláusula FROM fuera de la subconsulta. El ejemplo siguiente devuelve los nombres de los empleados cuyos salarios son igual o mayor que el promedio salarios de todos los empleados que tiene el mismo cargo. La tabla Employees se asigna el alias "T1":
SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;
En el ejemplo anterior, la AS palabra reservada es opcional.
En las consultas de tabla de referencias cruzadas se permiten algunas subconsultas, específicamente, como predicados (las de la cláusula WHERE). No se permiten subconsultas como resultado (las de la lista de selección) en las consultas de tabla de referencias cruzadas.
Comentaris
Publica un comentari a l'entrada