Diferencia entre revisiones de «Plantilla:PHP/SQL subconsultas»
De WikiEducator
(Página creada con «===Qué es una subconsulta=== <br /> {{MRM_Deficiion|Title=Qué es una subconsulta| ;Es una consulta que realizamos dentro de otra con el objetivo de obtener uno o varios v...») |
|||
Línea 1: | Línea 1: | ||
===Qué es una subconsulta=== | ===Qué es una subconsulta=== | ||
<br /> | <br /> | ||
− | {{ | + | {{MRM_Definicion|Title=Qué es una subconsulta| |
;Es una consulta que realizamos dentro de otra con el objetivo de obtener uno o varios valores que necesitamos en la consulta principal para comparar valores | ;Es una consulta que realizamos dentro de otra con el objetivo de obtener uno o varios valores que necesitamos en la consulta principal para comparar valores | ||
}} | }} | ||
− | Miramos el siguiente ejemplo | + | *Miramos el siguiente ejemplo |
+ | <br /> | ||
[[Archivo:img_subquery1.png]] | [[Archivo:img_subquery1.png]] | ||
+ | <hr /> | ||
;Estructura de una subconsulta | ;Estructura de una subconsulta | ||
*La subconsulta o consulta interna se ejecuta antes que la consulta principal | *La subconsulta o consulta interna se ejecuta antes que la consulta principal | ||
+ | <br /> | ||
[[Archivo:img_subquery2.png]] | [[Archivo:img_subquery2.png]] | ||
+ | <hr /> | ||
*En el ejemplo anterior la consulta quedaría | *En el ejemplo anterior la consulta quedaría | ||
+ | <br /> | ||
[[Archivo:img_subquery2.png]] | [[Archivo:img_subquery2.png]] | ||
+ | <hr /> | ||
{{MRM_Actividad|Title=Ejemplo| | {{MRM_Actividad|Title=Ejemplo| | ||
+ | Obtener todos los trabajos (tabla JOBS) | ||
+ | cuyo salario min sea mayor que el salario | ||
+ | del trabajador cuyo id es 103 | ||
+ | *Si lo hiciéramos sin subconsultas primero obtendríamos el sueldo del empleado 103 | ||
+ | <source lang=sql> | ||
+ | SELECT SALARY FROM EMPLOYEES WHERE EMPLOYEE_ID = 103; | ||
+ | </source> | ||
+ | *Y luego usaríamos ese valor para obetener los trabajos que nos interesan | ||
+ | <source lang=sql> | ||
+ | Select job_id, job_name form JOBS where min_salary > 9000; | ||
+ | </source> | ||
+ | <!-- | ||
+ | <source lang=sql> | ||
+ | Select job_id, job_title from JOBS where min_salary > select salary from EMPLOYEES where employee_id = 103; | ||
+ | </source> | ||
+ | --> | ||
+ | }} | ||
+ | ;Reglas a la hora de usar una subconsulta | ||
+ | [[Archivo:img_subquery4.png]] | ||
+ | ;Tenemos dos tipos de subconsultas | ||
+ | #Subconsultas que devuelven una sola fila | ||
+ | #Subconsultas que devuelven varias filas | ||
+ | [[Archivo:img_subquery5.png]] | ||
+ | *Los operadores de comparación serán diferentes según estemos en un caso u otro | ||
+ | *Es totalmente lógico, no es lo mismo comparar salario con un valor, que con un conjunto de valores | ||
+ | ;Subconsutlas que devuelven una fila | ||
+ | *Este tipo de subconsulta utiliza operadores de una sola fila | ||
+ | [[Archivo:img_subquery5.png]] | ||
+ | {{MRM_Actividad|Title=Ejemplo| | ||
+ | ;Mostrar los empleados, cuyo id de cargo sea el mismo que el del empleado 141 | ||
+ | <!-- | ||
+ | <source lang=php> | ||
+ | select last_name, job_id | ||
+ | from EMPLOYEES | ||
+ | where job_id = | ||
+ | (SELECT JOB_ID | ||
+ | FROM EMPLOYEES | ||
+ | WHERE EMPLOYEE_ID = 141); | ||
+ | |||
+ | </source> | ||
+ | --> | ||
+ | }} | ||
+ | {{MRM_Actividad|Title=Ejemplo| | ||
+ | ;Mostrar empleados (nombre, trabajo y salario) que trabajen en el mismo trabajo que trabaja Taylor y cobren más que el sueldo de Taylor | ||
+ | <!-- | ||
+ | <source lang=php> | ||
+ | select last_name, job_id, salary | ||
+ | from EMPLOYEES | ||
+ | where job_id = | ||
+ | (SELECT JOB_ID | ||
+ | FROM EMPLOYEES | ||
+ | WHERE last_name = 'Taylor') | ||
+ | and | ||
+ | salary > | ||
+ | (SELECT salary | ||
+ | FROM EMPLOYEES | ||
+ | WHERE last_name = 'Taylor'); | ||
+ | </source> | ||
+ | --> | ||
+ | }} | ||
+ | ;También la subconsulta puede retornar un valor resultado de una función de agrupación | ||
+ | {{MRM_Actividad|Title=Ejemplo| | ||
+ | ;Mostrar empleados (nombre, trabajo y salario) que cobren más que la media que se cobra en la empresa | ||
+ | <!-- | ||
+ | <source lang=php> | ||
+ | select last_name, job_id, salary | ||
+ | from EMPLOYEES | ||
+ | where salary > (select avg(salary) | ||
+ | from EMPLOYEES); | ||
+ | </source> | ||
+ | --> | ||
}} | }} |
Revisión de 22:38 15 may 2018
Qué es una subconsulta
|
- Miramos el siguiente ejemplo
- Estructura de una subconsulta
- La subconsulta o consulta interna se ejecuta antes que la consulta principal
- En el ejemplo anterior la consulta quedaría
Obtener todos los trabajos (tabla JOBS) cuyo salario min sea mayor que el salario del trabajador cuyo id es 103
SELECT SALARY FROM EMPLOYEES WHERE EMPLOYEE_ID = 103;
SELECT job_id, job_name form JOBS WHERE min_salary > 9000;
|
- Reglas a la hora de usar una subconsulta
- Tenemos dos tipos de subconsultas
- Subconsultas que devuelven una sola fila
- Subconsultas que devuelven varias filas
- Los operadores de comparación serán diferentes según estemos en un caso u otro
- Es totalmente lógico, no es lo mismo comparar salario con un valor, que con un conjunto de valores
- Subconsutlas que devuelven una fila
- Este tipo de subconsulta utiliza operadores de una sola fila
- También la subconsulta puede retornar un valor resultado de una función de agrupación