Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Ejercicios de secuencia, Ejercicios de Idioma Español

Asignatura: castellano, Profesor: , Carrera: Relacions Laborals i Recursos Humans, Universidad: UV

Tipo: Ejercicios

2013/2014

Subido el 12/10/2014

eva_90-4
eva_90-4 🇪🇸

2.3

(6)

4 documentos

1 / 39

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Ejercicios Resueltos de
SQL
Borja Sotomayor
1 de junio de 2002
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27

Vista previa parcial del texto

¡Descarga Ejercicios de secuencia y más Ejercicios en PDF de Idioma Español solo en Docsity!

Ejercicios Resueltos de

SQL

Borja Sotomayor

1 de junio de 2002

©c Borja Sotomayor, 2002

Este documento ha sido compuesto ´ıntegramente en LATEX.

Para producir el documento se ha utilizado pdfTEX-1.0a de la distribuci´on MiKTEX. http://www.miktex.org/

Se han utilizado los paquetes amssymb, babel, color, fancybox, fancyvrb, graphicx, hyperref, ifthen, inputenc, marvosym, scrbook y scrpage (KOMA–Script), titlesec, titletoc, pdfcrypt, y url.

Los diagramas han sido elaboradas con Microsoftr^ Visior^2002. http://www.microsoft.com/office/visio/

La Tienda de Inform´atica

FABRICANTES PK Codigo int identity

Nombre nvarchar(100)

ARTICULOS PK Codigo int identity

Nombre nvarchar(100) Precio int FK1 Fabricante int

1.1. Obtener los nombres de los productos de la tienda.

SELECT Nombre FROM ARTICULOS

1.2. Obtener los nombres y los precios de los productos de la tienda.

SELECT Nombre, Precio FROM ARTICULOS

1.3. Obtener el nombre de los productos cuyo precio sea menor o igual a 200 ¤.

SELECT Nombre FROM ARTICULOS WHERE Precio > 200

1.4. Obtener todos los datos de los art´ıculos cuyo precio est´e entre los 60 ¤ y los 120 ¤ (ambas cantidades incluidas).

/* Con AND */ SELECT * FROM ARTICULOS WHERE Precio >= 60 AND Precio <= 120

/* Con BETWEEN */ SELECT * FROM ARTICULOS WHERE Precio BETWEEN 60 AND 120

1 La Tienda de Inform´atica

/* Sin INNER JOIN */ SELECT ARTICULOS.Nombre, Precio, FABRICANTES.Nombre FROM ARTICULOS, FABRICANTES WHERE ARTICULOS.Fabricante = FABRICANTES.Codigo

/* Con INNER JOIN */ SELECT ARTICULOS.Nombre, Precio, FABRICANTES.Nombre FROM ARTICULOS INNER JOIN FABRICANTES ON ARTICULOS.Fabricante = FABRICANTES.Codigo

1.12. Obtener el precio medio de los productos de cada fabricante, mostrando solo los c´odigos de fabricante.

SELECT AVG(Precio), Fabricante FROM ARTICULOS GROUP BY Fabricante

1.13. Obtener el precio medio de los productos de cada fabricante, mostrando el nombre del fabricante.

/* Sin INNER JOIN */ SELECT AVG(Precio), FABRICANTES.Nombre FROM ARTICULOS, FABRICANTES WHERE ARTICULOS.Fabricante = FABRICANTES.Codigo GROUP BY FABRICANTES.Nombre

/* Con INNER JOIN */ SELECT AVG(Precio), FABRICANTES.Nombre FROM ARTICULOS INNER JOIN FABRICANTES ON ARTICULOS.Fabricante = FABRICANTES.Codigo GROUP BY FABRICANTES.Nombre

1.14. Obtener los nombres de los fabricantes que ofrezcan productos cuyo precio medio sea mayor o igual a 150 ¤.

/* Sin INNER JOIN */ SELECT AVG(Precio), FABRICANTES.Nombre FROM ARTICULOS, FABRICANTES WHERE ARTICULOS.Fabricante = FABRICANTES.Codigo GROUP BY FABRICANTES.Nombre HAVING AVG(Precio) >= 150

/* Con INNER JOIN */ SELECT AVG(Precio), FABRICANTES.Nombre FROM ARTICULOS INNER JOIN FABRICANTES ON ARTICULOS.Fabricante = FABRICANTES.Codigo GROUP BY FABRICANTES.Nombre HAVING AVG(Precio) >= 150

Ejercicios de Bases de Datos 3

1 La Tienda de Inform´atica

1.15. Obtener el nombre y precio del art´ıculo m´as barato.

SELECT Nombre, Precio FROM ARTICULOS WHERE Precio = (SELECT MIN(Precio) FROM ARTICULOS)

1.16. Obtener una lista con el nombre y precio de los art´ıculos m´as caros de cada pro- veedor (incluyendo el nombre del proveedor).

/* Sin INNER JOIN */ SELECT A.Nombre, A.Precio, F.Nombre FROM ARTICULOS A, FABRICANTES F WHERE A.Fabricante = F.Codigo AND A.Precio = ( SELECT MAX(A.Precio) FROM ARTICULOS A WHERE A.Fabricante = F.Codigo )

/* Con INNER JOIN */ SELECT A.Nombre, A.Precio, F.Nombre FROM ARTICULOS A INNER JOIN FABRICANTES F ON A.Fabricante = F.Codigo AND A.Precio = ( SELECT MAX(A.Precio) FROM ARTICULOS A WHERE A.Fabricante = F.Codigo )

1.17. A˜nadir un nuevo producto: Altavoces de 70 ¤ (del fabricante 2)

INSERT INTO ARTICULOS( Nombre , Precio , Fabricante) VALUES ( ’Altavoces’ , 70 , 2 )

1.18. Cambiar el nombre del producto 8 a ’Impresora Laser’

UPDATE ARTICULOS SET Nombre = ’Impresora Laser’ WHERE Codigo = 8

1.19. Aplicar un descuento del 10 % (multiplicar el precio por 0’9) a todos los productos.

UPDATE ARTICULOS SET Precio = Precio * 0.

4 Ejercicios de Bases de Datos

Empleados

EMPLEADOS PK DNI varchar(8)

Nombre nvarchar(100) Apellidos nvarchar(255) FK1 Departamento int

DEPARTAMENTOS PK Codigo int

Nombre nvarchar(100) Presupuesto int

2.1. Obtener los apellidos de los empleados.

SELECT Apellidos FROM EMPLEADOS

2.2. Obtener los apellidos de los empleados sin repeticiones.

SELECT DISTINCT Apellidos FROM EMPLEADOS

2.3. Obtener todos los datos de los empleados que se apellidan ’L´opez’.

SELECT * FROM EMPLEADOS WHERE Apellidos = ’L´opez’

2.4. Obtener todos los datos de los empleados que se apellidan ’L´opez’ y los que se apellidan ’P´erez’.

2 Empleados

2.11. Obtener un listado completo de empleados, incluyendo el nombre y apellidos del empleado junto al nombre y presupuesto de su departamento.

/* Sin etiquetas */ SELECT EMPLEADOS.Nombre, Apellidos, DEPARTAMENTOS.Nombre, Presupuesto FROM EMPLEADOS INNER JOIN DEPARTAMENTOS ON EMPLEADOS.Departamento = DEPARTAMENTOS.Codigo

/* Con etiquetas */ SELECT E.Nombre, Apellidos, D.Nombre, Presupuesto FROM EMPLEADOS E INNER JOIN DEPARTAMENTOS D ON E.Departamento = D.Codigo

2.12. Obtener los nombres y apellidos de los empleados que trabajen en departamentos cuyo presupuesto sea mayor de 60.000 ¤.

/* Sin subconsulta */ SELECT EMPLEADOS.Nombre, Apellidos FROM EMPLEADOS INNER JOIN DEPARTAMENTOS ON EMPLEADOS.Departamento = DEPARTAMENTOS.Codigo AND DEPARTAMENTOS.Presupuesto > 60000

/* Con subconsulta */ SELECT Nombre, Apellidos FROM EMPLEADOS WHERE Departamento IN (SELECT Codigo FROM DEPARTAMENTOS WHERE Presupuesto > 60000)

2.13. Obtener los datos de los departamentos cuyo presupuesto es superior al presupues- to medio de todos los departamentos.

SELECT * FROM DEPARTAMENTOS WHERE Presupuesto > ( SELECT AVG(Presupuesto) FROM DEPARTAMENTOS )

2.14. Obtener los nombres (´unicamente los nombres) de los departamentos que tienen m´as de dos empleados.

Ejercicios de Bases de Datos 9

2 Empleados

/* Con subconsulta / SELECT Nombre FROM DEPARTAMENTOS WHERE Codigo IN ( SELECT Departamento FROM EMPLEADOS GROUP BY Departamento HAVING COUNT() > 2 )

/* Con UNION. No funciona si dos departamentos tienen el mismo nombre / SELECT DEPARTAMENTOS.Nombre FROM EMPLEADOS INNER JOIN DEPARTAMENTOS ON Departamento = Codigo GROUP BY DEPARTAMENTOS.Nombre HAVING COUNT() > 2

2.15. A˜nadir un nuevo departamento: ‘Calidad’, con presupuesto de 40.000 ¤ y c´odigo

  1. A˜nadir un empleado vinculado al departamento reci´en creado: Esther V´azquez, DNI: 89267109

INSERT INTO DEPARTAMENTOS VALUES ( 11 , ’Calidad’ , 40000)

INSERT INTO EMPLEADOS VALUES ( ’89267109’ , ’Esther’ , ’V´azquez’ , 11)

2.16. Aplicar un recorte presupuestario del 10 % a todos los departamentos.

UPDATE DEPARTAMENTOS SET Presupuesto = Presupuesto * 0.

2.17. Reasignar a los empleados del departamento de investigaci´on (c´odigo 77) al depar- tamento de inform´atica (c´odigo 14).

UPDATE EMPLEADOS SET Departamento = 14 WHERE Departamento = 77

2.18. Despedir a todos los empleados que trabajan para el departamento de inform´atica (c´odigo 14).

DELETE FROM EMPLEADOS WHERE Departamento = 14

2.19. Despedir a todos los empleados que trabajen para departamentos cuyo presupuesto sea superior a los 60.000 ¤.

10 Ejercicios de Bases de Datos

Los Almacenes

ALMACENES PK Codigo int identity

Lugar nvarchar(100) Capacidad int

CAJAS PK NumReferencia char(5)

Contenido nvarchar(100) Valor int FK1 Almacen int

3.1. Obtener todos los almacenes

SELECT * FROM ALMACENES

3.2. Obtener todas las cajas cuyo contenido tenga un valor superior a 150 ¤.

SELECT * FROM CAJAS WHERE Valor > 150

3.3. Obtener los tipos de contenidos de las cajas.

SELECT DISTINCT Contenido FROM CAJAS

3.4. Obtener el valor medio de todas las cajas.

SELECT AVG(Valor) FROM CAJAS

3.5. Obtener el valor medio de las cajas de cada almacen.

SELECT Almacen, AVG(Valor) FROM CAJAS GROUP BY Almacen

8. Los Grandes Almacenes

/* Sin subconsultas */ SELECT NumReferencia FROM ALMACENES LEFT JOIN CAJAS ON ALMACENES.Codigo = CAJAS.Almacen WHERE Lugar = ’Bilbao’

/* Con subconsultas */ SELECT NumReferencia FROM CAJAS WHERE Almacen IN ( SELECT Codigo FROM ALMACENES WHERE Lugar = ’Bilbao’ )

3.11. Insertar un nuevo almac´en en Barcelona con capacidad para 3 cajas.

INSERT INTO ALMACENES(Lugar,Capacidad) VALUES(’Barcelona’,3)

3.12. Insertar una nueva caja, con n´umero de referencia ‘H5RT’, con contenido ‘Papel’, valor 200, y situada en el almac´en 2.

INSERT INTO CAJAS VALUES(’H5RT’,’Papel’,200,2)

3.13. Rebajar el valor de todas las cajas un 15 %.

UPDATE CAJAS SET Valor = Valor * 0.

3.14. Rebajar un 20 % el valor de todas las cajas cuyo valor sea superior al valor medio de todas las cajas.

UPDATE CAJAS SET Valor = Valor * 0. WHERE Valor > (SELECT AVG(Valor) FROM CAJAS)

3.15. Eliminar todas las cajas cuyo valor sea inferior a 100 ¤.

DELETE FROM CAJAS WHERE Valor < 100

3.16. Vaciar el contenido de los almacenes que est´an saturados.

Ejercicios de Bases de Datos 15

3 Los Almacenes

DELETE FROM CAJAS WHERE Almacen IN ( SELECT Codigo FROM ALMACENES WHERE Capacidad < ( SELECT COUNT(*) FROM CAJAS WHERE Almacen = Codigo ) )

16 Ejercicios de Bases de Datos