serie instrucción SQL (cadena de multi-mesa) [Capítulo III del capítulo ochocientos]

Agregar consulta de combinación sin afectar a otras conexiones consulta

Vea figura:

En este caso vamos a utilizar en general, las conexiones izquierda.

select e.ENAME,d.LOC,eb.RECEIVED
from emp e join dept d
on(e.DEPTNO=d.DEPTNO) left join emp_bonus eb
on(eb.EMPNO=e.EMPNO)
order by 2

Por encima de esto se puede lograr, pero no nos ayuda a escribir la reutilización de código en un comunicado.

A continuación se muestra una consulta escalar mi camino, que puede ayudarnos a volver a utilizar parte de SQL.

select e.ENAME,d.LOC,(select eb.RECEIVED from emp_bonus eb where e.EMPNO=eb.EMPNO) as RECEIVED
from emp e join dept d
on(e.DEPTNO=d.DEPTNO)
order by 2

Aquí el principio es muy simple, de hecho, el primer conjunto recibido fila y luego ir a la consulta.
No es la misma restricción recibidas obtener debe ser sólo un resultado, debido a que un espacio se abre.

En el siguiente capítulo 600 se introducirá para el problema de si una consulta de varias líneas.

Combinación de conexión función de consulta polimerización

select e.DEPTNO,e.EMPNO,e.ENAME,e.SAL,e.SAL*case 
when eb.TYPE=1 then 0.1 
when eb.TYPE=2 then 0.2
when eb.TYPE=3 then 0.3
end as bonus
from EMP e,emp_bonus eb
where e.EMPNO=eb.EMPNO
and e.DEPTNO=10

Ahora sólo hay que ver la tabla en el mapa.

Hay una necesidad ahora es al principio del departamento de estadísticas para la SAL y el bono 10 de.

Esta vez, por lo general piensa en funciones de agregado.

select x.DEPTNO,sum(x.SAL) as total_sum,sum(x.bonus) as total_bonus from
(select  e.DEPTNO,e.EMPNO,e.ENAME,e.SAL,e.SAL*case 
when eb.TYPE=1 then 0.1 
when eb.TYPE=2 then 0.2
when eb.TYPE=3 then 0.3
end as bonus
from EMP e,emp_bonus eb
where e.EMPNO=eb.EMPNO
and e.DEPTNO=10) x
group by x.DEPTNO

El resultado fue malo. Debido a que algunas personas se ven recompensados ​​en dos ocasiones:


Así que es posible escribir:

(select  e.DEPTNO,e.EMPNO,e.ENAME,e.SAL,e.SAL*case 
when eb.TYPE=1 then 0.1 
when eb.TYPE=2 then 0.2
when eb.TYPE=3 then 0.3
end as bonus
from EMP e,emp_bonus eb
where e.EMPNO=eb.EMPNO
and e.DEPTNO=10) x
group by x.DEPTNO

Excluir los mismos artículos incrementado Sal, Sal misma pero en caso de que alguien cómo hacerlo? Esto es definitivamente un problema. Otro problema es que si este sector si algunas personas no recibir un bono de cómo hacerlo? Esa parte no se presentó SAL

select x.DEPTNO, d.total_sum,sum(x.bonus) as total_bonus from
(select  e.DEPTNO,e.EMPNO,e.ENAME,e.SAL,e.SAL*case 
when eb.TYPE=1 then 0.1 
when eb.TYPE=2 then 0.2
when eb.TYPE=3 then 0.3
end as bonus
from EMP e,emp_bonus eb
where e.EMPNO=eb.EMPNO
and e.DEPTNO=10
) x,(select DEPTNO,sum(EMP.SAL) as total_sum from EMP where EMP.DEPTNO=10 group by EMP.DEPTNO) d
where d.DEPTNO=x.DEPTNO
group by x.DEPTNO,d.total_sum

Podemos revisar la suma (x.bonus), y luego conectar la aparición de un d.total_sum.

Optimización sobre:

select  e.DEPTNO,d.total_sum,sum(e.SAL*case 
when eb.TYPE=1 then 0.1 
when eb.TYPE=2 then 0.2
when eb.TYPE=3 then 0.3
end) as bonus
from EMP e,emp_bonus eb,(select DEPTNO,sum(EMP.SAL) as total_sum from EMP where DEPTNO=10 group by DEPTNO) d
where e.EMPNO=eb.EMPNO and e.DEPTNO=d.DEPTNO 
group by e.DEPTNO,d.total_sum

La optimización se basa en:
hay dos condiciones se pueden combinar EMP.DEPTNO = 10, el segundo punto hay necesidad de comprobar e.ENAME estos se puede incorporar directamente.
Algunas personas pueden utilizar la suma sobre la función de escritura:

select  e.DEPTNO,sum(distinct e.SAL) over (partition by e.deptno) as total_sum,sum(e.SAL*case 
when eb.TYPE=1 then 0.1 
when eb.TYPE=2 then 0.2
when eb.TYPE=3 then 0.3
end) over (partition by e.deptno) as bonus
from EMP e left join emp_bonus eb on e.EMPNO=eb.EMPNO
where e.DEPTNO=10

Solía unen a los anteriores externa, es para evitar el sector si algunas personas no reciben bonificación.
Hay dos problemas, uno es sobre declaración no puede incluir distintos, y la segunda es las diferentes personas en la misma empno pueden Sal.
Así que trate de no usar esta situación de esta manera.

Supongo que te gusta

Origin www.cnblogs.com/aoximin/p/12549371.html
Recomendado
Clasificación