IF DB_ID('Empresa') is not null
BEGIN
USE MASTER DROP DATABASE Empresa
end;
CREATE DATABASE Empresa
GO
USE Empresa
IF OBJECT_ID('Fabricante') is not null
DROP TABLE Fabricante;
Create table Fabricante(
IdF Int not null,
Nombre varchar(25),
CONSTRAINT IdF PRIMARY KEY(IdF)
);
go
IF OBJECT_ID('Productos') is not null
DROP TABLE Productos;
GO
Create table Productos(
IdP Int not null,
Nombre varchar(50),
Precio money,
IdFabricante INT FOREIGN KEY REFERENCES Fabricante(IdF),
CONSTRAINT IdProductos PRIMARY KEY(IdP),
);
Go
INSERT INTO Fabricante VALUES(1,'Asus');
INSERT INTO Fabricante VALUES(2,'Lenovo');
INSERT INTO Fabricante VALUES(3,'Hewlwtte-packard');
INSERT INTO Fabricante VALUES(4,'Samsung');
INSERT INTO Fabricante VALUES(5,'Seagate');
INSERT INTO Fabricante VALUES(6,'Crucial');
INSERT INTO Fabricante VALUES(7,'Gigabyte');
INSERT INTO Fabricante VALUES(8,'Huawei');
INSERT INTO Fabricante VALUES(9,'Xiaomi');
go
INSERT INTO Productos VALUES(1,'Disco duro SATA 1TB','86.99','5');
INSERT INTO Productos VALUES(2,'MEMORIA RAM DDR4 8GB','120','6');
INSERT INTO Productos VALUES(3,'DISCO SSD 1TB','150.99','4');
INSERT INTO Productos VALUES(4,'GEFORCE 1050Ti','185','7');
INSERT INTO Productos VALUES(5,'GEFORCE GTX 1080 Xtreme','755','6');
INSERT INTO Productos VALUES(6,'Monitor 24 LED FULL HD','202','1');
INSERT INTO Productos VALUES(7,'Monitor 27 LED FULL HAD','245.99','1');
INSERT INTO Productos VALUES(8,'Portatil YOGA 520','559','2');
INSERT INTO Productos VALUES(9,'Portatil IDEAPD 320','444','2');
INSERT INTO Productos VALUES(10,'IMPRESORA HD DESKJET 3720','59.99','3');
INSERT INTO Productos VALUES(11,'IMPRESORA HD LASERJETPROM2','180','3');
GO
--Llave foranea
SELECT * FROM Productos INNER JOIN Fabricante
ON Productos.IDFabricante = Fabricante.IDF
GO
--trigger
CREATE TRIGGER BorrarFabricante
ON Fabricante
FOR DELETE
AS
DELETE FROM Fabricante FROM Productos, deleted
WHERE Fabricante.IDF = deleted.IDF
SELECT * FROM deleted
GO
Delete From Fabricante Where IDF=8;
GO
-- 1.lista el nombre de todos los productos que hay en la tabla producto.
select Nombre
from Productos
-- 2. lista los nombres y los precios de todos los productos de la tabla producto
select Nombre,Precio
from Productos
-- 3.lista todas las colunas de la tabla producto
select*
from Productos
-- 4. Lista el nombre de los productos, el precio en euros y el precio en dólares
estadounidenses(USD).
SELECT Nombre,Precio, (precio/22.09) AS EURO, (precio/19.54) AS DOLLAR
FROM Productos
-- 5. Lista el nombre de los productos, el precio en euros y el precio en dólares estadounidenses
(USD). Utiliza los siguientes alias para las columnas:
-- nombre de producto, euros, dólares.
select nombre as nombre_de_producto, (precio*0.042) as euros, (precio*0.050) as dólares
from Productos
-- 6.Lista los nombres y los precios de todos los productos de la tabla producto, convirtiendo los
nombres a mayúscula.
SELECT UPPER (nombre), precio
FROM productos
-- 7.Lista los nombres y los precios de todos los productos de la tabla producto, convirtiendo los
nombres a minúscula.
SELECT LOWER (nombre), precio
FROM productos
-- 8. Lista el nombre de todos los fabricantes en una columna, y en otra columna obtenga en
mayúsculas los dos primeros caracteres del nombre del fabricante.
select Nombre, UPPER(LEFT (Nombre,2)) As '2 caracteres'
from Fabricante
-- 9.Lista los nombres y los precios de todos los productos de la tabla producto, redondeando el
valor del precio.
SELECT nombre,ROUND(precio,0) As PrecioRedondo
FROM Productos
-- 10. Lista los nombres y los precios de todos los productos de la tabla producto, truncando el
valor del precio para mostrarlo sin ninguna cifra decimal.
select nombre, floor(precio) As Precio_Redondo
from Productos
-- 11. Lista el identificador de los fabricantes que tienen productos en la tabla producto.
select (IDFabricante) as identificador_fabricante
from Productos
-- 12. Lista el identificador de los fabricantes que tienen productos en la tabla producto,
eliminando los identificadores que aparecen repetidos
select DISTINCT IDFabricante
from Productos
-- 13. Lista los nombres de los fabricantes ordenados de forma ascendente.
select nombre
from Fabricante
ORDER BY Nombre ASC
-- 14. Lista los nombres de los fabricantes ordenados de forma descendente.
select Nombre
from Fabricante
ORDER BY Nombre DESC
-- 15. Lista los nombres de los productos ordenados en primer lugar por el nombre de forma
ascendente y en segundo lugar por el precio de forma descendente.
select nombre,precio
from Productos
order by nombre ASC, precio desc;
-- 16. Devuelve una lista con las 5 primeras filas de la tabla fabricante.
SELECT TOP 5 *
FROM fabricante
-- 17. Devuelve una lista con 2 filas a partir de la cuarta fila de la tabla fabricante. La cuarta fila
también se debe incluir en la respuesta.
Select *
from fabricante where IdF between 4 and 5
-- 18. Lista el nombre y el precio del producto más barato. (Utilice solamente las cláusulas
ORDER BY y LIMIT).
select top 1 nombre, precio
from Productos order by precio asc
--19. Lista el nombre y el precio del producto más caro. (Utilice solamente las cláusulas ORDER
BY y LIMIT)
select top 1 nombre, precio
from Productos order by precio desc
--20. Lista el nombre de todos los productos del fabricante cuyo código de fabricante es igual a
2.
select nombre,IDFabricante
from productos
where IDFabricante = 2
--21. Lista el nombre de los productos que tienen un precio menor o igual a 120€.
select nombre, precio
from Productos
where precio <= 120
-- 22. Lista el nombre de los productos que tienen un precio mayor o igual a 400€.
select nombre, precio
from Productos
where precio >= 400
--23. Lista el nombre de los productos que no tienen un precio mayor o igual a 400€.
select nombre, precio
from productos
where not precio >= 400
--24. Lista todos los productos que tengan un precio entre 80€ y 300€. Sin utilizarel operador
BETWEEN.
select nombre, precio
from productos
where precio >60 and precio <300
--25. Lista todos los productos que tengan un precio entre 60€ y 200€. Utilizando el operador
BETWEEN.
select nombre, precio
from Productos where
precio between 60 and 200
--26. Lista todos los productos que tengan un precio mayor que 200€ y que el códigode
fabricante sea igual a 6.
select *
from productos
where precio > 200 and IDFabricante = 6
--27. Lista todos los productos donde el código de fabricante sea 1, 3 o 5. Sin utilizar el
operador IN.
select *
from Productos
where IDFabricante = 1 or IDFabricante = 3 or IDFabricante = 5
--28. Lista todos los productos donde el código de fabricante sea 1, 3 o 5. Utilizando el
operador IN.
select *
from Productos
where IDFabricante in (1,3,5)
--29. Lista el nombre y el precio de los productos en en céntimos (Habrá que multiplicar por
100 el valor del precio). Cree un alias para la columna que
-- contiene el precio que se llame céntimos.
select nombre, precio, (precio * 100) as centimos
from Productos
--30. Lista los nombres de los fabricantes cuyo nombre empiece por la letra S.
select nombre
from fabricante
where nombre like 'S%'
--31. Lista los nombres de los fabricantes cuyo nombre termine por la vocal e.
select nombre from fabricante
where nombre like '%e'
--32. Lista los nombres de los fabricantes cuyo nombre contenga el carácter w.
select nombre from fabricante
where nombre like '%w%'
--33 Lista los nombres de los fabricantes cuyo nombre sea de 4 caracteres
SELECT IDF, Nombre
FROM Fabricante
WHERE Nombre LIKE '____'
GO
--34. Devuelve una lista con el nombre de todos los productos que contienen la cadena Portátil
en el nombre.
select nombre
from Productos where nombre like 'Portátil%'
--35 Devuelve una lista con los nombres de todos los productos que contengan la cadena
Monitor en el nombre y tienen un precio inferior a 215€.
SELECT Nombre, Precio FROM Productos
WHERE Nombre LIKE '%Monitor%' AND Precio <= 215
GO
--36 Lista el nombre y el precio de todos los productos que tengan un precio mayor o igual a
180€. Ordene el resultado en primer lugar por el precio (en orden
--descendente) y en segundo lugar por el nombre (en orden ascendente).
SELECT Nombre, Precio FROM Productos
WHERE Precio >= 180
ORDER BY Precio DESC, Nombre ASC
GO
-- 1.1.4 Consultas multitabla (Composición interna)
-- 1. Devuelve una lista con el nombre del producto, precio y nombre de fabricante de todos los
productos de la base de datos.
SELECT Productos.Nombre, Precio, Fabricante.Nombre FROM Productos INNER JOIN
Fabricante
ON Productos.IDFabricante = Fabricante.IDF
WHERE IDFabricante = IDF
GO
--2 Devuelve una lista con el nombre del producto, precio y nombre de fabricante de todos los
productos de la base de datos. Ordene el resultado por el
--nombre del fabricante en orden alfabético.
SELECT Productos.Nombre, Precio, Fabricante.Nombre FROM Productos INNER JOIN
Fabricante
ON Productos.IDFabricante = Fabricante.IDF
WHERE IDFabricante = IDF
ORDER BY Fabricante.Nombre ASC
GO
--3 . Devuelve una lista con el identificador del producto, nombre del producto, identificador
del fabricante y nombre del fabricante de todos los productos de la base de datos.
SELECT IdP, Productos.Nombre, IdF, Fabricante.Nombre FROM Productos INNER JOIN
Fabricante
ON Productos.IDFabricante = Fabricante.IDF
WHERE IdFabricante = IdF
GO
--4 Devuelve el nombre del producto, su precio y el nombre de su fabricante, del producto más
barato.
SELECT Productos.Nombre, Precio, Fabricante.Nombre FROM Productos INNER JOIN
Fabricante
ON Productos.IDFabricante = Fabricante.IDF
WHERE IDFabricante = IDF
ORDER BY Precio ASC
OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY;
GO
--5 Devuelve el nombre del producto, su precio y el nombre de su fabricante, del producto más
caro.
SELECT Productos.Nombre, Precio, Fabricante.Nombre FROM Productos INNER JOIN
Fabricante
ON Productos.IDFabricante = Fabricante.IDF
WHERE IDFabricante = IDF
ORDER BY Precio DESC
OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY;
GO
--6 Devuelve una lista de todos los productos del fabricante Lenovo.
SELECT IdP, Productos.Nombre, Precio, IdFabricante, Fabricante.Nombre FROM Productos
INNER JOIN Fabricante
ON Productos.IdFabricante = Fabricante.IdF
WHERE IdFabricante = IDF AND Fabricante.Nombre = 'Lenovo'
GO
--7 Devuelve una lista de todos los productos del fabricante Crucial que tengan un precio mayor
que 200€
SELECT IDP, Productos.Nombre, Precio, IDFabricante, Fabricante.Nombre FROM Productos
INNER JOIN Fabricante
ON Productos.IDFabricante = Fabricante.IDF
WHERE Fabricante.Nombre = 'Crucial' AND Precio >= 200
GO
--8 Devuelve un listado con todos los productos de los fabricantes Asus, Hewlett-Packard y
Seagate. Sin utilizar el operador IN.
SELECT * FROM Productos INNER JOIN Fabricante
ON Productos.IdFabricante = Fabricante.IDF
WHERE Fabricante.Nombre = 'Asus' OR Fabricante.Nombre = 'Hewlett Packard' OR
Fabricante.Nombre = 'SEAGATE'
GO
--9 Devuelve un listado con todos los productos de los fabricantes Asus, Hewlett-Packard y
Seagate. Utilizando el operador IN.
SELECT * FROM Productos INNER JOIN Fabricante
ON Productos.IdFabricante = Fabricante.IDF
WHERE Fabricante.Nombre IN ('Asus','Hewlett Packard','SEAGATE')
GO
--10 Devuelve un listado con el nombre y el precio de todos los productos de los fabricantes
cuyo nombre termine por la vocal 'e'.
SELECT Productos.Nombre, Precio FROM Productos INNER JOIN Fabricante
ON Productos.IdFabricante = Fabricante.IDF
WHERE Productos.Nombre LIKE '%E'
GO
--11 Devuelve un listado con el nombre y el precio de todos los productos cuyo nombre de
fabricante contenga el carácter 'w' en su nombre.
SELECT Productos.Nombre, Precio, Fabricante.Nombre
FROM Productos INNER JOIN
Fabricante
ON Productos.IDFabricante = Fabricante.IDF
WHERE Fabricante.Nombre LIKE '%W%'
GO
--12 Devuelve un listado con el nombre de producto, precio y nombre de fabricante, de todos
los productos que tengan un precio mayor o igual a 180€.
--Ordene el resultado en primer lugar por el precio (en orden descendente) y en segundo lugar
por el nombre (en orden ascendente).
SELECT Productos.Nombre, Precio, Fabricante.Nombre FROM Productos INNER JOIN
Fabricante
ON Productos.IdFabricante = Fabricante.IDF
WHERE Precio >= 180
ORDER BY Precio DESC, Productos.Nombre ASC
GO
--13 Devuelve un listado con el identificador y el nombre de fabricante, solamente de aquellos
fabricantes que tienen productos asociados en la base de datos.
SELECT IDF, Fabricante.Nombre FROM Fabricante INNER JOIN Productos
ON IDF = Productos.IDFabricante
GO
if OBJECT_ID('NuevoFa') IS NOT NULL
BEGIN
DROP PROCEDURE DBD.NUEVOFa
END
Go
CREATE PROCEDURE NuevoFa (
@IdFABRICANTE CHAR (4), @NOMBRE VARCHAR (100)
AS
BEGIN TRANSACTION TFABRICANTE
DECLARE @IdFABRICANTEM VARCHAR (4)
SELECT @IDFABRICANTE=@IdFABRICANTE FROM Fabricante WHERE Nombre=
@IdFABRICANTE
INSERT INTO Fabricante
VALUES (@IdFABRICANTE, @NOMBRE)
IF @@ERROR=0
BEGIN
PRINT 'FABRICANTE REGISTRADO CON EXITO'
COMMIT TRAN FABRICANTE
END
ELSE
BEGIN
PRINT 'OCURRIO UN ERROR AL INSERTAR'
ROLLBACK TRAN FABRICANTE
END
GO
EXEC NUEVOFA 10,'ZTE'
Go
Select * From Fabricante