1.内连接
select 字段名 from 表1 inner join 表2 on 连接条件 --其中inner可以省略,可拓展到3张表以上
示例:
要求:查询员工表和部门表中员工的姓名
select sname from employee join department on employee.id = department.id
可以为表提供别名,如
select sname from employee e join department d on e.id = d.id
2.自连接
自连接是一种特殊的内连接,它是指相互连接的表在物理上是同一张表,但在逻辑上将其看成两张表。要让物理上的一张表在逻辑上成为两张表,必须通过为表取别名的方式实现。
示例:
要求:查询与张三在同一个系学习的学生的姓名和所在系,结果中不包括张三。
select s2.name,s2.dept from student s1 join student s2
on s1.dept = s2.dept --是同一系的学生
where s1.name = '张三' --s1表作为查询条件表
and s2.name != '张三' --s2表作为结果表,并从中去掉 '张三'
要求:查询与“操作系统”学分相同的课程名和学分
select c1.name,c1.credit from course c1 join course s2
on c1.credit = c2.credit --学分相同
where c2.name = '操作系统' --c2作为查询条件表
3.外连接
在内连接中,只有满足连接条件的元组才能作为结果输出,但有时我们希望输出那些不满足连接条件的元组信息,比如查看全部课程的被选修情况,包括有学生选的课程和没有学生选的课程。如果用内连接实现,则只能找到有学生选的课程,因为内连接的结果首先是要满足连接条件。
外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件。
语句:
from 表1 left | right join 表2 on 连接条件
left即为左连接,其含义是限制表2中的数据必须满足连接条件,而不管表1中的数据是否满足连接条件;
right即为右连接,其含义是限制表1中的数据必须满足连接条件,而不管表2中的数据是否满足连接条件;
简记:指向哪一个,哪一个就没有限制。left 左 表1没有限制,right 右 表2没有限制。