Sous-requête MySQL et requête combinée multi-tables

Sous-requête: il s'agit du résultat d'une requête en tant que source de données ou condition d'une autre requête.

Comment connaître le nom de la personne ayant le salaire le plus élevé?

mysql> sélectionner max (sal) dans emp; --Query le salaire maximum 
+ ---------- + 
| max (sal) | 
+ ---------- + 
| 5000.00 | 
+ ---------- + 
1 ligne dans l'ensemble (0,00 sec) 

mysql> sélectionnez ename, sal de emp où sal = (sélectionnez max (sal) de emp); - le salaire maximum peut être le plus élevé Une condition de filtre, sélectionnez ename, sal de emp est affectée à sal sal après exécution (sélectionnez max (sal) de emp); 
+ ------- + --------- + 
| ename | sal | 
+ ------- + --------- + 
| KING | 5000.00 | 
+ ------- + --------- + 
1 ligne dans l'ensemble ( 0,32 sec) 

mysql> sélectionnez ename, sal de emp où sal = (sélectionnez min (sal) de emp); - Recherchez le salaire minimum 
+ ------- + -------- + 
| ename | sal | 
+ ------- + -------- + 
| SMITH | 800,00 | 
+ ------- + -------- +
1 rangée en jeu (0,00 sec)

Situation de sous-requête; utilisez le résultat de la requête comme condition pour une autre requête

Consultez les entreprises ont des gens qui sont responsables, voir ceux correspondant à la apparaissent empno Gest dans le domaine, qui est le gestionnaire

mysql> sélectionnez mgr dans emp; 查询
+ ------ + 
| mgr | 
+ ------ + 
| 7902 | 
| 7698 | 
| 7698 | 
| 7839 | 
| 7698 | 
| 7839 | 
| 7839 | 
| 7566 | 
| NULL | 
| 7698 | 
| 7788 | 
| 7698 | 
| 7566 | 
| 7782 | 
| NULL | 
+ ------ + 
15 lignes dans l'ensemble (0,00 sec) 

mysql> sélectionner un gestionnaire distinct dans emp; - 去 重
+ ------ + 
| mgr | 
+ ------ + 
| 7902 | 
| 7698 | 
| 7839 | 
| 7566 | 
| NULL | 
| 7788 | 
| 7782 | 
+ ------ + 
7 lignes en jeu (0,00 sec)

mysql> sélectionner un mgr distinct de emp où mgr n'est pas nul; - supprimer la valeur nulle, les informations obtenues par cette instruction sont ce que empno apparaît dans le champ mgr 
+ ------ + 
| mgr | 
+ - + ----- 
| 7902 | 
| 7698 | 
| 7839 | 
| 7566 | 
| 7788 | 
| 7782 | 
+ ------ + 
. 6 en rangées SET (0,01 sec) 
MySQL> SELECT ename, empmo de EMP WHERE empmo dans (sélectionnez un gestionnaire distinct de emp); - Recherchez les personnes de l'entreprise qui sont des gestionnaires dans les mots clés 
+ ------- + ------- + 
| ename | empmo | 
+ ---- --- + ------- + 
| JONES | 7566 | 
| BLAKE | 7698 | 
| CLARK | 7782 | 
| SCOTT | 7788 | 
| KING | 7839 | 
| FORD | 7902 | 
+ ------- + ------- + 
6 lignes en jeu (0,00 sec)
mysql> select ename, empmo from emp where empmo in (select distinct mgr from emp where mgr is not null); 
+ ------- + ------- + 
| ename | empmo | 
+ ------- + ------- + 
| JONES | 7566 | 
| BLAKE | 7698 | 
| CLARK | 7782 | 
| SCOTT | 7788 | 
| KING | 7839 | 
| FORD | 7902 | 
+ ------- + ------- + 
6 lignes en jeu (0,00 sec)

Remarque: Dans les deux cas ci-dessus, un résultat de la requête entière est utilisé comme condition d'une autre requête. Lorsqu'il est utilisé comme condition, la comparaison équivalente et in sont utilisés ici. . Quel département a le salaire moyen le plus élevé trouvé?

1. Le salaire moyen de chaque service doit d'abord être vérifié, les fonctions de groupe ne peuvent pas être imbriquées.

En tant que source de données d'une autre requête, le résultat de la requête peut être considéré comme une table.

Remarque: L'alias doit être utilisé dans le processus d'être une table

mysql> select avg (sal), deptno from emp group by deptno; --Query the average salaire and the correspondante department number 
+ ------------- + -------- + 
| avg (sal) | deptno | 
+ ------------- + -------- + 
| 2356.540000 | NULL | 
| 2916.666667 | 10 | 
| 2175.000000 | 20 | 
| 1566.666667 | 30 | 
+ ------------- + -------- + 
4 lignes en jeu (0,00 sec)    

Requête conjointe multi-tables MySQL

Recherchez le nom de l'employé et le nom du service de l'employé 

mysql> sélectionnez ename, DNAME de emp, dept; 
+ ------------ + ------------ + 
| ename | DNAME | 
+ ------------ + ------------ + 
| SMITH | COMPTABILITÉ | 
| SMITH | RECHERCHE | 
| SMITH | VENTES | 
| SMITH | OPÉRATIONS | 
| ALLEN | COMPTABILITÉ | 
| ALLEN | RECHERCHE | 
| ALLEN | VENTES | 
| ALLEN | OPÉRATIONS | 
| WARD | COMPTABILITÉ | 
| WARD | RECHERCHE | 
| WARD | VENTES | 
| WARD | OPÉRATIONS | 
| JONES | COMPTABILITÉ | 
| JONES | RECHERCHE | 
| JONES | VENTES | 
| JONES | OPÉRATIONS |
| MARTIN | COMPTABILITÉ |
| MARTIN | RECHERCHE | 
| MARTIN | VENTES | 
| MARTIN | OPÉRATIONS | 
| BLAKE | COMPTABILITÉ | 
| BLAKE | RECHERCHE | 
| BLAKE | VENTES | 
| BLAKE | OPÉRATIONS | 
| CLARK | COMPTABILITÉ | 
| CLARK | RECHERCHE | 
| CLARK | VENTES | 
| CLARK | OPÉRATIONS | 
| SCOTT | COMPTABILITÉ | 
| SCOTT | RECHERCHE | 
| SCOTT | VENTES | 
| SCOTT | OPÉRATIONS | 
| KING | COMPTABILITÉ | 
| KING | RECHERCHE | 
| KING | VENTES | 
| KING | OPÉRATIONS |
| TURNER | COMPTABILITÉ | 
| TURNER | RECHERCHE |
| TURNER | VENTES | 
| TURNER | OPÉRATIONS | 
| ADAMS | COMPTABILITÉ | 
| ADAMS | RECHERCHE | 
| ADAMS | VENTES | 
| ADAMS | OPÉRATIONS | 
| JAMES | COMPTABILITÉ | 
| JAMES | RECHERCHE | 
| JAMES | VENTES | 
| JAMES | OPÉRATIONS | 
| FORD | COMPTABILITÉ | 
| FORD | RECHERCHE | 
| FORD | VENTES | 
| FORD | OPÉRATIONS | 
| MILLER | COMPTABILITÉ | 
| MILLER | RECHERCHE | 
| MILLER | VENTES | 
| MILLER | OPÉRATIONS | 
| zhang | COMPTABILITÉ |
| zhang | RECHERCHE | 
| zhang | VENTES |
| zhang | OPÉRATIONS | 
+ ------------ + ------------ + 
60 lignes en set (0,29 sec)

Produit cartésien

(14 * 4) Chaque donnée de emp est combinée avec chaque donnée de table de rayon. C'est 56 données.

 Requête conjointe multi-tables

Le deptno dans les deux tableaux sont égaux

mysql> sélectionnez ename, DNAME de emp, dept où emp.deptno = dept.deptno; 
+ -------- + ------------ + 
| ename | DNAME | 
+ -------- + ------------ + 
| SMITH | RECHERCHE | 
| ALLEN | VENTES | 
| WARD | VENTES | 
| JONES | RECHERCHE | 
| MARTIN | VENTES | 
| BLAKE | VENTES | 
| CLARK | COMPTABILITÉ | 
| SCOTT | RECHERCHE | 
| KING | COMPTABILITÉ | 
| TURNER | VENTES | 
| ADAMS | RECHERCHE | 
| JAMES | VENTES | 
| FORD | RECHERCHE | 
| MILLER | COMPTABILITÉ | 
+ -------- + ------------ + 
14 lignes dans l'ensemble (0,01 sec)

  

Mot-clé j oin = union et  on = condition; requête ename et dname dans la table emp et la table dept, interroge les données correspondantes sur emp.deptno = dept.deptno  

mysql> sélectionnez ename, dname de emp join dept sur emp.deptno = dept.deptno; 
+ -------- + ------------ + 
| ename | dname | 
+ -------- + ------------ + 
| SMITH | RECHERCHE | 
| ALLEN | VENTES | 
| WARD | VENTES | 
| JONES | RECHERCHE | 
| MARTIN | VENTES | 
| BLAKE | VENTES | 
| CLARK | COMPTABILITÉ | 
| SCOTT | RECHERCHE | 
| KING | COMPTABILITÉ | 
| TURNER | VENTES | 
| ADAMS | RECHERCHE | 
| JAMES | VENTES | 
| FORD | RECHERCHE | 
| MILLER | COMPTABILITÉ | 
+ -------- + ------------ + 
14 lignes en jeu (0,00 sec)

Recherchez le nom d'une personne, son service, son niveau de salaire

mysql> sélectionnez ename, DNAME, GRADE de emp join dept join salgrade sur emp.deptno = dept.deptno et emp.sal entre losal et hisal; 
+ -------- + ------------ + ------- + 
| ename | DNAME | GRADE | 
+ -------- + ------------ + ------- + 
| SMITH | RECHERCHE | 1 | 
| ADAMS | RECHERCHE | 1 | 
| JAMES | VENTES | 1 | 
| WARD | VENTES | 2 | 
| MARTIN | VENTES | 2 | 
| MILLER | COMPTABILITÉ | 2 | 
| ALLEN | VENTES | 3 | 
| TURNER | VENTES | 3 | 
| JONES | RECHERCHE | 4 | 
| BLAKE | VENTES | 4 | 
| CLARK | COMPTABILITÉ | 4 | 
| SCOTT | RECHERCHE | 4 |
| FORD | RECHERCHE | 4 |
| KING | COMPTABILITÉ | 5 | 
+ -------- + ------------ + ------- + 
14 lignes en jeu (0,01 sec)

  

 

Je suppose que tu aimes

Origine www.cnblogs.com/rdchenxi/p/12683749.html
conseillé
Classement