连接查询

        连接查询:也可以叫跨表查询,需要关联多个表进行查询。

连接分类:

交叉连接

    生成笛卡尔积——它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行一一匹配。

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关键字可以省略。

3全外连接(MySQL中不支持)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值