MySQL内连接和外连接
MySQL的连接种类分为:
内连接:只连接匹配的行
外连接:
左外连接:连接中左边的表不加限制,在结果集中保留连接表达式左表中非匹配记录。
右外连接:连接中右边的表不加限制,在结果集中保留连接表达式右表中非匹配记录。
全外连接:两个表都不加限制,两个表中的行都会包括在结果集中。
自连接:连接操作不只是在不同的表之间进行,一张表中还可以进行自身连接操作,
同一表的不同行连接起来。在连接中,必须为指定的表取别名,使之在逻辑上成为两张表。
交叉连接:两个表之间进行迪卡儿积操作,得到的结果集的行数是两个表的行数的乘积。
如下例子:
student表
(https://img-blog.csdn.net/20160820195649621)
course表
(https://img-blog.csdn.net/20160820195751482)
sc表
(https://img-blog.csdn.net/20160820195843403)
交叉连接:
select A.* , B.* from course A, student B;
(https://img-blog.csdn.net/20160820200024188)
内连接:
(1)内连接的有两种指定条件的方式,一种是在where子句中指定,一种是在from子句中指定。
(2)from后可以跟多个表,表名与表名之间用空格间隔。
(3)当连接类型在where子句中指定是,where后一定要有连接条件表达式,即两个表的公共字段相等。
(4)若不定义别名,表的别名默认为表名,定义别名后使用定义的别名。
(5)若在输出列或条件表达式中出现两个表的公共字段,则在公共字段名前必须加别名。
(6)在省略inner字段时,默认是内连接。
输出所有女学生的学号,姓名,课程号及成绩(方式一)
select A.sno , sname, cno, degree from student A, sc B where A.sno = B.sno and ssex = '女';
(https://img-blog.csdn.net/20160820201929339)
方式二
select A.sno, sname, cno, degree from student A inner join sc B on A.sno = B.sno where ssex = '女';