语法1:select f1,f2,f3...
from table1 inner join table2
on 关联匹配条件
语法2: select f1,f2,f3...
from table1,table2,table3
where 关联匹配条件
内连接查询中一种特殊的等值连接,所谓的自连接就是指表与其自己当前表进行连接。自己和自己做连接
例子:查询员工表,查询每一个员工的姓名、员工的职位和领导的姓名。
分析:
t_employee e 员工表
t_employee m 领导表
关联条件 e.MGR=m.empno
select e.ename,e.job,m.ename
from t_employee e inner join t_employee m
on e.MGR=m.empno;
另一种写法:
select e.ename,e.job,m.ename
from t_employee e,t_employee m
where e.MGR=m.empno;
(2)等值连接
就是在关键字on后的匹配条件是通过=来实现的;
自连接是一种特殊的等值连接。自连接是自己连接自己,等值连接通常是一个表连接另外一张表。
例子:查询部门名称,部门的所在地,员工的编号和员工的姓名。
分析:
t_employee e 员工表
t_dept d 部门表
关联条件 员工表.deptno=部门表.deptno
e.deptno=d.deptno
select d.dname,d.loc,e.empno,e.ename
from t_employee e inner join t_dept d
on e.deptno=d.deptno;
select d.dname,d.loc,e.empno,e.ename
from t_employee e,t_dept d
where e.deptno=d.deptno;
(3)不等值连接
在关键字on后匹配条件中使用除了=以外的关系运算符实现的不等条件(> >= < <= !=)
例子:查询员工编号大于其领导的编号的每个员工姓名,职位和领导姓名。
step1:查询所有员工编号,姓名,领导者编号,领导姓名和 领导的员工编号。
step2:在加上员工编号大于领导的员工编号条件分析:判断条件 e.empno>m.empno
select e.empno,e.ename,e.MGR,m.ename,m.empno
from t_employee e inner join t_employee m
on e.MGR=m.empno and e.empno>m.empno;
select e.empno,e.ename,e.MGR,m.ename,m.empno
from t_employee e, t_employee m
where e.MGR=m.empno and e.empno>m.empno;
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION
select * from test where id<4
union
select * from student where id>2 and id<6
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
select * from test where id<4
union all
select * from student where id>2 and id<6