Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejemplo: visualizar el nombre el numero de departamento el salario y la comisin de cualquier empleado cuyo salario y comisin se corresponden ambos con la comisin y el salario de cualquier empleado del departamento 30.
SELECT ENAME,DEPTNO, SAL, COMM FROM EMP WHERE (SAL, NVL(COMM,0)) IN (SELECT SAL, NVL(COMM,0) FROM EMP WHERE DEPTNO = 30)
## Las subconsultas ignoran los nulos pues, no tienen con que compararlos.
O PAIRWAIR: compara una columna que est antes del operador con otra que est dentro de la SUBQUERY y as continuamente. Ej: SELECT ENAME, DEPTNO, SAL, COMM FROM EMP WHERE SAL IN (SELECT SAL FROM EMP WHERE DEPTNO=30) AND NVL(COMM,0) IN (SELECT NVL(COMM,0) FROM EMP WHERE DEPTNO= 30);
SQL> SELECT A.ENAME,A.SAL,A.DEPTNO,B.SALAVG 2 FROM EMP A, (SELECT DEPTNO,AVG(SAL) SALAVG 3 FROM EMP 4 GROUP BY DEPTNO) B 5 WHERE A.DEPTNO= B.DEPTNO 6 AND A.SAL > B.SALAVG;
UNION, disponible en todas las versiones de SQL minus, nuevo en SQL INTERSECT, nuevo en SQL
Las consultas a unir deben tener el mismo nmero campos, y adems los campos deben ser del mismo tipo. Slo puede haber una nica clausula ORDER BY al final de la sentencia (2 SELECT), REFERIDA AL NOMBRE O ALIAS DE LOS CAMPOS DE LA PRIMERA SELECT,
UNION
U IO devuelve la suma de dos o ms conjuntos de resultados. El conjunto obtenido como resultado de U IO tiene la misma estructura que los conjuntos originales. El siguiente ejemplo muestra el uso de U IO
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento FROM EMPLEADOS UNION SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento FROM CLIENTES
Cuando realizamos una consulta con U IO internamente se realiza una operacion DISTI CT sobre el conjunto de resultados final. Si queremos obtener todos los valores debemos utiliza U IO ALL.
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento FROM EMPLEADOS UNION ALL SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento FROM CLIENTES
minus devuelve la diferencia (resta) de dos o ms conjuntos de resultados. El conjunto obtenido como resultado de minus tiene la misma estructura que los conjuntos originales.
El uso de minus, como norma general, es mucho ms rpido que utilizar condiciones OT I o EXISTS en la clausula WHERE.
INTERSECT
Devuelve la interseccin entre dos o ms conjuntos de resultados en uno. El conjunto obtenido como resultado de I TERSECT tiene la misma estructura que los conjuntos originales. El siguiente ejemplo muestra el uso de I TERSECT
SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento FROM EMPLEADOS INTERSECT SELECT Nombre, Apellido1 , Apellido2, NifCif, FxNacimiento FROM CLIENTES
Se trata de unir dos select independientes Se utilizan dos clusulas UNION y UNION ALL Si especificamos la clusula U IO no aparecern dos veces los registros que estn repetidos , mientras que con la Clusula U IO ALL, si aparecern los registros repetidos.
Ejemplo. SELECT NOMEM, SALAR, 'SIN' "COMISION" FROM TEMPLE WHERE COMIS IS NULL AND NUMDE = 112
UNION SELECT NOMEM, SALAR + COMIS, ' CON' FROM TEMPLE WHERE COMIS IS NOT NULL AND NUMDE=112
SELECT NOMEM, SALAR, 'SIN' "COMISION" FROM TEMPLE WHERE COMIS IS NULL AND NUMDE = 112 UNION ALL SELECT NOMEM, SALAR + COMIS, ' CON' FROM TEMPLE WHERE COMIS IS NOT NULL AND NUMDE =112
CORRESPO DE CIAS E TRE JOI S Y SUBCO SULTAS: Normalmente cualquier consulta entre varias tablas se puede obtener de dos formas, bien combinando ambas tablas mediante un Join o bien como subconsultas. Para que esta correspondencia pueda darse es necesario que exista un EQUIJOIN, es decir que las claves principales de las tablas sean claves ajenas de otras. Se puede decir entonces que:
Si existe una condicin de EQUIJOIN, cualquier join se puede expresar como una subconsulta. Por lo tanto obtendremos el Mismo resultado en ambos casos. Ejemplo: A los departamentos que son directores en funciones se asignar una gratificacin de 5% del salario. Hallar por orden alfabtico los nombres de estos empleados y la gratificacin correspondiente a cada uno de ellos. COMO SUBCO SULTA: SELECT NOMEM, 0.05*SALAR FROM TEMPLE WHERE NUMEM IN (SELECT DIREC FROM TDEPTO WHERE TIDIR = 'F') ORDER BY NOMEM
COMO JOI :
SELECT NOMEM, 0.05* SALAR FROM TDEPTO D, TEMPLE E WHERE D. DIREC= E. NUMEM AND TIDIR = 'F' ORDER BY 1; La combinacin de tablas mediante subconsultas se le conoce con el nombre de consultas correlacionadas . es decir consultas a otras tablas las cuales devuelven un o unos valores a la consulta principal pues existe comunicacin entre alguna clave de las otras dos tablas. Ejemplo: obtener por orden alfabtico los nombres de los departamentos cuyo presupuesto es inferior a la mitad de la suma de los salarios anuales de sus empleados.
Solucin subordinada correlacionada: SELECT NOMDE FROM TDEPTO WHERE PRESU < (SELECT 0.5 * SUM (SALAR* 4)/ 1000 FROM TEMPLE WHERE NUMDE = TDEPTO. UMDE) ORDER BY 1
SELECT NOMDE FROM TEMPLE, TDEPTO WHERE TEMPLE. UMDE=TDEPTO. UMDE GROUP BY TDEPTO.NUMDE, NOMDE, RESU HAVING PRESU< 0.5 * (SUM (SALAR* 4) / 1000) ORDER BY 1;