Está en la página 1de 8

Control Semana 6

Subconsultas en SQL

JORGE DONOSO S

Fundamentos de Base de Datos

Instituto IACC

11-05-2018
INSTRUCCIONES

Fase I: Se tienen las siguientes tablas que registran para una librería los datos de los libros, así
como los datos de la editorial y autor.
CODIGO_AUTOR CODIGO_LIBRO NOMBRE CODIGO_EDITORIAL PRECIO PORC_DESCUENTO
0001 0001 SOLUCIONES DE PROGRAMACION 0001 45.200,16 10
0001 0002 GUIA COMPLETA DE PROGRAMACION EN JAVA 0001 33.520,52 5
0001 0003 INTRODUCCION A LA INFORMATICA 0002 51.000,33 0
0001 0004 HARDWARE Y SOFTWARE 0001 26.700,25 25
0002 0005 INTRODUCCION A LOS ALGORITMOS 0003 36.000,87 30
0002 0006 INTRODUCCION A LAS BASES DE DATOS 0004 52.100,17 40
0003 0007 FUNDAMENTOS DE PROGRAMACION 0001 46.500,29 15
0003 0008 ¿COMO PROGRAMAR EN JAVA? 0002 48.000,33 10
0004 0009 ADMINISTRACION DE BASES DE DATOS 0005 36.500,41 20
0005 0010 ESTRUCTURAS DE DATOS 0002 29.200,27 5
0005 0011 BASES DE DATOS 0003 32.000,39 0
0006 0012 INTRODUCCION A .NET 0001 46.500,14 10

CODIGO_EDITORIAL NOMBRE
0001 BONUM
0002 SIRIO
0003 BIBLIOGRAFICA
0004 GRUPO EDITORIAL RONDA
0005 MCGRAW-HILL

CODIGO_AUTOR NOMBRE
0001 LUIS JOYANES
0002 CATERINA VELASQUEZ
0003 CARMEN GIL
0004 ALVARO GOMEZ
0005 LUIS ANGULO
0006 ANA MARIA VILLAR

Según los datos anteriormente mostrados, entregue las siguientes consultas, incluyendo las
subconsultas en la cláusula que considere adecuada:
1.- Liste el código del autor, nombre y la cantidad de libros que tiene en el registro de
la librería.

RESPUESTA:

SELECT A.CODIGO_AUTOR,
A.NOMBRE AS NOMBRE_AUTOR,
(SELECT COUNT(B.NOMBRE) FROM tb_libros B WHERE A.CODIGO_AUTOR =
B.CODIGO_AUTOR) AS CANTIDAD_LIBROS FROM tb_autor A;

2.- Liste el código de la editorial, nombre y la cantidad de libros que tiene en el


registro de la librería.
RESPUESTA:

SELECT A.CODIGO_EDITORIAL,
A.NOMBRE AS NOMBRE_AUTOR,
(SELECT COUNT(B.NOMBRE) FROM tb_libros B WHERE A.CODIGO_EDITORIAL
= B.CODIGO_EDITORIAL) AS CANTIDAD_LIBROS FROM tb_editorial A;
3.- Liste el código de autor, código de libro, nombre, código de editorial y precio, de
aquellos libros que tengan un porcentaje de descuento igual o mayor al 15%.

RESPUESTA:

SELECT A.CODIGO_AUTOR,
A.CODIGO_LIBRO,
A.NOMBRE,
A.CODIGO_EDITORIAL,
A.PRECIO,
FROM tb_libros A WHERE PORC_DESCUENTO >= 15;

4.-Liste el código de autor, código de libro, nombre, código de editorial y precio, de


aquellos libros que tengan un porcentaje de descuento menor al 20%

RESPUESTA:

SELECT A.CODIGO_AUTOR,
A.CODIGO_LIBRO,
A.NOMBRE,
A.CODIGO_EDITORIAL,
A.PRECIO,
FROM tb_libros A WHERE PORC_DESCUENTO < 20;
5.-Liste el código de autor, y la suma de los precios de los libros que le pertenecen.

RESPUESTA:

SELECT A.CODIGO_AUTOR,
(SELECT SUM(B.PRECIO)
FROM tb_libros B WHERE A.CODIGO_AUTOR = B.CODIGO_AUTOR) AS
SUMA_PRECIO_POR_AUTOR FROM tb_autor A;

6.-Liste el código de autor, y la suma de los precios de los libros que le pertenecen, mostrando
sólo aquellos donde la suma de sus precios sea menor a 40.000 pesos.

RESPUESTA:

SELECT A.CODIGO_AUTOR,
(SELECT SUM(B.PRECIO)
FROM tb_libros B WHERE A.CODIGO_AUTOR = B.CODIGO_AUTOR) AS
SUMA_PRECIO_POR_AUTOR FROM tb_autor A WHERE (SELECT SUM(B.PRECIO) FROM
tb_libros B WHERE A.CODIGO_AUTOR = B.CODIGO_AUTOR) < 40000;
Fase II: Lea determinadamente y fundamente su respuesta:

1.- Suponga que un Instituto Profesional tiene en su base de datos una tabla de
ESTUDIANTES (con los datos de estos), una de ASIGNATURAS_ESTUDIANTES (con los datos de
las asignaturas tomadas por cada estudiante y la calificación obtenida). De acuerdo a
este esquema, ¿cree usted que sea útil el SELECT con múltiples tablas?, ¿para qué caso
lo utilizaría? Fundamente su respuesta.

RESPUESTA:

La consulta “SELECT” con múltiples tablas, según el material entregado durante este
periodo de aprendizaje, sirve para el caso planteado en la pregunta, pues podríamos
unir las tablas usando “INNER JOIN”, nos entregaría todos los datos que coinciden en las
tablas propuestas, deben tener claves primarias relacionadas; los datos también
podemos obtenerlos usando “LEFT JOIN o RIGHT JOIN”, estas consultas sirven para
generar informes, pues en unas sola consulta podemos saber la información de varias
tablas.

Ejemplo:

SELECT A.rut_estudiante,
A.nombre_estudiante,
B.Asignatura
(SUM(B.NOTAS)/(SELECT COUNT(B.NOTAS)
FROM ASIGNATURAS_ESTUDIANTES C
WHERE A.rut_estudiante = C.rut_estudiante)) AS PROMEDIO_NOTAS
FROM ESTUDIANTES A
INNER JOIN ASIGNATURAS_ESTUDIANTES B
ON A.rut_estudiante = B.rut_estudiante
2.- Imagínese que la biblioteca de una Universidad tiene en su base de datos una tabla de
ESTUDIANTES (con los datos de estos), una de LIBROS_ESTUDIANTES (con los datos de los libros
solicitados por cada estudiante y la fecha de cada préstamo). De acuerdo a este esquema,
¿cree usted que sea útil el SELECT con múltiples tablas?, ¿para qué caso lo utilizaría?
Fundamente su respuesta.

RESPUESTA:

Aquí también podemos unir tablas relacionadas, para mostrar los campos que necesitemos, las
tablas de estudiantes, libros y también una subconsulta que refleja la cantidad de libros que
tiene cada estudiante y una clausula “WHERE” con “BETWEEN” para reflejar las fechas de la
búsqueda.

Ejemplo:

SELECT A.RUT_ESTUDIANTE,
A.NOMBRE,
B.LIBROS,
(SELECT COUNT(C.NOMRE_LIBROS)
FROM LIBROS_ESTUDIANTES C
WHERE A.RUT_ESTUDIANTE = C.RUT_ESTUDIANTE
) AS CANTIDAD DE LIBROS
FROM ESTUDIANTES A
INNER JOIN LIBROS_ESTUDIANTES B
ON A.RUT_ESTUDIANTE = B.RUT_ESTUDIANTE
WHERE B.FECHA_PRESTAMO BETWEEN '20190331' AND '20190101'
Bibliografía

Semana 6 IACC, SQL: Lenguaje para la definición, manipulación y control de bases de datos
relacionales III
http://online.iacc.cl/pluginfile.php/4654118/mod_resource/content/2/06_Fundamentos_de_B
ases_de_Datos.pdf

MySQL 5.0 Manual, Funciones de manejo de cadenas de


caractereshttp://ftp.nchu.edu.tw/MySQL/doc/refman/5.0/es/string-functions.html

También podría gustarte