Professional Documents
Culture Documents
1. Escriba una consulta que devuelva todos los pedidos realizados el último día de
actividad que se pueden encontrar en la tabla Pedidos (Sales.Orders)
2. Escriba una consulta que devuelva todos los pedidos realizados por los clientes que
realizaron la mayor cantidad de pedidos. Tenga en cuenta que más de un cliente
puede tener la misma cantidad de pedidos(Sales.Orders)
3. Escriba una consulta que devuelva empleados que no realizaron pedidos el 1 de
mayo de 2016 o después (HR.Employees y Sales.Orders)
4. Escriba una consulta que devuelva países donde hay clientes pero no empleados
(Sales.Customers y HR.Employees)
5. Escriba una consulta que devuelva para cada cliente todos los pedidos realizados en
el último día de actividad del cliente (Sales.Orders)
6. Escriba una consulta que devuelva clientes que realizaron pedidos en 2015 pero no
en 2016 (Sales.Customers y Sales.Orders)
7. Escriba una consulta que devuelva los clientes que pidieron el producto 12
(Sales.Customers, Sales.Orders y Sales.OrderDetails)
EDUNEG Programación de Objetos 10 - 30
Sub Consultas
8. Escriba una consulta que calcule una cantidad total acumulada para cada cliente y
mes (Sales.CustOrders)
9. Explique la diferencia entre IN y EXISTS
10. Escribe una consulta que devuelva para cada pedido el número de días que pasaron
desde el pedido anterior del mismo cliente. Para determinar la antigüedad entre
pedidos, use orderdate como el elemento de clasificación principal y orderid como
desempate (Sales.Orders)
Alumnos
Id
Nombre
Apellido
Direccion
Fecha_nacimiento
Profesor Inscripcion
Id Id
Asignatura
Nombre IdAsignatura
Id
Apellido IdAlumno
Nombre
Direccion IdProfesor
Fecha_nacimiento Fecha
Nivel_Academico
DECLARE @i AS INT;
SET @i = 10;
SELECT @x;
USE TSQLV4;
DECLARE @empname AS NVARCHAR(61);
SELECT
@firstname = firstname,
@lastname = lastname
FROM HR.Employees
WHERE empid = 3;
Un lote es una o más declaraciones T-SQL enviadas por una aplicación cliente a
SQL Server para su ejecución como una sola unidad. El lote se somete a análisis
(verificación de sintaxis), resolución / enlace (verificación de la existencia de
objetos y columnas referenciados, verificación de permisos) y optimización como
una unidad.
SQL y T-SQL también admiten un objeto llamado cursor que puede usar para
procesar filas de un resultado de una consulta de una en una y en el orden
solicitado.
Esto contrasta con el uso de consultas basadas en conjuntos: consultas
normales sin cursor para las que manipula el conjunto o el conjunto múltiple
en su conjunto y no puede confiar en el orden.
DECLARE
@custid AS INT,
@prvcustid AS INT,
@ordermonth AS DATE,
@qty AS INT,
@runqty AS INT;
WHILE @@FETCH_STATUS = 0
BEGIN
IF @custid <> @prvcustid
SELECT @prvcustid = @custid, @runqty = 0;
CLOSE C;
DEALLOCATE C;
SELECT
custid,
CONVERT(VARCHAR(7), ordermonth, 121) AS ordermonth,
qty,
runqty
FROM @Result
ORDER BY custid, ordermonth;
EDUNEG Programación de Objetos 50 - 30
CURSOR - Ejemplo 2
SELECT Cur.orderyear,
Cur.qty AS curyearqty,
Prv.qty AS prvyearqty
FROM #MyOrderTotalsByYear AS Cur
LEFT OUTER JOIN #MyOrderTotalsByYear AS Prv
ON Cur.orderyear = Prv.orderyear + 1;
Las variables de tabla son similares a las tablas temporales locales en algunos
aspectos y diferentes en otros. Declara variables de tabla de la misma manera
que declara otras variables, utilizando la instrucción DECLARE .
Al igual que con las tablas temporales locales, las variables de tabla tienen una
presencia física como una tabla en la base de datos tempdb , al contrario del
error común de que solo existen en la memoria. Al igual que las tablas
temporales locales, las variables de tabla solo son visibles para la sesión de
creación, pero debido a que son variables tienen un alcance más limitado: solo
el lote actual. Las variables de tabla no son visibles ni para lotes internos en la
pila de llamadas ni para lotes posteriores en la sesión.
EDUNEG Programación de Objetos 57 - 30
Variables tipo TABLE
SELECT
YEAR(O.orderdate) AS orderyear,
SUM(OD.qty) AS qty
FROM Sales.Orders AS O
INNER JOIN Sales.OrderDetails AS OD
ON OD.orderid = O.orderid
GROUP BY YEAR(orderdate);
SELECT
Cur.orderyear,
Cur.qty AS curyearqty,
Prv.qty AS prvyearqty
FROM
@MyOrderTotalsByYear AS Cur
LEFT OUTER JOIN @MyOrderTotalsByYear AS Prv
ON Cur.orderyear = Prv.orderyear + 1;
SELECT
YEAR(O.orderdate) AS orderyear,
SUM(OD.qty) AS curyearqty,
LAG(SUM(OD.qty))
OVER(ORDER BY YEAR(orderdate)) AS prvyearqty
FROM Sales.Orders AS O
INNER JOIN Sales.OrderDetails AS OD
ON OD.orderid = O.orderid
GROUP BY YEAR(orderdate);
Con SQL Server, puede construir un lote de código T-SQL como una cadena
de caracteres y luego ejecutar ese lote. Esta capacidad se llama SQL
dinámico.
EXEC (@sql);
EXEC sp_executesql
@stmt = @sql,
@params = N'@orderid AS INT',
@orderid = 10248;
SET @first = 1;
CLOSE C;
DEALLOCATE C;
Las rutinas son objetos programables que encapsulan código para calcular
un resultado o ejecutar actividad.
SELECT
empid,
firstname,
lastname,
birthdate,
dbo.GetAge(birthdate, SYSDATETIME()) AS age
FROM HR.Employees;
getDescuento(p1, p2)
p1 -> precio (cantidad por precio unitario)
p2 -> descuento