-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SQL queries design checklist (8*day) #2
Labels
documentation
Improvements or additions to documentation
help wanted
Extra attention is needed
question
Further information is requested
Comments
plopezgit
added
documentation
Improvements or additions to documentation
help wanted
Extra attention is needed
question
Further information is requested
labels
Oct 13, 2023
plopezgit
changed the title
SQL queries design checklist
SQL queries design checklist (8*day)
Oct 13, 2023
plopezgit
added a commit
that referenced
this issue
Oct 13, 2023
#2 Signed-off-by: plopezgit <p.lopez.ch.hr@hotmail.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
documentation
Improvements or additions to documentation
help wanted
Extra attention is needed
question
Further information is requested
Base de datos Tienda
Tenemos las tablas producto y fabricante, cada una con los siguientes campos:
producto (codigo, número, precio, codigo_fabricante)
fabricante (codigo, número)
El campo 'codigo_fabricante' de la entidad producto se relaciona con el campo 'código' de la entidad fabricante.
Por favor, efectúa las siguientes consultas:
Lista el nombre de todos los productos que hay en la mesa producto.
select nombre from tienda.producto;
Lista los nombres y los precios de todos los productos de la mesa producto.
select nombre, precio from tienda.producto;
Lista todas las columnas de la tabla producto.
select * from tienda.producto;
Lista el nombre de los productos, el precio en euros y el precio en dólares estadounidenses (USD).
select nombre, precio as 'Precio en Euro', precio*1.05 as 'Precio en Dolar' from tienda.producto;
Lista el nombre de los productos, el precio en euros y el precio en dólares estadounidenses (USD). Utiliza los siguientes sobrenombre para las columnas: nombre de producto, euros, dólares.
select nombre, precio as 'euro', precio*1.05 as 'dolares' from tienda.producto;
Lista los nombres y los precios de todos los productos de la mesa producto, convirtiendo los nombres a mayúscula.
select upper(nombre), precio from tienda.producto;
Lista los nombres y los precios de todos los productos de la mesa producto, convirtiendo los nombres a minúscula.
select lower(nombre), precio from tienda.producto;
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, substring(upper(nombre), 1, 2) as 'Extract of name' from tienda.fabricante;
Lista los nombres y los precios de todos los productos de la mesa producto, redondeando el valor del precio.
select nombre, format(precio, 2) from tienda.producto;
Lista los nombres y precios de todos los productos de la tabla producto, truncando el valor del precio para mostrarlo sin ninguna cifra decimal.
select nombre, format(precio, 0) from tienda.producto;
Lista el código de los fabricantes que tienen productos en la mesa producto.
select codigo_fabricante from tienda.producto;
Lista el código de los fabricantes que tienen productos en la mesa producto, eliminando los códigos que aparecen repetidos.
select distinct codigo_fabricante from tienda.producto;
Lista los nombres de los fabricantes ordenados de forma ascendente.
select nombre from tienda.fabricante order by nombre asc;
Lista los nombres de los fabricantes ordenados de forma descendente.
select nombre from tienda.fabricante order by nombre desc;
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 from tienda.producto order by nombre asc, precio desc;
Devuelve una lista con las 5 primeras filas de la mesa fabricante.
select * from tienda.fabricante limit 5;
Devuelve una lista con 2 filas a partir de la cuarta fila de la mesa fabricante. La cuarta fila también debe incluirse en la respuesta.
select * from tienda.fabricante limit 3, 2;
Lista el nombre y precio del producto más barato. (Utiliza solo las cláusulas ORDER BY y LIMIT). NOTA: Aquí no podría usar MIN(precio), necesitaría GROUP BY.
select nombre, precio from tienda.producto order by precio limit 1;
Lista el nombre y precio del producto más caro. (Utiliza solo las cláusulas ORDER BY y LIMIT). NOTA: Aquí no podría usar MAX(precio), necesitaría GROUP BY.
select nombre, precio from tienda.producto order by precio desc limit 1;
Lista el nombre de todos los productos del fabricante cuyo código de fabricante es igual a 2.
select nombre, codigo_fabricante from tienda.producto where codigo_fabricante=2;
Devuelve una lista con el nombre del producto, precio y nombre de fabricante de todos los productos de la base de datos.
select p.nombre, p.precio, f.nombre from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo;
Devuelve una lista con el nombre del producto, precio y nombre de fabricante de todos los productos de la base de datos. Ordena el resultado por el nombre del fabricante, por orden alfabético.
select p.nombre, p.precio, f.nombre from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo order by f.nombre asc;
Devuelve 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 p.nombre, p.precio, p.codigo_fabricante, f.nombre from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo;
Devuelve el nombre del producto, su precio y el nombre de su fabricante, del producto más barato.
select p.nombre, p.precio, f.nombre from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo order by precio limit 1;
Devuelve el nombre del producto, su precio y el nombre de su fabricante, del producto más caro.
select p.nombre, p.precio, f.nombre from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo order by precio desc limit 1;
Devuelve una lista de todos los productos del fabricante Lenovo.
select p.nombre from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo and f.nombre = 'lenovo';
Devuelve una lista de todos los productos del fabricante Crucial que tengan un precio mayor que 200€.
select p.nombre from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo and f.nombre = 'crucial' and p.precio >200;
Devuelve un listado con todos los productos de los fabricantes Asus, Hewlett-Packardy Seagate. Sin utilizar el operador IN.
select distinct p.* from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo or f.nombre = 'Asus' or f.nombre = 'Hewlett-Packard' or f.nombre = 'Seagate';
Devuelve un listado con todos los productos de los fabricantes Asus, Hewlett-Packardy Seagate. Utilizando el operador IN.
select * from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo and f.nombre in('Asus','Hewlett-Packard', 'Seagate');
Devuelve un listado con el nombre y el precio de todos los productos de los fabricantes cuyo nombre acabe por la vocal e.
select p.nombre, p.precio from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo and f.nombre like '%e';
Devuelve un listado con el nombre y precio de todos los productos cuyo nombre de fabricante contenga el carácter w en su nombre.
select p.nombre, p.precio from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo and f.nombre like '%w%';
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 €. Ordena el resultado, en primer lugar, por el precio (en orden descendente) y, en segundo lugar, por el nombre (en orden ascendente).
select p.nombre, p.precio, f.nombre from tienda.producto p join tienda.fabricante f where p.codigo_fabricante = f.codigo and p.precio >=180 order by p.precio desc, p.nombre;
Devuelve un listado con el código y el nombre de fabricante, sólo de aquellos fabricantes que tienen productos asociados en la base de datos.
select distinct f.codigo, f.nombre from tienda.fabricante f join tienda.producto p where f.codigo = p.codigo_fabricante;
Devuelve 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 a aquellos fabricantes que no tienen productos asociados.
select p.nombre, f.nombre from tienda.producto p left join tienda.fabricante f on p.codigo_fabricante = f.codigo union select p.nombre, f.nombre from tienda.producto p right join tienda.fabricante f on p.codigo_fabricante = f.codigo;
Devuelve un listado en el que sólo aparezcan aquellos fabricantes que no tienen ningún producto asociado.
select f.nombre from tienda.fabricante f left join tienda.producto p on f.codigo = p.codigo_fabricante where p.codigo_fabricante is null;
Devuelve todos los productos del fabricante Lenovo. (Sin utilizar INNER JOIN).
select * from tienda.producto p join tienda.fabricante f on p.codigo_fabricante = f.codigo where f.nombre like 'lenovo';
Devuelve todos los datos de los productos que tienen el mismo precio que el producto más caro del fabricante Lenovo. (Sin usar INNER JOIN).
select * from tienda.producto where precio = (select max(p.precio) from tienda.producto p join tienda.fabricante f on p.codigo_fabricante = f.codigo where f.nombre like 'lenovo');
Lista el nombre del producto más caro del fabricante Lenovo.
select nombre from tienda.producto where precio = (select max(p.precio) from tienda.producto p join tienda.fabricante f on p.codigo_fabricante = f.codigo where f.nombre like 'lenovo');
Lista el nombre del producto más barato del fabricante Hewlett-Packard.
select nombre from tienda.producto where precio = (select min(p.precio) from tienda.producto p join tienda.fabricante f on p.codigo_fabricante = f.codigo where f.nombre like 'Hewlett-Packard');
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 nombre from tienda.producto where precio >= (select max(p.precio) from tienda.producto p join tienda.fabricante f on p.codigo_fabricante = f.codigo where f.nombre like 'lenovo');
Lista todos los productos del fabricante Asus que tienen un precio superior al precio medio de todos sus productos.
select nombre from tienda.producto where precio > (select avg(p.precio) from tienda.producto p join tienda.fabricante f on p.codigo_fabricante = f.codigo where f.nombre like 'Asus');
Base de datos Universidad
Por favor, descarga la base de datos del archivo schema_universidad.sql, visualiza el diagrama E-R en un editor y efectúa las siguientes consultas:
select apellido1, apellido2, nombre from universidad.persona where tipo = 'alumno' order by apellido1, apellido2, nombre;
select nombre, apellido1, apellido2 from universidad.persona where tipo = 'alumno' and telefono is null;
select * from universidad.persona where tipo = 'alumno' and fecha_nacimiento like '1999%';
select * from universidad.persona where tipo = 'profesor' and telefono is null and nif like '%k';
select * from universidad.asignatura where cuatrimestre = 1 and curso = 3 and id_grado = 7;
select p.apellido1, p.apellido2, p.nombre, dep.nombre from universidad.persona p join universidad.profesor prof on prof.id_profesor = p.id join universidad.departamento dep on dep.id = prof.id_departamento;
select p.nombre, a.nombre, ce.anyo_inicio, ce.anyo_fin from universidad.persona p join universidad.alumno_se_matricula_asignatura asma on p.id = asma.id_alumno join universidad.asignatura a on asma.id_asignatura = a.id join universidad.curso_escolar ce on asma.id_curso_escolar = ce.id where nif = '26902806M';
select distinct d.nombre from universidad.departamento d join universidad.profesor pro on pro.id_departamento = d.id join universidad.asignatura a on a.id_profesor = pro.id_profesor join universidad.grado g on a.id_grado = g.id where g.nombre = 'Grado en Ingeniería Informática (Plan 2015)';
select distinct p.nombre from universidad.persona p join universidad.alumno_se_matricula_asignatura asma on p.id = asma.id_alumno join universidad.curso_escolar ce on asma.id_curso_escolar = ce.id where ce.anyo_inicio between '2018%' and '2019%';
Resuelve las 6 siguientes consultas utilizando las cláusulas LEFT JOIN y RIGHT JOIN.
select d.nombre, p.apellido1, p.apellido2, p.nombre from universidad.persona p left join universidad.profesor pro on p.id = pro.id_profesor left join universidad.departamento d on pro.id_departamento = d.id order by d.nombre, p.apellido1, p.apellido2, p.nombre;
select p.apellido1, p.apellido2, p.nombre from universidad.persona p left join universidad.profesor pro on p.id = pro.id_profesor left join universidad.departamento d on pro.id_departamento = d.id where d.nombre is null;
select d.* from universidad.departamento d left join universidad.profesor pro on d.id = pro.id_departamento where d.id not in (select id_departamento from universidad.profesor);
select p.* from universidad.persona p join universidad.profesor pro on p.id = pro.id_profesor left join universidad.asignatura a on pro.id_profesor = a.id_profesor where a.id_profesor is null;
select a.* from universidad.asignatura a left join universidad.profesor pro on a.id_profesor = pro.id_profesor where a.id_profesor is null;
select d.* from universidad.departamento d right join universidad.profesor pro on d.id = pro.id_departamento right join universidad.asignatura a on pro.id_profesor = a.id_profesor where a.curso is null;
select distinct d.* from universidad.departamento d left join universidad.profesor pro on d.id = pro.id_departamento left join universidad.asignatura a on pro.id_profesor = a.id_profesor where a.curso is null;
Consultas resumen:
select count(id) as 'Total alumnos' from universidad.persona where tipo = 'alumno';
select count(id) as 'Total nacidos en 1999' from universidad.persona where fecha_nacimiento like '1999%';
select d.nombre, count(p.id) as Total_profesores from universidad.persona p join universidad.profesor pro on p.id = pro.id_profesor join universidad.departamento d on pro.id_departamento = d.id group by d.nombre order by Total_profesores desc;
select d.nombre, count(p.id) as Total_profesores from universidad.persona p right join universidad.profesor pro on p.id = pro.id_profesor right join universidad.departamento d on pro.id_departamento = d.id group by d.nombre order by Total_profesores desc;
select g.nombre, count(a.id) as Total_asignaturas from universidad.grado g left join universidad.asignatura a on g.id = a.id_grado group by g.nombre order by Total_asignaturas desc;
select g.nombre, count(a.id) as Total_asignaturas from universidad.grado g left join universidad.asignatura a on g.id = a.id_grado group by g.nombre having Total_asignaturas >40;
select g.nombre, a.tipo, sum(a.creditos) as Total_creditos from universidad.grado g join universidad.asignatura a on g.id = a.id_grado group by a.tipo, g.nombre;
select ce.anyo_inicio, count(asma.id_alumno) as Total_alumnos_matriculados from universidad.alumno_se_matricula_asignatura asma right join universidad.curso_escolar ce on asma.id_curso_escolar = ce.id group by ce.anyo_inicio;
select p.id, p.nombre, p.apellido1, p.apellido2, count(a.id) as Total_asignaturas from universidad.persona p join universidad.profesor pro on p.id = pro.id_profesor join universidad.asignatura a on pro.id_profesor = a.id_profesor group by p.id, p.nombre, p.apellido1, p.apellido2 order by Total_asignaturas desc;
select * from universidad.persona where fecha_nacimiento = (select max(fecha_nacimiento) from universidad.persona);
select p.id, p.nombre from universidad.persona p left join universidad.profesor pro on p.id = pro.id_profesor left join universidad.asignatura a on pro.id_profesor = a.id_profesor where pro.id_departamento is not null and a.id_profesor is null;
The text was updated successfully, but these errors were encountered: