- 内连接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。
首先说明内连接的一个重要性质:内连接查询结果与表的顺序无关
(当然顺序可能会发生变化,但是对应关系绝对不会错乱!!!)
1.1 交叉连接(cross join)
当然,他还有其他的名字,比如:笛卡尔积,交叉积,还有最奇怪的名字“没有连接”(no join)
select s.Sname,c.Cname
from student s
CROSS JOIN
course c;
其中,CROSS JOIN可以省略,简写为
select s.Sname,c.Cname
from student s , course c;
交叉连接会把第一张表的每个值与第二张表的每个值进行匹配,结果如下
1.2相等连接
每个课程对应一位老师 Tno 是外键
我们想找到每个课程的老师是谁,只需要将course表中的Tno和Teacher中的主键进行比对,就会得到结果
select c.Cname,T.Tname
from course c inner join Teacher t
on c.Tno=T.Tno
1.3 不等连接
我们继续沿用1.2中的表结构,如果我们想找到每个老师不教授的课程,这时候我们可以使用不等连接(说白了就是=换成<>,其他没有什么区别)
select c.Cname,T.Tname
from Teacher t inner join course c
on c.Tno<>T.Tno
结果:
1.4 自然连接
继续沿用1.2的表结构
注意:自然连接只有在连接的列在两张表中的名称都相同时才会有用
其实,自然连接就是自动识别相同列的相等连接
SELECT course.Cname,Teacher.Tname
FROM teacher
NATURAL JOIN
course
ORDER BY course.Cname;
得到的结果和1.2中的结果完全一样(顺序可能不同)
- 外连接
首先说明外连接不同于内连接的一个性质:外连接查询与表的顺序有关
2.1 左外连接 LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
select * from
teacher left JOIN course
on course.Tno=Teacher.Tno;
说明:
left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。
左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
2.2 右外连接 RIGHT JOIN 或 RIGHT OUTER JOIN
右外连接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
select * from
course right JOIN teacher
on course.Tno=Teacher.Tno;
说明:
right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。
与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
2.3 全连接(全外连接)full join 或 full outer join
MySQL目前不支持此种方式,可以用其他方式替代解决。