Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Desarrollo de la práctica.
Comentarios En una línea
USE northwind
SELECT unitprice,
(unitprice * 1.1), -- precio incrementado en 10%
productname
FROM products
GO
Comentarios En un bloque
/* Este código devuelve todas las filas de la tabla products y muestra el precio por unidad, el
precio umentado en un 10 por ciento y el nombre del producto. */
USE northwind
SELECT unitprice, (unitprice * 1.1), productname
FROM products
GO
Variables
Sintaxis DECLARE {@variableLocal tipoDatos} [,...n] SET @nombreVariableLocal =
expresión
En este ejemplo se crean las variables locales @EmpID y @vlname, se asigna un valor a
@vlname y, a continuación, se asigna un valor a @EmpID al consultar en la base de datos
NorthWind para seleccionar el registro que contiene el valor de la variable local @vlname.
USE northwind
DECLARE @EmpID varchar(11) ,@vlName char(20)
SET @vlname = 'Dodsworth'
SELECT @EmpID = employeeid FROM employees
WHERE LastName = @vlname
SELECT @EmpID AS EmployeeID
Ejemplo 2
En este ejemplo de función de metadatos se devuelve el nombre de la base de datos que se
está utilizando actualmente.
USE northwind
SELECT DB_NAME() AS 'database'
Ejemplo 3
En este ejemplo se demuestra cómo puede convertir fechas a distintos estilos.
SELECT 'ANSI:', CONVERT (varchar(30), GETDATE(), 102) AS Style
UNION
SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111)
UNION
SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113)
Ejemplo 4
En este ejemplo se utiliza la opción DATEFORMAT de la instrucción SET para dar formato
a las fechas de la duración de una conexión. Esta configuración sólo se utiliza en la
interpretación de las cadenas de caracteres cuando se convierten a valores de fecha. No tiene
efecto al mostrar los valores de fecha.
SET DATEFORMAT dmy
DECLARE @vdate datetime SET @vdate = '29/11/98'
SELECT @vdate
Ejemplo 5
En el ejemplo siguiente se calcula el valor ampliado de un producto que forma parte de un
pedido; para ello se multiplica el precio unitario por la cantidad pedida y, a continuación, se
filtran los resultados de forma que sólo se devuelvan las filas correspondientes a pedidos con
un valor ampliado mayor de 10000.
SELECT OrderID, ProductID,(UnitPrice * Quantity) as ExtendedAmount
FROM [Order Details]
WHERE (UnitPrice * Quantity) > 10000
Ejemplo 6
En este ejemplo se determina si un cliente tiene algún pedido antes de eliminarlo de la lista
de clientes.
USE northwind
IF EXISTS (SELECT * FROM orders
WHERE customerid = 'frank')
PRINT '*** Customer cannot be deleted ***'
ELSE
BEGIN
DELETE customers WHERE customerid = 'frank' PRINT '*** Customer deleted ***'
END
Ejemplo 7
Ejecutar las siguientes consultas en el analizador de consulta y describir que hace cada una,
demostrar cómo afecta a los datos, es decir contrastar el antes y después.
Nota: En el ejercicio 15 la función EXEC ejecútala por separado, del bloque de consulta del
CREATE PROC porque es la forma de mandar a llamar a ese procedimiento que ya creaste.
El @ es el parámetro que espera ese procedimiento para ejecutar la consulta que lleva dentro.
El doble guión es la forma de comentar líneas en el Analizador de consultas.
Ejemplo 9
Ejecutar las siguientes consultas en el analizador de consulta y describir que hace cada una,
demostrar cómo afecta a los datos, es decir contrastar el antes y después.
02. SELECT OrderID, SUM (Quantity) As [Sin nombre de columna] FROM [Order
Details] WHERE OrderID BETWEEN 11000 AND 11002 GROUP BY OrderID
05. SELECT OrderID, AVG (Quantity) AS promedio FROM [Order Details] WHERE
OrderID BETWEEN 11000 AND 11002 GROUP BY OrderID
--Creación de BD
CREATE Database ventas
GO
USE ventas
GO
---tabla vendedor
CREATE TABLE VENDEDOR( idvendedor INT PRIMARY KEY , nombre VARCHAR(20),
apellido VARCHAR(10),
);
GO
---tabla ventas
CREATE TABLE VENTAS(
Idventa INT PRIMARY KEY , nombre VARCHAR(20), apellido VARCHAR(10), idvendedor INT
foreign key (idvendedor) references VENDEDOR(idvendedor))
Ejemplo 11
Realice los siguientes ejercicios sobre la Base de Datos Nortwind
-------------------------------------------------------------------------
--INSTRUCCIONES SELECT ELEMENTALES--
-------------------------------------------------------------------------
--1. Mostrar todas (*) las columnas de una tabla (from).
select * from dbo.Products
-------------------------------------------------------------------------
--INSTRUCCIONES WHERE (Condiciones en Select)--
-------------------------------------------------------------------------
--
1. Condiciones con expresiones matemáticas boleanas (>, <, =, >=, <=, !=
ó <>).
--(Mostrar solo los productos con un precio mayor que 25)
select * from dbo.Products
where UnitPrice > 25
--(Mostrar el nombre de los productos con precio igual a 21)
select ProductName as Nombre from dbo.Products
where UnitPrice = 21
--
(Mostrar los Paises que comienzan por U y después un solo caracter).
select Country as Paises from Customers
where Country like 'U_' --El '_' significa cualquier caracter.
--
4. Mostrar solamente las filas con valores nulos (IS NULL) en una columna
determinada.
select * from dbo.Customers
where Region is null
--
5. Mostrar solamente las filas con valores no nulos (IS NOT NULL) en una
columna determinada.
select * from Customers
where Fax is not null
--
7. Mostrar valores condicionalmente en función de un grupo de valores de
una columna (ANY/SOME)
--La clausula ANY es equivalente a SOME.
--Cuando tenemos una consulta que
devuelve un conjunto de resultados podemos necesitar compararlos
--
todos ellos y de una vez con otro valor. Lo mejor es ver un ejemplo de es
tas expresiones:
--
Mostrar los productos cuando su precio es mayor que los precios de los de
talles
--de pedidos, cuando la cantidad del pedido es 130.
--
Por lo tanto solo se mostrarán productos cuyo precio sea mayor que 18.00,
incluido 35.25 si lo hubiera.
--
8. Con la clausula ALL podemos hacer lo mismo pero en este caso devolverá
todos los productos
--
cuyo precio sea mayor que todos los precios de los detalles de pedidos de
130. Es decir, mayor que
--
todos los valores devueltos por la segunda consulta (18.00, 35.25), o lo
que es lo mismo,
--mayor que 35.25
--
Mostrar los empleados cuya ciudad también exista en la tabla de empleados
.
-------------------------------------------------------------------------
--INTRUCCIONES ORDER BY (Ordenación en Select)--
-------------------------------------------------------------------------
--1. Orden ascendente de filas.
--(Tabla Productos ordenada por el precio de menor a mayor).
select * from dbo.Products
order by UnitPrice asc
-------------------------------------------------------------------------
--SUBCONSULTAS EN SELECT O CONSULTAS ANIDADAS--
-------------------------------------------------------------------------
-
- Una subconsulta es una consulta SELECT dentro de un WHERE en una consul
ta previa SELECT. Es decir, realizamos
-
- dentro de una consulta, otra consulta para mostrar datos especificos de
la primera consulta. Ejemplos:
--
1. Mostrar todos los empleados que tengan el mismo sexo (TitleOfCourtesy)
que el empleado 9 (EmployeeID).
select * from dbo.Employees
where TitleOfCourtesy = (select TitleOfCourtesy from dbo.Employees
where EmployeeID = 9) --
Esta subconsulta devuelve 'Ms'.
--
2. Mostrar todos los productos de las categorías (bdo.Categories) bebidas
(Beverages) y condimentos (Condiments).
select * from dbo.Products
where CategoryID in (select CategoryID from dbo.Categories
where CategoryName in ('Beverages','Condiments')) --
Esta subconsulta devuelve 1 y 2.
-------------------------------------------------------------------------
--FUNCIONES DE AGREGACIÓN EN SELECT--
-------------------------------------------------------------------------
--1. Obtener el número de filas de una tabla --> COUNT(*).
select count(*) from dbo.Customers --
Se cuentan todos los valores, incluidos los NULL.
-------------------------------------------------------------------------
--
INSTRUCCIÓN GROUP BY (Agrupamiento de filas en funciones de agregación)--
-------------------------------------------------------------------------
--
La instrucción GROUP BY permite especificar las columnas sobre las que se
quieren aplicar las funciones de
--
agregación en lugar de hacerlo en una tabla completa. Es decir, muestra u
n resultado de la función de agregación
--para cada elemento de la columna que especifiquemos. Ejemplos:
--
NOTA 1: Siempre debe especificarse las mismas columnas en SELECT que en G
ROUP BY.
--
NOTA 2: Es una buena práctica ordenar (ORDER BY) los elementos cuando se
realizan este tipo de consultas.
-------------------------------------------------------------------------
--INSTRUCCIÓN HAVING (Condiciones en los resultados de GROUP BY)--
-------------------------------------------------------------------------
--
La instrucción HAVING es similar a WHERE pero para agrupamientos de funci
ones de agregación. Ejemplo:
--
1. Mostrar lo mismo que el ejercicio 1 de la sección anterior, con precio
s mayor que 10 y repiticiones mayor que 2.
select UnitPrice, count(*) as [Filas con este precio] from Products
where UnitPrice > 10
group by UnitPrice
having count(*) > 2
-------------------------------------------------------------------------
Ejemplo 12
Realice el siguiente ejercicio
use Northwind
go
declare @i int
set @i = 1
while @i<=10 -- 1.000.000 filas
begin
INSERT INTO dbo.varchar_variable_dcha
SELECT top (100000)
replace(cast(NEWID() as varchar(100)), '-','')
+ REPLICATE('a', 200-32)
FROM [Northwind].[dbo].[Orders]
CROSS JOIN [Northwind].[dbo].[Order Details]
En este ejercicio se debe escribir sentencias SQL. Cada declaración sólo utilizará una sola tabla. Pasar
por correo al profesor todas las sentecias.
Requisitos previos
El archivo lab052.zip contiene los archivos de comandos necesarios para la
realización de la práctica, así como las correspondientes soluciones.
Ejercicio 1
Uso de la palabra clave TOP n
En este ejercicio, va a utilizar la palabra clave TOP n y la cláusula WITH TIES
para obtener las primeras filas, o un porcentaje de ellas, de un conjunto de
resultados. La carpeta Soluciones contiene las secuencias de comandos
completas para este ejercicio.
orderid totalsale
10865 15810.0000
10981 15810.0000
10353 10540.0000
10417 10540.0000
10889 10540.0000
10424 10329.2000
10897 9903.2000
10372 8432.0000
10540 7905.0000
10816 7905.0000
Ejercicio 2
Uso de las cláusulas GROUP BY y HAVING
En este ejercicio, va a utilizar las cláusulas GROUP BY y HAVING
para resumir datos de la base de datos Northwind. La carpeta Soluciones
contiene las secuencias de comandos completas para este ejercicio.
(2 filas afectadas)
(8 filas afectadas)
(8 filas afectadas)
Procedimientos para agrupar y resumir datos 7
Ejercicio 3
Uso de los operadores ROLLUP y CUBE
En este ejercicio, va a utilizar los operadores ROLLUP y CUBE para generar
datos de resumen. También va a utilizar la función GROUPING para
determinar las filas del resultado que son resúmenes. La carpeta Soluciones
contiene las secuencias de comandos completas para este ejercicio.
_____________________________________________________________
____________________________________________________________
____________________________________________________________
10 Procedimientos para agrupar y resumir datos
Ejercicio 4
Uso de las cláusulas COMPUTE y COMPUTE BY
En este ejercicio va a utilizar las cláusulas COMPUTE y COMPUTE BY para
generar informes con secciones y totales, y promedios finales.
La carpeta Soluciones contiene las secuencias de comandos completas para este
ejercicio.
Sum
==========
543
11076 20
11076 20
11076 10
Sum
==========
50
(8 filas afectadas)
12 Procedimientos para agrupar y resumir datos
Resultado Su resultado será similar al siguiente conjunto de resultados. Observe que este
conjunto de resultados es similar al del paso 3 del procedimiento anterior, con
la adición de los totales finales (cantidad total y cantidad promedio).
orderid quantity
11075 10
11075 30
11075 2
Sum
==========
42
11076 20
11076 20
11076 10
Sum
==========
50
Sum
==========
92
Avg
==========
15