Si aprendes a crear una Subquery (sub-consulta o sub-búsqueda en español) en tus Select o Consultas en Oracle podrás resolver rápidamente los problemas que encuentres en tus datos cuando trates de obtenerlos y no logres traer la información que deseas para que sea procesada en tus PL-SQL Procedures en Oracle.
Una Subquery básicamente es otra consulta Select pero que se encuentra anidada dentro de un Select principal en tus PL-SQL Procedures en Oracle. Esta Subquery puede ir a nivel de los campos de un Select en tus PL-SQL Procedures en Oracle, se puede especificar como una tabla dentro del From y también se puede incluir dentro de las condiciones del Where en tus PL-SQL Procedures en Oracle. Revisemos algunos ejemplos para que entiendas mejor el uso de una Subquery en tus consultas Select en tus PL-SQL Procedures en Oracle.
Ejemplo #1: Supone que debes mostrar cuantos empleados tiene cada departamento, veamos como se hace con una subquery:
/* PL-SQL Procedures en Oracle */
Select
Dep.codigo_dep,
Dep.nombre_dep,
(select count(1) from t_emplado emp where emp.id_departamento = dep.id_departamento) cant_empleados
From t_departamento dep;
En este ejemplo se crea una Subquery para obtener la cantidad de empleados que tiene cada departamento, fíjate que en los PL-SQL Procedures en Oracle debe estar encerrada entre paréntesis y contener un nombre al final (cant_empleados).
Ejemplo #2: Resolvamos el mismo ejemplo anterior pero usando una subquery en el From, vemos como se hace:
/* PL-SQL Procedures en Oracle */
Select
Dep.codigo_dep,
Dep.nombre_dep,
Cant_emp.cant_empleados
From t_departamento dep,
( Select emp.id_departamento, count(1) cant_empleados
From t_empleado emp
Group by emp.id_departamento ) cant_emp
Where dep.id_departamento = cant_emp.id_departamento;
En este ejemplo de PL-SQL Procedures en Oracle se crea una subquery en el From como otra tabla para contar los empleados por cada departamento con el nombre Cant_Emp y luego en el Where se une la tabla t_departamento con la subquery cant_emp.
TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
Ejemplo #3: Supone que debes mostrar todos los empleados de un departamento en particular, veamos como se hace usando una subquery:
/* PL-SQL Procedures en Oracle */
Select
Emp.codigo_emp,
Emp.nombre_emp,
Emp.edad,
Emp.direccion_emp
From t_empleado emp
Where emp.id_departamento = ( Select dep.id_departamento
From t_departamento dep
Where dep.codigo_dep = pin_codigo_dep )
En este ejemplo de PL-SQL Procedures en Oracle se esta usando una subquery dentro del Where para buscar el id del departamento en la tabla t_departamento y luego este id se une con el id_departamento de la tabla t_empleado.
Te propongo que pruebes de inmediato este ejemplo en tu Base de Datos con tus propias tablas, PL-SQL Procedures en Oracle y PL-SQL Function en Oracle, para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica en tus PL-SQL Packages en Oracle.
Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de PL-SQL Procedures en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con PL-SQL Procedures en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.
Saludos
Roberto Vicencio – Escritor del Reporte:
“Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”
En el ejemplo1 y ejemplo2 cual de las dos metologías es mas eficiente?, a sabiendas que las tablas se encuentran indexadas.
Hola Hugo, gracias por comunicarte y por tu comentario, lo mas recomendable es usar el ejemplo2 ya que todos los datos se obtienen de una sola vez, en cambio con el ejemplo1 se hace un select por cada fila que obtenga la query principal y al ser una gran cantidad de filas el rendimiento se vería afectado, recomiendo que el ejemplo1 solo se use en casos excepcionales, gracias.
PD: Ya obtuviste mi Libro-Reporte gratuito sobre “Como Construir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aún no lo tienes puedes obtenerlo gratis desde aquí:
https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Me parece muy interesante tu articulo, yo estoy haciendo una aplicacion en donde se obtengan los valores de la cantidad de alumnos por cada profesor, lo que no entiendo es de donde sacas este valor?
pin_codigo_dep en el segundo ejemplo. Espero me puedas ayudar
Hola Lacsanch, gracias por comunicarte y por tu comentario, te explico, lo que ocurre es que yo asumo que el select esta dentro de un procedimiento o una función y la palabra pin_codigo_dep es una variable que llega como un parámetro al proceso con el codigo del departamento, esta variable puede ser cambiada por cualquier valor dependiendo del caso, gracias.
PD: Ya obtuviste mi libro-reporte gratuito sobre “Como Contruir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aun no lo tienes puedes obtenerlo desde el siguiente enlace:
https://dominatuspackagesen0racle.com/
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.
Muy interesante el tema, me gustaría saber si es mas eficiente usando el Select dentro del FROM?
Hola Leonardo, gracias por comunicarte, lo mas eficiente es usar un subquery dentro del from o en el where solo si es realmente necesario, lo menos conveniente es usarlo en el select ya que el costo de la consulta es muy alto, gracias.
PD: Si te ha gustado lo que has visto del blog te invito a compartir el enlace https://dominatuspackagesen0racle.com/ con tus amigos o personas que también les pueda interesar ver esta información, gracias.
Saludos
Roberto Vicencio – Para Tu Éxito con Oracle.