连接查询:也可以叫跨表查询,需要关联多个表进行查询。
连接分类:
一交叉连接
生成笛卡尔积——它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行一一匹配。
mysql> select * from dept cross join emp;
二内连接
相当于在笛卡尔积的基础上,再加上一些匹配条件,得到结果,其结果为笛卡尔积的子集。
1等值连接
查询员工所属部门的部门名称,分析,员工信息在emp表中,而部门信息在dept中,故要连接emp表和dept表,条件为:emp表中的deptno要和dept中deptno相等。
mysql> select e.deptno, e.ename, d.dname from emp e inner join dept d on e.deptno = d.deptno;
+--------+--------+------------+
| deptno | ename | dname |
+--------+--------+------------+
| 10 | CLARK | ACCOUNTING |
| 10 | KING | ACCOUNTING |
| 10 | MILLER | ACCOUNTING |
| 20 | SMITH | RESEARCH |
| 20 | JONES | RESEARCH |
| 20 | SCOTT | RESEARCH |
| 20 | ADAMS | RESEARCH |
| 20 | FORD | RESEARCH |
| 30 | ALLEN | SALES |
| 30 | WARD | SALES |
| 30 | MARTIN | SALES |
| 30 | BLAKE | SALES |
| 30 | TURNER | SALES |
| 30 | JAMES | SALES |
+--------+--------+------------+
等值连接,使用等号来作为连接条件。
2非等值连接
查询员工的工资等级
mysql> select e.ename, s.grade from emp e inner join salgrade s on e.sal between s.losal and s.hisal;
+--------+-------+
| ename | grade |
+--------+-------+
| SMITH | 1 |
| JAMES | 1 |
| ADAMS | 1 |
| WARD | 2 |
| MARTIN | 2 |
| MILLER | 2 |
| TURNER | 3 |
| ALLEN | 3 |
| JONES | 4 |
| BLAKE | 4 |
| CLARK | 4 |
| SCOTT | 4 |
| FORD | 4 |
| KING | 5 |
+--------+-------+
注:其中的关键字inner可以省略不写。
非等值连接:连接条件中使用除等号以外的其他比较运算符。
3自然连接
natural join,通过在两张表里寻找列名和数据类型都相同的字段(长度不管),然后再根据这些相同的字段进行连接(内连接)。并返回所有符合条件的结果。
二外连接
1左外连接
包含左边表的全部行(不管右边的表中是否存在与它们匹配的行)以及右边表中全部匹配的行。
mysql> select e.ename, d.dname from emp e left outer join dept d on e.deptno = d.deptno;
+--------+------------+
| ename | dname |
+--------+------------+
| SMITH | RESEARCH |
| ALLEN | SALES |
| WARD | SALES |
| JONES | RESEARCH |
| MARTIN | SALES |
| BLAKE | SALES |
| CLARK | ACCOUNTING |
| SCOTT | RESEARCH |
| KING | ACCOUNTING |
| TURNER | SALES |
| ADAMS | RESEARCH |
| JAMES | SALES |
| FORD | RESEARCH |
| MILLER | ACCOUNTING |
+--------+------------+
2右外连接
包含右边表的全部行(不管左边的表中是否存在与它们匹配的行)以及左边表中全部匹配的行。
mysql> select e.ename, d.dname from emp e right outer join dept d on e.deptno = d.deptno;
+--------+------------+
| ename | dname |
+--------+------------+
| CLARK | ACCOUNTING |
| KING | ACCOUNTING |
| MILLER | ACCOUNTING |
| SMITH | RESEARCH |
| JONES | RESEARCH |
| SCOTT | RESEARCH |
| ADAMS | RESEARCH |
| FORD | RESEARCH |
| ALLEN | SALES |
| WARD | SALES |
| MARTIN | SALES |
| BLAKE | SALES |
| TURNER | SALES |
| JAMES | SALES |
| NULL | OPERATIONS |
+--------+------------+
注:outer关键字可以省略。