十、连接查询

10.1、SQL92语法
连接查询:也可以叫跨表查询,需要关联多个表进行查询
(1) 显示每个员工信息,并显示所属的部门名称
十、连接查询

十、连接查询

以上输出,不正确,输出了56条数据,其实就是两个表记录的乘积,这种情况我们称为:“笛卡儿乘积”,出现错误的原因是:没有指定连接条件

(2)指定连接条件

十、连接查询

以上结果输出正确,因为加入了正确的连接条件
以上查询也称为 “内连接”,只查询相等的数据(连接条件相等的数据)

(3)取得员工和所属的领导的姓名

十、连接查询

以上称为“自连接”,只有一张表连接,具体的查询方法,把一张表看作两张表即可,如以上示例:第一个表emp e代码了员工表,emp m代表了领导表,相当于员工表和部门表一样.

10.2、SQL99语法
(内连接)显示薪水大于2000的员工信息,并显示所属的部门名称

采用SQL92语法:
select e.ename, e.sal, d.dname from emp e, dept d where e.deptno=d.deptno and  e.sal > 2000;
采用SQL99语法:
select e.ename, e.sal, d.dname from emp e join dept d on e.deptno=d.deptno where e.sal>2000;

select e.ename, e.sal, d.dname from emp e inner join dept d on e.deptno=d.deptno where e.sal>2000;
在实际中一般不加inner关键字
 

十、连接查询

十、连接查询

Sql92语法和sql99语法的区别:99语法可以做到表的连接和查询条件分离,特别是多个表进行连接的时候,会比sql92更清晰.

(外连接)显示员工信息,并显示所属的部门名称,如果某一个部门没有员工,那么该部门也必须显示出来

右连接: 连接右边,主表在左
select e.ename, e.sal, d.dname from emp e right join dept d on e.deptno=d.deptno;
左连接:连接左边,主表在右
select e.ename, e.sal, d.dname from dept d left join emp e on e.deptno=d.deptno;
以上两个查询效果相同

十、连接查询 

十、连接查询

总结:

连接分类:
1、内链接
* 表1  inner join  表2  on  关联条件
*  做连接查询的时候一定要写上关联条件
*  inner 可以省略


2、外连接
*左外连接
* 表1  left  outer  join  表2  on  关联条件
*  做连接查询的时候一定要写上关联条件
*  outer  可以省略

*右外连接
* 表1  right  outer  join  表2  on  关联条件
*  做连接查询的时候一定要写上关联条件
*  outer  可以省略
*左外连接(左连接)和右外连接(右连接)的区别:
*左连接以左面的表为准和右边的表比较,和左表相等的不相等都会显示出来,右表符合条件的显示,不符合条件的不显示
*右连接恰恰相反,以上左连接和右连接也可以加入outer关键字,但一般不建议这种写法,