Sub consultas

5

Click here to load reader

description

documnetos de Introduccion a una sub consilta 1

Transcript of Sub consultas

Page 1: Sub consultas

SUB CONSULTA DEFINICION: Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT. Normalmente se utilizan para filtrar una clausula WHERE o HAVING con el conjunto de resultados de la subconsulta, aunque también pueden utilizarse en la lista de selección. Por ejemplo podríamos consultar el alquiler último de un cliente.

SELECT CO_CLIENTE, NOMBRE, MARCA, MODDELO FROM ALQUILERES WHERE CO_CLIENTE = 1 AND FECHA_ALQUILER = (SELECTMAX(FECHA_ALQUILER) FROM ALQUILERES WHERE CO_CLIENTE = 1)

En este caso, la subconsulta se ejecuta en primer lugar, obteniendo el valor de la máxima fecha de alquiler, y posteriormente se obtienen los datos de la consulta principal. Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre paréntesis. La subconsulta se puede encontrar en la lista de selección, en la cláusula WHERE o en la cláusula HAVING de la consulta principal. Tiene las siguientes restricciones:

No puede contener la cláusula ORDER BY

No puede ser la UNION de varias sentencias SELECT

Si la subconsulta aparece en la lista de selección, está asociada a un operador igual "=" solo puede devolver un único registro.

Referencias.Externas A menudo, es necesario, dentro del cuerpo de una subconsulta, hacer referencia al valor de una columna de la fila actual en la consulta principal, ese nombre de columna se denomina referencia externa. (Es un campo que aparece en la subconsulta pero se refiere a la una de las tablas designadas en la consulta principal) Cuando se ejecuta una consulta que contiene una subconsulta con referencias externas, la subconsulta se ejecuta por cada fila de la consulta principal. En este ejemplo la subconsulta aparece en la lista de selección, ejecutándose una vez por cada fila que devuelve la consulta principal.

SELECT CO_EMPLEADO, NOMBRE, (SELECTMIN(FECHA_NOMINA) FROM NOMINAS WHERE CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO) PRIMERA_NOMINA FROM EMPLEADOS;

Anidar subconsulta Las subconsulta pueden anidarse de forma que una subconsulta aparezca en la cláusula WHERE (por ejemplo) de otra subconsulta que a su vez forma parte de otra consulta principal.

SELECT CO_EMPLEADO, EMPLEADOS FROM EMPLEADOS WHERE CO_EMPLEADO IN(SELECT CO_EMPLEADO FROM NOMINAS WHERE ESTADO IN ( SELECT ESTADO FROM ESTADOS_NOMINAS WHERE EMITIDO = 'S' AND PAGADO = 'N') )

Los resultados que se obtienen con subconsulta normalmente pueden conseguirse a través de consultas combinadas (JOIN).

SELECT CO_EMPLEADO,

Page 2: Sub consultas

NOMBRE FROM EMPLEADOS WHERE ESTADO IN(SELECT ESTADO FROM ESTADOS WHERE ACTIVO = 'S')

Podrá escribirse como:

SELECT CO_EMPLEADO, NOMBRE FROM EMPLEADOS, ESTADOS WHERE EMPLEADOS.ESTADO = ESTADOS.ESTADO AND ESTADOS.ACTIVO = 'S'

Normalmente es más rápido utilizar un JOIN en lugar de una subconsulta, aunque esto depende sobre todo del diseño de la base de datos y del volumen de datos que tenga. Utilización de subconsulta con UPDATE Podemos utilizar subconsulta también en consultas de actualización conjuntamente con UPDATE. Normalmente se utilizan para "copiar" el valor de otra tabla.

UPDATE EMPLEADOS SET SALARIO_BRUTO = (SELECTSUM(SALIRO_BRUTO) FROM NOMINAS WHERE NOMINAS.CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO) WHERE SALARIO_BRUTO IS NULL

La función EXISTS EXISTS es una función SQL que devuelve verdadero cuando una subconsulta retorna al menos una fila.

SELECT CO_CLIENTE, NOMBRE FROM CLIENTES WHERE EXISTS( SELECT * FROM MOROSOS WHERE CO_CLIENTE = CLIENTES.CO_CLIENTE AND PAGADO = 'N')

La función EXISTS puede ser utilizada en cualquier sentencia SQL válida, SELECT, UPDATE,INSERTo DELETE.

Page 3: Sub consultas

TIPOS DE SUB CONSULTAS

1). SUBCONSULTA DE UNA SOLA FILA

CONSULTA PRINCIPAL

DE VUELVE

SUB CONSULTA ST - CLERK

2). SUBCONSULTA DE VARIAS FILA

CONSULTA PRINCIPAL

DE VUELVE

SUB CONSULTA ST - CLERK

SA - MAN

1). SUBCONSULTA DE UNA SOLA FILA 2). SUBCONSULTA DE VARIAS FILA S

Devuelven una sola fila Devuelven más de una fila

Utilizan operadores de comparación de una sola fila Utilizan operadores de comparación de varias filas

Operador Significado

= Igual que

> Mayor que

=> Mayor o igual que

< Menor que

<= Menor o igual que

<> No igual a

Operadores de conjuntos SQL Server 2008

En las expresiones multidimensionales (MDX), los operadores de conjuntos ejecutan operaciones en miembros o conjuntos y devuelven un conjunto. Por lo general, los operadores de conjuntos se utilizan como alternativa a las distintas funciones de conjuntos en expresiones MDX.

MDX es compatible con los operadores de conjuntos que se indican en la siguiente tabla.

Operador Descripción

- (Except) Devuelve la diferencia entre dos conjuntos y elimina los miembros duplicados.

Este operador es funcionalmente equivalente a la función Except.

*

(Crossjoin)

Devuelve el producto cruzado de dos conjuntos.

Este operador es funcionalmente equivalente a la función Crossjoin.

: (Range) Devuelve un conjunto en su orden natural, con dos miembros especificados como extremos y todos los

miembros entre ellos incluidos como miembros del conjunto.

+ (Union) Devuelve la unión de dos conjuntos y excluye los miembros duplicados.

Este operador es funcionalmente equivalente a la función Union (MDX).

Usando los operadores SET (Conjunto) Objetivos: • Describir los operadores SET (Conjunto) • Usar un operador SET (Conjunto) para combinar múltiples consultas en Una consulta simple • Controlar el orden de las filas obtenidas

Operador Significado

IN Igual a cualquier miembro de la lista

ANY Compara el valor con cada valor de vuelto por la sub consulta

ALL Compara el valor con todos los valores devueltos por la sub consulta

Page 4: Sub consultas

Operadores SET (Conjunto) Combinan los resultados de dos o más Consultas en un único resultado. Las consultas que contienen operadores SET (Conjunto) son llamadas consultas compuestas (compound quieres). Todos los operadores SET tienen la misma precedencia. Si una sentencia SQL Contiene múltiples operadores SET, el servidor de Oracle evalúa estos de Izquierda a derecha. Se puede hacer uso de los paréntesis para especificar un Orden explicito de evaluación como pueden ser las consultas que usan el Operador INTERSECT con operadores SET. Nota: En el diagrama, el color claro representa el resultado de la consulta.

Operador Obtiene

UNION Todas las filas distintas seleccionadas por ambas consultas

UNION ALL Todas las filas seleccionadas por ambas consultas, incluyendo todos los duplicados

INTERSECT Todas las filas distintas seleccionadas por ambas consultas

MINUS Todas las filas distintas seleccionadas por la primera sentencia SELECT que no se encuentren en la segunda sentencia SELECT

Operador UNION El operador UNION obtiene todas las filas seleccionadas por ambas consultas. Use el operador UNION para obtener todas las filas de múltiples tablas y eliminar cualquier fila duplicada. Normas a seguir • El número de columnas y tipo de datos deben ser idénticos en todas las Sentencias SELECT usadas en las consultas. Los nombres de las Columnas no necesitan ser idénticas. • La UNION opera sobre todas las columnas inicialmente seleccionadas. • Los valores NULOS no son ignorados durante la verificación de Duplicados • El operador IN tiene una mayor precedencia que el operador UNION • Por defecto, el resultado es ordenado ascendentemente por la primera Columna de la cláusula SELECT

Operador UNION ALL Use el operador UNION ALL para obtener todas las filas de múltiples consultas. Normas a seguir • Diferente a UNION, las filas duplicadas no son eliminadas y el resultado

Page 5: Sub consultas

No es ordenado por defecto. • La palabra reservada DISTINCT no puede ser usada

Operador INTERSECT Use el operador INTERSECT para obtener todas las filas comunes de múltiples consultas. Normas a seguir • El número de columnas y tipos de datos de las columnas seleccionadas Inicialmente por la sentencia SELECT, deben ser Idénticos en todas las sentencias SELECT usadas en la consulta. El nombre de las consultas No necesita ser idéntico. •.Invertir el orden de las tablas intersecadas no modifica el resultado •INTERSECT no ignora los valores NULOS Operador MINUS Use el operador MINUS para obtener las filas de la primera consulta que no estén presentes en la segunda consulta (la primera sentencia SELECT MENOS la segunda sentencia SELECT) Normas a seguir • El número de columnas y tipos de datos de las columnas de la sentencia SELECT inicial deben ser idénticas en todas las Sentencias SELECT usadas en la consulta. Los nombres de las columnas no necesitan ser idénticas. • Todas las columnas en la cláusula WHERE deben estar en la cláusula SELECT para que el operador MINUS trabaje.