赞
踩
连接查询分为:内连接(相等内连接,非等内连接,自连接),外连接(左外连接,右外连接,全外连接),交叉连接,自然连接
一、内连接
1、相等内连接(使用等号(=)指定连接条件的连接查询)
①使用WHERE关键字的连接查询
select *
from 表1,表2
where 表1.字段1=表2.字段1;
②使用JOIN关键字的连接查询--------- [inner] join on
select *
from 表1 [inner] join 表2 on 表1.字段1=表2.字段1;
说明:使用JOIN关键字的内连接与使用WHERE子句的连接查询等价,即查询结果中只包含两个表中相匹配的行。在ON后面给出的连接条件使用等号(=)运算符比较被连接的两张表的公共字段,其查询结果中只包含两表的公共字段值相等的行,列可以是两表中任意列。
例如:
显示雇员的名称和所在的部门的编号和名称。
执行以下查询:
- SELECT ename,emp.deptno,dname FROM emp JOIN dept
-
- ON emp.deptno=dept.deptno;
2、非等值连接(非等内连接是在连接条件中使用除“=”运算符以外的其它运算符比较被连接的公共字段。)
例:
显示雇员名称,工资和所属工资等级。
执行以下查询:
- SELECT e.ename,e.sal,s.grade FROM emp e,salgrade s
-
- WHERE e.sal BETWEEN s.losal AND s.hisal;
3、自连接(自连接就是一个表,同本身进行连接。使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。)
例:
显示雇员名称和雇员的经理名称。
执行以下查询:
- SELECT worker.ename||’的经理是’||manager.ename AS 雇员经理
-
- FROM emp worker,emp manager
-
- WHERE worker.mgr=manager.empno;
执行结果为:
二、外连接
1、左外连接(左侧的表中的全部数据都会被显示出来,但是右侧表的数据,
只有和左侧匹配上的字段才会被查询出来!否则都会显示null!)
图示:
①使用WHERE关键字的左外连接查询
例:
显示雇员的名称、工资和所在的部门名称及没有属于任何部门的雇员。
执行以下查询:
- SELECT ename,sal,dname FROM emp,dept
-
- WHERE emp.deptno=dept.deptno(+);
--------注:emp表为主表
执行结果为:
②使用LEFT JOIN或LEFT OUTER JOIN关键字的左外连接查询
上述操作可变为:
- SELECT ename,sal,dname FROM emp LEFT JOIN dept
-
- ON emp.deptno=dept.deptno;
2、右外连接( 右侧的表中的全部数据都会被显示出来,但是左侧表的数据,
只有和右侧匹配上的字段才会被查询出来!否则都会显示null!)
图示:
①使用WHERE关键字的右外连接查询
例:
显示雇员的名称、工资和所在的部门名称及没有任何雇员的部门。
执行以下查询:
- SELECT ename,sal,dname FROM emp,dept
-
- WHERE emp.deptno(+)=dept.deptno;
执行结果为:
②使用RIGHT JOIN或RIGHT OUTER JOIN关键字的右外连接查询
上述操作变为:
- SELECT ename,sal,dname FROM emp RIGHT JOIN dept
-
- ON emp.deptno=dept.deptno;
3、全外连接(这种是左外连接和右外连接的并集,可完全显示两个表,且没有匹配的记录为空。)
-------full/all outer join
图示:
例:
使用emp表和dept表执行完全外连接查询。
- SELECT ename,sal,dname FROM emp FULL JOIN dept
-
- ON emp.deptno=dept.deptno;
执行结果为:
三、交叉连接(表与表之间做笛卡尔积查询!,交叉连接不带ON子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到 结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查 询条件的数据行数。)
例:
select * from emp cross join dept;
等同于:
select * from emp ,dept;
四、自然连接(属性值相同的就保留下来,如果属性值不相同则去掉,连接后的表的属性值个数为原来两个表的属性之和减去公共属性的个数,如果两个表没公共属性则自然连接就是笛卡尔乘积。)
select * from emp NATURAL join dept;
等同于:
select * from empt, dept where emp.deptno=dept.deptno;
参考博客:https://blog.csdn.net/u013044310/article/details/82258530
https://blog.csdn.net/qq_36249352/article/details/79649119
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。