Base de datos MySQL - consulta de conexión SQL99

1. Consulta de conexión SQL99

1.1 Conexión cruzada

Efecto: Su efecto es equivalente a no utilizar la cláusula donde para limitar las condiciones de conexión al conectar dos tablas;

SQL99:

select dept.deptno,dname,ename from dept cross join emp; 

 SQL92:

select dept.deptno,dname,ename from dept,emp; 

resultado de la operación:

d70f7c62e4714ae7b652a3573f9a6128.png

 1.2 Conexión natural

Unión natural: establezca una conexión basada en todas las columnas con el mismo nombre en las dos tablas y seleccione todas las filas con valores iguales en las columnas con el mismo nombre de las dos tablas.

Nota 1: Si los tipos de datos de las columnas con el mismo nombre en las dos tablas son diferentes, se producirá un error.

Nota 2: No está permitido utilizar nombres de tablas o alias como prefijos en las columnas de referencia.

Nota 3: El resultado de la conexión natural no conserva atributos duplicados.

Ejemplo:

select empno, ename, sal, deptno, dname from emp natural join dept

resultado de la operación:

61765961466c445486ac6faa4549e4a1.png

 1.3 Uso de la cláusula secundaria

Si no desea realizar una unión equivalente con referencia a todas las columnas del mismo nombre en la tabla unida, las uniones naturales no podrán cumplir con los requisitos. Puede usar la cláusula USING durante la conexión para establecer la columna (columna de referencia ) nombre utilizado para la unión equi .

La columna a la que hace referencia la cláusula de uso no puede tener como prefijo el nombre de la tabla o el alias en ningún lugar de SQL.

select e.ename,e.ename,e.sal,deptno,d. dname
	from emp e join dept d 
    using(deptno)
	where deptno=101

 1.4 Sobre la cláusula infantil

La condición de una combinación natural es una combinación equivalente basada en todas las columnas con el mismo nombre en la tabla. Para establecer condiciones de unión arbitrarias o especificar las columnas que se unirán , se debe utilizar la cláusula ON. Las condiciones de conexión se escriben por separado de otras condiciones de consulta y la cláusula ON se utiliza para que la declaración de consulta sea más fácil de entender.

Ejemplo: 

select ename,dname from emp inner join dept 
on emp.deptno=dept.deptno 
where emp.deptno=30;

resultado de la operación:

00fc240342ec4dd583b642ebe04282d7.png 

 Ejemplo:

select empno, ename, sal, emp.deptno, dname from emp inner join dept 
on (emp.deptno = dept.deptno and sal>1000);

resultado de la operación: 

1f5f0c29e7a041d4bee97c63cf8038f4.png

 Ejemplo:

select * from dept, emp where dept.deptno = emp.deptno and sal>1000;

resultado de la operación: 

bc0ef0490a524d2281b9519b61f61aa2.png

 1.5 uniones externas

Izquierda combinación externa:

Durante el proceso de conexión de dos tablas, además de devolver filas que cumplen las condiciones de conexión, también devuelve filas en la tabla izquierda que no cumplen las condiciones. Este tipo de conexión se denomina unión externa izquierda.

seleccione * de la tabla 1 alias 1 izquierda [externa] únase a la tabla 2 alias 2 en alias 1.xx=alias 2.xx

select * from emp e left outer join dept d on e.deptno=d.deptno;

select e.ename,e.deptno,d.dname from emp e left 
outer join dept d on e.deptno=d.deptno;

Unión exterior derecha:

Durante el proceso de conexión de dos tablas, además de devolver filas que cumplen las condiciones de conexión, también devuelve filas en la tabla derecha que no cumplen las condiciones. Este tipo de conexión se denomina unión externa derecha.

seleccione * de la tabla 1 alias 1 derecha [exterior] únase a la tabla 2 alias 2 en alias 1.xx=alias 2.xx

select * from emp e right outer join dept d on e.deptno=d.deptno;

2. Subconsulta

1) Subconsulta de una sola fila

Ejemplo: consultar el salario de todas las personas cuyo salario sea superior a CLEARK

select * from emp
     where sal>(select sal from emp where ename='CLARK');

Ejemplo: Consultar la información de empleados que tienen el mismo puesto que SCOTT y fueron contratados antes que SCOTT 

SELECT  empno, ename, job FROM emp
WHERE job =(SELECT job FROM emp WHERE empno=7788)
AND hiredate < (SELECT hiredate FROM emp WHERE empno=7788);

Ejemplo: consultar el número y nombre de los empleados cuyo salario es superior a SCOTT o cuyo tiempo de empleo es anterior a SCOTT.

select empno,ename,sal,hiredate
from emp
where sal>(select sal from emp where ename='SCOTT') 
or hiredate<(select hiredate from emp where ename='SCOTT')

2) Subconsulta de varias filas

all: comparar con todos los valores devueltos por la subconsulta

cualquiera: comparar con cualquier valor devuelto por la subconsulta

en: igual a cualquiera en la lista

 Ejemplo: Consultar información de empleados cuyo salario es inferior a cualquier salario de 'CLERK'.

SELECT  empno, ename, job,sal
FROM emp
WHERE sal < ANY (SELECT sal FROM emp WHERE job = 'CLERK') AND job <> 'CLERK';

resultado de la operación:

f4e4f2db13264bb5a6af6a7ef99b8fab.png

 Ejemplo: Consultar el número, nombre y salario de los empleados cuyo salario es superior a todo 'VENDEDOR'.

SELECT  empno, ename,sal
FROM emp
WHERE sal > ALL(SELECT sal FROM emp WHERE job= 'SALESMAN');

resultado de la operación:

f16a6dc886f449b6a54f7a3b4fc73378.png

 Ejemplo: Consultar la información de los empleados del departamento 20 que tienen el mismo puesto que los empleados del departamento 10.

SELECT  empno, ename, job FROM emp
WHERE   job IN (SELECT job FROM emp WHERE deptno=10)
AND deptno =20;

resultado de la operación:

02ca1250f77445dbb74eb6f9e48b2656.png

 Ejemplo: consultar el salario de los empleados cuyo salario no es ni el más alto ni el más bajo

select * from emp where sal !=(select max(sal) from emp ) and sal !=
(select min(sal) from emp);

Ejemplo: información sobre empleados que no son vendedores

--法一:
select * from emp where deptno != (select deptno from dept where
dname='sales');
--法二:
select * from emp where deptno in(select deptno from dept where
dname !='sales');

Ejemplo: Consultar información de empleados y requerir cualquier empleado con salario superior al departamento número 10.

--法一:
select * from emp where sal >(select min(sal) from emp where
deptno=10);
--法二:
select * from emp where sal >any (select sal from emp where
deptno=10);

Ejemplo: Consultar el salario promedio de cada departamento.

select * from 
	salgrade s, (select deptno,avg(sal) avg_sal 
			from emp group by deptno) t
	where  t.avg_sal between s.losal and s.hisal;

resultado de la operación:

2d0177d6f5094bc98bc70628ed83177d.png 

 

Supongo que te gusta

Origin blog.csdn.net/shengshanlaolin_/article/details/128458288
Recomendado
Clasificación