Subconsultassql

Solo disponible en BuenasTareas
  • Páginas : 5 (1234 palabras )
  • Descarga(s) : 0
  • Publicado : 16 de febrero de 2012
Leer documento completo
Vista previa del texto
El poder de los subquerys (subconsultas SQL)

Posted by Elvin Gonzalez Shejab | Posted in SQL subquery , subconsulta | Posted on 12:33 AM

Un subquery es una instrucción SELECT que está anidado dentro de otro T-SQL. Una instrucción SELECT subquery se ejecuta de forma independiente de la T-SQL, en el que está anidado y devolverá un conjunto de resultados. Una instrucción SELECT subquery puedeser única y no depende de la declaración en la que está anidado; además puede devolver cualquier número de valores, y se puede encontrar en la lista de columnas de una instrucción SELECT, el FROM, GROUP BY, HAVING, y / o cláusulas ORDER BY de una instrucción T-SQL. Un subquery puede ser utilizado como un parámetro a una llamada de función. Básicamente, una subquery puede ser utilizado en cualquierexpresión.

En los siguientes ejemplos se muestran los casos más importantes del gran poder de los subquerys son:

El uso de una subconsulta en la lista de columnas de una instrucción SELECT:
Supongamos que usted desea ver el pasado y el IdPedido OrderDate de la última orden que fue enviada a París. Junto con esa información, dice que también le gustaría ver el OrderDate de la última ordende envío, independientemente de la CiudadDestinatario. Además de esto, también quisiera para calcular la diferencia de días entre las dos OrderDates diferentes. Aquí está mi T-SQL SELECT para lograr esto:

SELECT TOP 1 OrderId,
CONVERT(CHAR(10), OrderDate,121) Last_Paris_Order,
(SELECT CONVERT(CHAR(10),MAX(OrderDate),121)
FROM Northwind.dbo.Orders) Last_OrderDate,DATEDIFF(dd,OrderDate,(SELECT MAX(OrderDate)
FROM Northwind.dbo.Orders)) Day_Diff
FROM Northwind.dbo.Orders
WHERE ShipCity = 'Paris'
ORDER BY OrderDate DESC

El uso de una subconsulta en la cláusula WHERE:

Supongamos que una empresa le gustaría hacer algo de marketing específicas. Este marketing dirigido pondría en contacto con los clientes en el país con el menor número de pedidos. Se espera que este marketingdirigidas a aumentar las ventas totales en el país en cuestión. Aquí hay un ejemplo que utiliza una subconsulta para devolver la información de contacto del cliente para el país con el menor número de pedidos:

SELECT Country,
CompanyName,
ContactName,
ContactTitle,
Phone
FROM Northwind.dbo.Customers
WHERE country = (SELECT TOP 1 country
FROM Northwind.dbo.Customers C
JOINNorthwind.dbo.Orders O
ON C.CustomerId = O.CustomerID
GROUP BY country
ORDER BY count(*))

Aquí hemos escrito una subconsulta que se une a la de clientes y las tablas para determinar el número total de pedidos de cada país.

El uso de una subconsulta en la cláusula FROM:
La cláusula FROM identifica normalmente las tablas utilizadas en el T-SQL. Usted puede pensar de cada uno de los cuadros señalados en lacláusula FROM como un conjunto de registros. Bueno, una subconsulta es sólo un conjunto de registros, y por lo tanto puede ser utilizada en la cláusula FROM como una tabla. Aquí hay un ejemplo donde se utiliza una subconsulta en la cláusula FROM de una instrucción SELECT:

SELECT au_lname,
au_fname,
title FROM (SELECT au_lname, au_fname, au_id
FROM pubs.dbo.authors
WHERE state = 'CA') as AJOIN pubs.dbo.titleauthor ta ON A.au_id = ta.au_id
JOIN pubs.dbo.titles t ON ta.title_id = t.title_id


Subquery en la cláusula FROM de una instrucción UPDATE:

SET NOCOUNT ON
CREATE TABLE x(
i INT IDENTITY,
a CHAR(1))
INSERT INTO x VALUES ('A')
INSERT INTO x VALUES ('B')
INSERT INTO x VALUES ('C')
INSERT INTO x VALUES ('D')
SELECT * FROM x
UPDATE x
SET a = b.a
FROM (SELECT MAX(a)AS a FROM x) b
WHERE I > 2

SELECT * FROM x
DROP TABLE x

SELECT * FROM x
DROP TABLE x

Aquí hemos creado una tabla denominada "x" que tiene cuatro filas. Luego se procedió a actualizar los registros en que "i" es mayor que 2, con el valor máximo en la columna "a". Usamos un subquery en la cláusula FROM de la instrucción UPDATE a la identidad del valor máximo de la columna "a".

El...
tracking img