MySQL subconsulta y consulta combinada de varias tablas

Subconsulta: es el resultado de una consulta como fuente de datos o condición de otra consulta.

¿Cómo averiguar el nombre de la persona con el salario más alto?

mysql> seleccione max (sal) de emp; --Query el salario máximo 
+ ---------- + 
| max (sal) | 
+ ---------- + 
| 5000.00 | 
+ ---------- + 
1 fila en conjunto (0.00 seg) 

mysql> seleccione ename, sal de emp donde sal = (seleccione max (sal) de emp); - el salario máximo puede ser el máximo Una condición de filtro, seleccione ename, sal de emp se asigna a sal sal después de la ejecución (seleccione max (sal) de emp); 
+ ------- + --------- + 
| ename | sal | 
+ ------- + --------- + 
| KING | 5000.00 | 
+ ------- + --------- + 
1 fila en el conjunto ( 0.32 seg) 

mysql> seleccione ename, sal de emp donde sal = (seleccione min (sal) de emp); --Query el salario mínimo 
+ ------- + -------- + 
| ename | sal | 
+ ------- + -------- + 
| SMITH | 800.00 | 
+ ------- + -------- +
1 fila en conjunto (0.00 seg)

Situación de subconsulta; use el resultado de la consulta como condición para otra consulta

Echa un vistazo a las compañías tienen las personas que son gerentes; ver las correspondientes a la empno mgr aparecerá en el campo, que es el director

mysql> seleccione mgr de emp; 查询
+ ------ + 
| mgr | 
+ ------ + 
| 7902 | 
El | 7698 | 
El | 7698 | 
El | 7839 | 
El | 7698 | 
El | 7839 | 
El | 7839 | 
El | 7566 | 
El | NULL | 
El | 7698 | 
El | 7788 | 
El | 7698 | 
El | 7566 | 
El | 7782 | 
El | NULL | 
+ ------ + 
15 filas en el conjunto (0.00 seg) 

mysql> seleccione mgr distinto de emp; - 去 重
+ ------ + 
| mgr | 
+ ------ + 
| 7902 | 
El | 7698 | 
El | 7839 | 
El | 7566 | 
El | NULL | 
El | 7788 | 
El | 7782 | 
+ ------ + 
7 filas en conjunto (0.00 seg)

mysql> seleccione mgr distinto de emp donde mgr no es nulo; - elimine el valor nulo, la información obtenida por esta declaración es lo que empno aparece en el campo mgr 
+ ------ + 
| mgr | 
+ - + ----- 
| 7.902 | 
| 7.698 | 
| 7.839 | 
| 7.566 | 
| 7.788 | 
| 7.782 | 
+ ------ + 
. 6 en filas SET (0,01 seg) 
MySQL> ename SELECT, empmo de EMP DONDE empmo in (seleccione mgr distinto de emp); - Consulte qué personas de la empresa son administradores en palabras clave 
+ ------- + ------- + 
| ename | empmo | 
+ ---- + ------- + --- 
| JONES | 7566 | 
| BLAKE | 7698 | 
| CLARK | 7782 | 
| SCOTT | 7788 | 
| REY | 7839 | 
| FORD | 7902 | 
+ ------- + ------- + 
6 filas en conjunto (0.00 seg)
mysql> seleccione ename, empmo from emp donde empmo in (seleccione mgr distinto de emp donde mgr no es nulo); 
+ ------- + ------- + 
| esmalte | empmo | 
+ ------- + ------- + 
| JONES | 7566 | 
El | BLAKE | 7698 | 
El | CLARK | 7782 | 
El | SCOTT | 7788 | 
El | REY | 7839 | 
El | FORD | 7902 | 
+ ------- + ------- + 
6 filas en conjunto (0.00 seg)

Nota: En los dos casos anteriores, un resultado de la consulta completa se usa como condición de otra consulta. Cuando se usa como condición, aquí se usa una comparación equivalente y en. . ¿Qué departamento tiene el mayor salario promedio encontrado?

1. El salario promedio de cada departamento debe verificarse primero. Las funciones de grupo no pueden anidarse.

Como fuente de datos de otra consulta, el resultado de la consulta puede considerarse como una tabla.

Nota: El alias debe usarse en el proceso de ser una tabla

mysql> select avg (sal), deptno from emp group by deptno; --Query el salario promedio y el número de departamento correspondiente 
+ ------------- + -------- + 
| promedio (sal) | deptno | 
+ ------------- + -------- + 
| 2356.540000 | NULL | 
| 2916.666667 | 10 | 
| 2175.000000 | 20 | 
| | 
+ ------------- + -------- + 
4 filas en conjunto (0.00 seg)    

Consulta conjunta de múltiples tablas MySQL

Consultar el nombre del empleado y el nombre del departamento del empleado. 

mysql> seleccione ename, DNAME de emp, dept; 
+ ------------ + ------------ + 
| esmalte | DNAME | 
+ ------------ + ------------ + 
| SMITH | CONTABILIDAD | 
El | SMITH | INVESTIGACION | 
El | SMITH | VENTAS | 
El | SMITH | OPERACIONES | 
El | ALLEN | CONTABILIDAD | 
El | ALLEN | INVESTIGACION | 
El | ALLEN | VENTAS | 
El | ALLEN | OPERACIONES | 
El | WARD | CONTABILIDAD | 
El | WARD | INVESTIGACION | 
El | WARD | VENTAS | 
El | WARD | OPERACIONES | 
El | JONES | CONTABILIDAD | 
El | JONES | INVESTIGACION | 
El | JONES | VENTAS | 
El | JONES | OPERACIONES |
El | MARTIN | CONTABILIDAD | 
El | REY | OPERACIONES |
El | MARTIN | INVESTIGACION | 
El | MARTIN | VENTAS | 
El | MARTIN | OPERACIONES | 
El | BLAKE | CONTABILIDAD | 
El | BLAKE | INVESTIGACION | 
El | BLAKE | VENTAS | 
El | BLAKE | OPERACIONES | 
El | CLARK | CONTABILIDAD | 
El | CLARK | INVESTIGACION | 
El | CLARK | VENTAS | 
El | CLARK | OPERACIONES | 
El | SCOTT | CONTABILIDAD | 
El | SCOTT | INVESTIGACION | 
El | SCOTT | VENTAS | 
El | SCOTT | OPERACIONES | 
El | REY | CONTABILIDAD | 
El | REY | INVESTIGACION | 
El | REY | VENTAS | 
El | TURNER | CONTABILIDAD | 
El | TURNER | INVESTIGACION |
El | TURNER | VENTAS | 
El | TURNER | OPERACIONES | 
El | ADAMS | CONTABILIDAD | 
El | ADAMS | INVESTIGACION | 
El | ADAMS | VENTAS | 
El | ADAMS | OPERACIONES | 
El | James | CONTABILIDAD | 
El | James | INVESTIGACION | 
El | James | VENTAS | 
El | James | OPERACIONES | 
El | FORD | CONTABILIDAD | 
El | FORD | INVESTIGACION | 
El | FORD | VENTAS | 
El | FORD | OPERACIONES | 
El | MILLER | CONTABILIDAD | 
El | MILLER | INVESTIGACION | 
El | MILLER | VENTAS | 
El | MILLER | OPERACIONES | 
El | zhang | CONTABILIDAD |
El | zhang | INVESTIGACION | 
El | zhang | VENTAS |
El | zhang | OPERACIONES | 
+ ------------ + ------------ + 
60 filas en conjunto (0.29 segundos)

Producto cartesiano

(14 * 4) Cada dato de emp se combina con cada dato de tabla de departamento. Eso es 56 datos.

 Consulta conjunta de varias tablas

El deptno en las dos tablas es igual

mysql> seleccione ename, DNAME de emp, departamento donde emp.deptno = dept.deptno; 
+ -------- + ------------ + 
| esmalte | DNAME | 
+ -------- + ------------ + 
| SMITH | INVESTIGACION | 
El | ALLEN | VENTAS | 
El | WARD | VENTAS | 
El | JONES | INVESTIGACION | 
El | MARTIN | VENTAS | 
El | BLAKE | VENTAS | 
El | CLARK | CONTABILIDAD | 
El | SCOTT | INVESTIGACION | 
El | REY | CONTABILIDAD | 
El | TURNER | VENTAS | 
El | ADAMS | INVESTIGACION | 
El | James | VENTAS | 
El | FORD | INVESTIGACION | 
El | MILLER | CONTABILIDAD | 
+ -------- + ------------ + 
14 filas en conjunto (0.01 seg)

  

Palabra clave j oin = union y  on = condition; consulta ename y dname en la tabla emp y en la tabla dept, consulta los datos correspondientes en emp.deptno = dept.deptno  

mysql> seleccione ename, dname de emp join dept en emp.deptno = dept.deptno; 
+ -------- + ------------ + 
| esmalte | dname | 
+ -------- + ------------ + 
| SMITH | INVESTIGACION | 
El | ALLEN | VENTAS | 
El | WARD | VENTAS | 
El | JONES | INVESTIGACION | 
El | MARTIN | VENTAS | 
El | BLAKE | VENTAS | 
El | CLARK | CONTABILIDAD | 
El | SCOTT | INVESTIGACION | 
El | REY | CONTABILIDAD | 
El | TURNER | VENTAS | 
El | ADAMS | INVESTIGACION | 
El | James | VENTAS | 
El | FORD | INVESTIGACION | 
El | MILLER | CONTABILIDAD | 
+ -------- + ------------ + 
14 filas en conjunto (0.00 seg)

Consultar el nombre de una persona, departamento, nivel salarial

mysql> seleccione ename, DNAME, GRADE de emp join dept join salgrade en emp.deptno = dept.deptno y emp.sal entre losal y hisal; 
+ -------- + ------------ + ------- + 
| esmalte | DNAME | GRADO | 
+ -------- + ------------ + ------- + 
| SMITH | INVESTIGACION | 1 | 
El | ADAMS | INVESTIGACION | 1 | 
El | James | VENTAS | 1 | 
El | WARD | VENTAS | 2 | 
El | MARTIN | VENTAS | 2 | 
El | MILLER | CONTABILIDAD | 2 | 
El | ALLEN | VENTAS | 3 | 
El | TURNER | VENTAS | 3 | 
El | JONES | INVESTIGACION | 4 | 
El | BLAKE | VENTAS | 4 | 
El | CLARK | CONTABILIDAD | 4 | 
El | SCOTT | INVESTIGACION | 4 |
El | FORD | INVESTIGACION | 4 |
El | REY | CONTABILIDAD | 5 | 
+ -------- + ------------ + ------- + 
14 filas en conjunto (0.01 seg)

  

 

Supongo que te gusta

Origin www.cnblogs.com/rdchenxi/p/12683749.html
Recomendado
Clasificación