Sei sulla pagina 1di 8

Subconsultas en SQL

María Ignacia Lastra Tapia

Fundamentos de base de datos

Instituto IACC

4 de Mayo 2019
Introducción:

El lenguaje de SQL nos permite realizar consultas en bases de datos y obtener respuestas con

datos más específicos o con más condiciones a través de las subconsultas sentenciadas por una

segunda sentencia SELECT dentro de otra sentencia SELECT que sería la principal.

A continuación se desarrollarán dos fases de ejercicios, creando consultas y subconsultas en SQL

mediante las tablas y datos otorgados, listando diferentes registros específicos.

Desarrollo:

Fase l: Según las tablas entregadas con los datos de los libros, datos de autor y datos de editorial,

se entregarán las siguientes consultas y subconsultas según la cláusula adecuada:

- Tabla Libros:

Cod_autor Cod_libro Nombre Cod_editorial Precio Porc_descto


0001 0001 Soluciones de 0001 42.000,16 10
Programación
0001 0002 Guía completa de 0001 33.520,52 5
programación en
Java
0001 0003 Introducción a la 0002 51.000,33 0
informática
0001 0004 Hardware y Software 0001 26.700,25 25
0002 0005 Introducción a los 0003 36.000,87 30
algoritmos
0002 0006 Introducción a la 0004 52.100,17 40
base de datos
0003 0007 Fudamentos de 0001 46.500,29 15
Programación
0003 0008 ¿Cómo programar en 0002 48.000,33 10
Java?
0004 0009 Administración de 0005 36.500,41 20
base de datos
0005 0010 Estructura de datos 0002 29.200,27 5
0005 0011 Base de datos 0003 32.000,39 0
0006 0012 Introducción a .NET 0001 46.500,14 10

- Tabla Editorial:

Cod_editorial Nombre
0001 Bonum
0002 Sirio
0003 Bibliográfica
0004 Grupo Editorial Ronda
0005 McGraw-Hill

- Tabla Autor:

Cod_autor Nombre
0001 Luis Joyanes
0002 Caterina Velasquez
0003 Carmen Gil
0004 Alvaro Gómez
0005 Luis Angulo
0006 Ana María Villar

1.- Listar código de autor, nombre y cantidad de libros registrados en la librería:

SELECT Cod_autor, Nombre, (SELECT COUNT (Cod_libro) FROM Libros

WHERE Autor.Cod_autor = Libros.Cod_autor) FROM Autor;


Con esta subconsulta se mostrará la columna Cod_Autor y Nombre del autor de la Tabla

correspondiente a Autor, y se mostrará la cantidad de libros del autor procedente desde la tabla

Libros.

2.- Listar el código de la editorial, nombre y cantidad de libros:

SELECT Cod_editorial, Nombre, (SELECT COUNT (Cod_Libro) FROM Libros

WHERE Autor.Cod_Autor = Libros.Cod_Autor) FROM Editorial;

Con esta consulta se mostrará la columna Cod_editoral y Nombre de la editorial desde la Tabla

Editorial y la columna Cantidad de libros del autor que provienen de la tabla Libros.

3.- Listar código de autor, código de libro, nombre, código de editorial y precio, de los libros que

tengan porcentaje de descuento igual o mayor al 15%:

SELECT Cod_autor, Cod_libro, Nombre, Cod_editorial, Precio FROM Libros

WHERE Porc_descto >=15;

Esta consulta mostrará todas las columnas de la tabla Libros, que pertenecen al 15% o más de

descuento.

4.- Listar el código de autor, código de libro, código de editorial y precio de libros con porcentaje

de descuento menor a 20%:

SELECT Cod_autor, Cod_editorial, Cod_libro, Nombre, Precio, FROM Libros

WHERE Porc_descto <20;

De este modo, se mostrará las columnas de la tabla Libros que pertenecen a los descuentos

menores al 20%.
5.- Listar código de autor y la suma de los precios a los que pertenecen:

SELECT Libros.Cod_autor, SUM(Precios) FROM Libros GROUP BY Nombre;

Se mostrará la tabla Libros con la suma de los libros por cada autor.

6.- Listar código de autor, y la suma de los precios de los libros que pertenecen, mostrando sólo

la suma que sea menor a $40.000:

SELECT Libros.Cod_autor, SUM(Precios) FROM Libros GROUP BY Nombre

HAVING (Precio) <40000;

Esta consulta mostrará de la tabla Libros, la suma de precios del código de autor menor a los

$40.000.

Fase ll: Fundamentar respuestas.

1.- Es totalmente útil hacer una subconsulta con múltiples tablas (Estudiantes y

Asignaturas_Estudiantes) mediante la sentencia SELECT dentro de otra sentencia SELECT. Esta

subconsulta sirve para conocer datos específicos como por ejemplo, conocer la cantidad de

asignaturas que tiene cada estudiante:

SELECT Rut, Nombre, Apellido, (SELECT COUNT (1) FROM Asignaturas_Estudiantes

WHERE id_Estudiante.Estudiantes = id_Estudiante.Asignaturas_Estudiantes) FROM

Estudiantes;

También se puede hacer otra subconsulta como obtener la calificación más alta de cada

estudiante con la siguiente sintaxis:


SELECT Est.Rut_Estudiante, Est.Nombre, Est.Apellido, Asig.Calificacion (SELECT

MAX(Calificacion) FROM Asignaturas_Estudiantes WHERE Est.id_Estudiante =

Est.Asignaturas_Estudiantes) FROM Estudiantes;

2.- Es muy útil sentenciar SELECT para realizar subconsultas y seleccionar múltiples tablas, ya

que sin esta sentencia no podríamos relacionar las tablas de Estudiantes con la de

Libros_Estudiantes.

Podremos crear una subconsulta de la cantidad de libros que solicitó cada estudiante:

SELECT Rut, Nombre, Apellido, (SELECT COUNT(1) FROM Libros_Estudiantes

WHERE id_Estudiante.Estudiantes = id_Estudiante.Libros_Estudiantes) FROM

Estudiantes;

Del mismo modo, podremos realizar otras consultas relacionando las diferentes tablas mediante

subconsultas más específicas como por ejemplo, la última fecha en la que se solicitó un libro:

SELECT Rut, Nombre, Apellido, (SELECT MAX(Fec_Solicitud) FROM

Libros_Estudiantes WHERE id_Estudiante.Estudiantes =

id_Estudiante.Libros_Estudiantes) FROM Estudiantes;


Conclusión:

Podré concluir entonces, que una subconsulta estará relacionada con la sentencia SELECT (la

cual se utiliza para recuperar los datos almacenados en una tabla de la base de datos), anidado

dentro de otro SELECT y se pueden usar para realizar restricciones en la cláusula WHERE y

HAVING, también se pueden usar para crear tablas "temporales" en FROM y usarlas haciendo

operaciones de JOIN con otras tablas, y por último para hacer subconsultas en la sentencia

SELECT.

Bibliografía:

- Codigofacilito (9 Ago. 2013). Curso Bases de Datos en MySQL - 14:SubConsultas. Recursos

Adicionales Semana 6. Recuperado en: https://www.youtube.com/watch?v=0CCNipZAsuU

- Codigofacilito (24 Jul. 2013). Curso Bases de Datos en MySQL - 10 Joins (1/2). Recursos

Adicionales Semana 6. Recuperado en: https://www.youtube.com/watch?v=wMaLgxU7OXs

- IACC (2016). SQL: Lenguaje para la definición, manipulación y control de base de datos

relacionales lll. Fundamentos de base de datos. Semana 6.


- Oracle (2010). 12.3. Funciones para cadenas de caracteres. Recursos Adicionales Semana 6.

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

- Vergara F. (1 Nov. 2015) 11. MySQL Avanzado - Funciones de cadena de caracteres. Recursos

Adicionales Semana 6. Recuperado en: https://www.youtube.com/watch?v=S0s8PI7WseE

Potrebbero piacerti anche