LABORATORIO 1 SQL.
FREDY GONZALO RODRIGUEZ MORENO.
FICHA: 259601
PRESENTADO A:
RODOLFO ALVAREZ.
SENA
REGIONAL SANTANDER CSET.
BUCARAMANGA 2022
CREATE DATABASE tienda;
USE tienda;
CREATE TABLE fabricante (
codigo INTEGER IDENTITY PRIMARY KEY,
nombre VARCHAR(100) NOT NULL
);
CREATE TABLE producto (
codigo INT IDENTITY PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio FLOAT NOT NULL,
codigo_fabricante INT NOT NULL,
FOREIGN KEY (codigo_fabricante) REFERENCES fabricante(codigo)
);
INSERT INTO fabricante VALUES('Asus');
INSERT INTO fabricante VALUES('Lenovo');
INSERT INTO fabricante VALUES('Hewlett-Packard');
INSERT INTO fabricante VALUES('Samsung');
INSERT INTO fabricante VALUES('Seagate');
INSERT INTO fabricante VALUES('Crucial');
INSERT INTO fabricante VALUES('Gigabyte');
INSERT INTO fabricante VALUES('Huawei');
INSERT INTO fabricante VALUES('Xiaomi');
INSERT INTO producto VALUES('Disco duro SATA3 1TB', 86.99, 5);
INSERT INTO producto VALUES('Memoria RAM DDR4 8GB', 120, 6);
INSERT INTO producto VALUES('Disco SSD 1 TB', 150.99, 4);
INSERT INTO producto VALUES('GeForce GTX 1050Ti', 185, 7);
INSERT INTO producto VALUES('GeForce GTX 1080 Xtreme', 755, 6);
INSERT INTO producto VALUES('Monitor 24 LED Full HD', 202, 1);
INSERT INTO producto VALUES('Monitor 27 LED Full HD', 245.99, 1);
INSERT INTO producto VALUES('Portátil Yoga 520', 559, 2);
INSERT INTO producto VALUES('Portátil Ideapd 320', 444, 2);
INSERT INTO producto VALUES( 'Impresora HP Deskjet 3720', 59.99, 3);
INSERT INTO producto VALUES( 'Impresora HP Laserjet Pro M26nw', 180, 3);
select*from producto
select*from fabricante
--1.1.3 Consultas sobre una tabla
--[Link] el nombre de todos los productos que hay en la tabla producto.
select nombre from producto
--[Link] los nombres y los precios de todos los productos de la tabla producto.
select nombre,precio from producto
--[Link] todas las columnas de la tabla producto.
select*from producto
--[Link] el nombre de los productos, el precio en euros y el precio en dólares
estadounidenses (USD).
select nombre,precio as euros, precio/1.06 as USD from producto
--[Link] 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 as euros, precio/1.06 as dólares
from producto
--[Link] los nombres y los precios de todos los productos de la tabla producto,
convirtiendo los nombres a mayúscula.
select upper(nombre), precio from producto
--[Link] los nombres y los precios de todos los productos de la tabla producto,
convirtiendo los nombres a minúscula.
select lower(nombre), precio from producto
--[Link] los nombres y los precios de todos los productos de la tabla producto,
redondeando el valor del precio.
select nombre,round(precio,2) from producto
--[Link] 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,round(precio,0) from producto
--[Link] el código de los fabricantes que tienen productos en la tabla
producto.
select nombre,codigo_fabricante from producto where codigo_fabricante is not
null
--[Link] el código de los fabricantes que tienen productos en la tabla
producto, eliminando los códigos que aparecen repetidos
select distinct codigo_fabricante from producto
--[Link] los nombres de los fabricantes ordenados de forma ascendente.
select nombre from fabricante order by nombre asc
--[Link] los nombres de los fabricantes ordenados de forma descendente.
select nombre from fabricante order by nombre desc
--[Link] 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 producto order by nombre asc,precio desc
--[Link] una lista con las 5 primeras filas de la tabla fabricante.
select top 5 nombre from fabricante
--[Link] el nombre y el precio del producto más barato
select nombre,precio from producto where precio=(select min(precio) from
producto)
--[Link] el nombre y el precio del producto más caro.
select nombre,precio from producto where precio=(select max(precio) from
producto)
--[Link] el nombre de todos los productos del fabricante cuyo código de
fabricante es igual a 2.
select nombre from producto where codigo_fabricante=2
--[Link] el nombre de los productos que tienen un precio menor o igual a
120€.
select nombre,precio from producto where precio<=120
--20. Lista el nombre de los productos que tienen un precio mayor o igual a
400€.
select nombre,precio from producto where precio>=400
--21. Lista el nombre de los productos que no tienen un precio mayor o igual a
400€.
select nombre,precio from producto where not precio>=400
-- 22. Lista todos los productos que tengan un precio entre 80€ y 300€. Sin
utilizar el operador BETWEEN.
select nombre,precio from producto where precio>=80 and precio<=300
--[Link] todos los productos que tengan un precio entre 60€ y 200€.
Utilizando el operador BETWEEN.
select nombre,precio from producto where precio between 80 and 300
--[Link] todos los productos que tengan un precio mayor que 200€ y que el
código de fabricante sea igual a 6.
select nombre,precio from producto where precio>200 and
codigo_fabricante=6
--[Link] todos los productos donde el código de fabricante sea 1, 3 o 5. Sin
utilizar el operador IN.
select nombre,precio from producto where codigo_fabricante=1 or
codigo_fabricante=3 or codigo_fabricante=5
--[Link] todos los productos donde el código de fabricante sea 1, 3 o 5.
Utilizando el operador IN.
select nombre,precio from producto where codigo_fabricante in (1,3,5)
--27. Lista el nombre y el precio de los productos 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 producto
--28. Lista los nombres de los fabricantes cuyo nombre empiece por la letra S.
select nombre from fabricante where nombre like 's%'
--[Link] los nombres de los fabricantes cuyo nombre termine por la vocal e.
select nombre from fabricante where nombre like '%e'
--[Link] los nombres de los fabricantes cuyo nombre contenga el carácter w.
select nombre from fabricante where nombre like '%w%'
--[Link] una lista con el nombre de todos los productos que contienen la
cadena Portátil en el nombre.
select nombre from producto where nombre like '%PORTATIL%'
--[Link] una lista con el nombre de todos los productos que contienen la
cadena Monitor en el nombre y tienen un precio inferior a 215 €.
select nombre,precio from producto where nombre like '%MONITOR%' and
precio<215
--[Link] 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 producto where precio>=180 order by precio desc,
nombre asc
--1.1.4 Consultas multitabla (Composición interna)
--[Link] una lista con el nombre del producto, precio y nombre de
fabricante de todos los productos de la base de datos.
select [Link] as fabricante ,[Link],[Link] from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link]
--[Link] 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, por orden alfabético.
select [Link] as fabricante ,[Link],[Link] from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] order by [Link] asc
--[Link] una lista con el código del producto, nombre del producto, código
del fabricante y nombre del fabricante, de todos los productos de la base de
datos.
select [Link] as cod_fabricante ,[Link],[Link] from producto as
pro
join fabricante as fa
on pro.codigo_fabricante=[Link]
--[Link] el nombre del producto, su precio y el nombre de su fabricante,
del producto más barato.
select top 1 [Link] as cod_fabricante ,[Link],[Link] from producto
as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] order by precio asc
--[Link] el nombre del producto, su precio y el nombre de su fabricante,
del producto más caro.
select top 1 [Link] as cod_fabricante ,[Link],[Link] from producto
as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] order by precio desc
--[Link] una lista de todos los productos del fabricante Lenovo.
select [Link],[Link] from producto as pro
join fabricante as fa
on [Link]=pro.codigo_fabricante where [Link]='Lenovo'
--[Link] una lista de todos los productos del fabricante Crucial que tengan
un precio mayor que 200€.
select [Link],[Link] from producto as pro
join fabricante as fa
on [Link]=pro.codigo_fabricante where [Link]='crucial' and
[Link]>200
--[Link] un listado con todos los productos de los fabricantes Asus,
Hewlett-Packardy Seagate. Sin utilizar el operador [Link]
[Link],[Link] from producto as pro
join fabricante as fa
on [Link]=pro.codigo_fabricante where [Link]='asus' or
[Link]='Hewlett-Packard' or [Link]='seagate'
--[Link] un listado con todos los productos de los fabricantes Asus,
Hewlett-Packardy Seagate. Utilizando el operador IN.
select [Link],[Link] from producto as pro
join fabricante as fa
on [Link]=pro.codigo_fabricante where [Link] e in ('asus') or
[Link]=('Hewlett-Packard') or [Link]=('seagate')
--[Link] un listado con el nombre y el precio de todos los productos de
los fabricantes cuyo nombre termine por la vocal e.
select [Link],[Link],[Link] from producto as pro
join fabricante as fa
on [Link]=pro.codigo_fabricante where [Link] like '%e'
--[Link] 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 [Link],[Link],[Link] from producto as pro
join fabricante as fa
on [Link]=pro.codigo_fabricante where [Link] like '%w%'
--[Link] 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 [Link],[Link],[Link] from producto as pro
join fabricante as fa
on [Link]=pro.codigo_fabricante where precio>=180 order by [Link]
desc,[Link] asc
--[Link] un listado con el código y el nombre de fabricante, solamente de
aquellos fabricantes que tienen productos asociados en la base de datos.
select distinct [Link],[Link] from producto as pro
join fabricante as fa
on [Link]=pro.codigo_fabricante
--1.1.5 Consultas multitabla (Composición externa)
--[Link] un listado de todos los fabricantes que existen en la base de
datos, junto con los productos que tiene cada uno de ellos.
--El listado deberá mostrar también aquellos fabricantes que no tienen
productos asociados.
select [Link],[Link] from fabricante as fa
left join producto as pro
on [Link]=pro.codigo_fabricante
--[Link] un listado donde sólo aparezcan aquellos fabricantes que no
tienen ningún producto asociado.
select [Link],[Link] from fabricante as fa
left join producto as pro
on [Link]=pro.codigo_fabricante where [Link] is null
--3.¿Pueden existir productos que no estén relacionados con un fabricante?
Justifique su respuesta.
--no pueden exitir producto porque es un campo abligatorio al momneto de
isnertar un dato
--1.1.6 Consultas resumen
--[Link] el número total de productos que hay en la tabla productos.
select count(nombre) as cantidad from producto
--[Link] el número total de fabricantes que hay en la tabla fabricante.
select count(codigo)as cantidad from fabricante
--[Link] la media del precio de todos los productos.
select avg(precio) from producto
--[Link] el precio más barato de todos los productos
select min(precio) from producto
--[Link] el precio más caro de todos los productos.
select max(precio) from producto
--[Link] el nombre y el precio del producto más barato.
select precio,nombre from producto where precio=( select min(precio)from
producto)
--[Link] el nombre y el precio del producto más caro.
select precio,nombre from producto where precio=( select max(precio)from
producto)
--[Link] la suma de los precios de todos los productos.
select sum(precio) from producto
--[Link] el número de productos que tiene el fabricante Asus.
select count([Link]) from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] where [Link]='asus'
--[Link] la media del precio de todos los productos del fabricante Asus.
select avg([Link])as media from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] where [Link]='asus'
--[Link] el precio más barato de todos los productos del fabricante Asus.
select min([Link])as barato from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] where [Link]='asus'
--[Link] el precio más caro de todos los productos del fabricante Asus.
select max([Link])as caro from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] where [Link]='asus'
--[Link] la suma de todos los productos del fabricante Asus.
select sum([Link])as suma from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] where [Link]='asus'
--14. Muestra el precio máximo, precio mínimo, precio medio y el número total
de productos que tiene el fabricante Crucial.
select max([Link])as suma,min([Link])as min,avg([Link]) as medio
,count([Link])
as cantidad
from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] where [Link]='crucial'
--[Link] el número total de productos que tiene cada uno de los
fabricantes.
--El listado también debe incluir los fabricantes que no tienen ningún producto.
--El resultado mostrará dos columnas, una con el nombre del fabricante y otra
con el número de productos que tiene.
--Ordene el resultado descendentemente por el número de productos.
select [Link],count(codigo_fabricante) as cantidad from fabricante as fa
left join producto as pro
on [Link]=pro.codigo_fabricante group by [Link] order by
count(codigo_fabricante) desc
--[Link] el precio máximo, precio mínimo y precio medio de los productos
de cada uno de los fabricantes.
--El resultado mostrará el nombre del fabricante junto con los datos que se
solicitan.
select [Link],max([Link])as maximo ,min([Link]) as minimo
,avg([Link]) as medio from fabricante as fa
left join producto as pro
on [Link]=pro.codigo_fabricante group by [Link]
--[Link] el precio máximo, precio mínimo, precio medio y el número total
de productos de los fabricantes que tienen un precio medio superior a 200€.
--No es necesario mostrar el nombre del fabricante, con el código del fabricante
es suficiente.
select [Link] as Nombre,max ([Link]) as Caro,min ([Link]) as
Barato, avg ([Link]) as Media,count ([Link]) as NumeroProductos from
producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] group by [Link] having avg ([Link])
> 200
--[Link] el nombre de cada fabricante, junto con el precio máximo, precio
mínimo, precio medio y el número total de productos de los fabricantes que
tienen un precio medio superior a 200€.
--Es necesario mostrar el nombre del fabricante.
select [Link] as Nombre,max ([Link]) as Caro,min ([Link]) as
Barato, avg ([Link]) as Media,count ([Link]) as NumeroProductos from
producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] group by [Link] having avg ([Link])
> 200
--[Link] el número de productos que tienen un precio mayor o igual a 180€.
SELECT count (codigo) as Productos from producto where precio >=180
--[Link] el número de productos que tiene cada fabricante con un precio
mayor o igual a 180€.
select [Link], count ([Link]) as Productos from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] where [Link] >= 180 group by
[Link]
--[Link] el precio medio los productos de cada fabricante, mostrando
solamente el código del fabricante.
select [Link], AVG([Link]) as Productos from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] group by [Link]
--[Link] el precio medio los productos de cada fabricante, mostrando
solamente el nomobre del fabricante
select [Link], AVG([Link]) as Productos from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] group by [Link]
--[Link] los nombres de los fabricantes cuyos productos tienen un precio
medio mayor o igual a 150€.
select [Link], avg ([Link]) as Medio from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] group by [Link] having avg ([Link])
>= 150
--[Link] un listado con los nombres de los fabricantes que tienen 2 o más
productos.
select [Link], count ([Link]) as Productos from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link] group by [Link] having count
([Link]) >=2
--25. Devuelve un listado con los nombres de los fabricantes y el número de
productos que tiene cada uno con un precio superior o igual a 220 €.
--No es necesario mostrar el nombre de los fabricantes que no tienen productos
que cumplan la condición.
select [Link], count ([Link]) as Total from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link]
where [Link] >=220
group by [Link]
order by 2 desc
--[Link] un listado con los nombres de los fabricantes y el número de
productos que tiene cada uno con un precio superior o igual a 220 €.
--El listado debe mostrar el nombre de todos los fabricantes, es decir, si hay
algún fabricante que no tiene productos con un precio superior o igual a 220€
deberá aparecer en el listado con un valor igual a 0 en el número de productos.
select [Link], count ([Link]) as Total from producto as pro
join fabricante as fa
on pro.codigo_fabricante=[Link]
where [Link] >=220
group by [Link] union
(select [Link], 0 from fabricante
WHERE [Link] NOT IN (select [Link] from fabricante join
producto on [Link] = producto.codigo_fabricante where
[Link] >= 220 group by [Link]))
order by 2 desc
--[Link] un listado con los nombres de los fabricantes donde la suma del
precio de todos sus productos es superior a 1000 €.
select [Link], sum ([Link]) suma from fabricante as fa
JOIN producto as pro
on [Link] = pro.codigo_fabricante group by [Link] having
sum([Link]) > 1000
--29. Devuelve un listado con el nombre del producto más caro que tiene cada
fabricante.
--El resultado debe tener tres columnas: nombre del producto, precio y nombre
del fabricante.
--El resultado tiene que estar ordenado alfabéticamente de menor a mayor por
el nombre del fabricante.
select [Link], [Link], [Link] from producto as pro
join fabricante as fa
on [Link] = pro.codigo_fabricante where [Link] = (select max (precio)
from producto where codigo_fabricante = [Link]) order by [Link] asc
--1.1.7 Subconsultas (En la cláusula WHERE)
--[Link] Con operadores básicos de comparación
--[Link] todos los productos del fabricante Lenovo. (Sin utilizar INNER
JOIN).
select [Link],[Link]
from producto as p,fabricante as f
where p.codigo_fabricante = [Link]
and [Link] = 'Lenovo'
select * from producto
--[Link] todos los datos de los productos que tienen el mismo precio que
el producto más caro del fabricante Lenovo. (Sin utilizar INNER JOIN).
select*from producto as p where [Link]=(select max (precio) from producto
where producto.codigo_fabricante=2)
--3 Lista el nombre del producto más caro del fabricante Lenovo.
select max ([Link]), [Link] from producto as p, fabricante as f where
p.codigo_fabricante= [Link] and [Link] = 'Lenovo'
--4 Lista el nombre del producto más barato del fabricante Hewlett-Packard.
select min ([Link]), [Link] from producto as p, fabricante as f where
p.codigo_fabricante= [Link] and [Link] = 'Hewlett-Packard'
--5 Devuelve todos los productos de la base de datos que tienen un precio
mayor o igual al producto más caro del fabricante Lenovo.
select*from producto as p where [Link]>=(select max (precio) from producto
where producto.codigo_fabricante=2)
-- 6 Lista todos los productos del fabricante Asus que tienen un precio superior
al precio medio de todos sus productos.
select* from producto as p, fabricante as f where (p.codigo_fabricante=
[Link] and [Link] = 'asus') having [Link]>avg ([Link])