0% encontró este documento útil (0 votos)
24 vistas12 páginas

Consultas SQL para Base de Datos Tienda

Este documento presenta el laboratorio 1 de SQL. Contiene la creación de una base de datos llamada "tienda" con tablas de "fabricante" y "producto", así como consultas SQL sobre dichas tablas para listar, filtrar y ordenar los datos.

Cargado por

fredy rodríguez
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
24 vistas12 páginas

Consultas SQL para Base de Datos Tienda

Este documento presenta el laboratorio 1 de SQL. Contiene la creación de una base de datos llamada "tienda" con tablas de "fabricante" y "producto", así como consultas SQL sobre dichas tablas para listar, filtrar y ordenar los datos.

Cargado por

fredy rodríguez
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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])

También podría gustarte