stydent
course
外连接: 左连接,右连接,完全外连接
- 左连接
from 表1 left join 表2 on 条件( left join 或 left outer join)
select * from student left join course on student.ID=course.ID
左外连接left join包含左边所有行,如果左边某行在右边没有匹配,则结果对应的右表中为空(null)
例:
- 右连接
from 表1 right join 表2 on 条件( right join 或 right outer join)
select * from student right join course on student.ID=course.ID
右外连接right join包含右边所有行,如果右边某行在左边没有匹配,则结果对应的左表中为空(null)
例:
- 完全外连接
from 表1 full join 表2 on 条件(full join 或 full outer join)
select * from student full join course on student.ID=course.ID
完全外连接包含full join左右两表中所有的行,如果右表中某行在左表中没有匹配,则结果中对应行右表的部分全部为空(NULL),如果左表中某行在右表中没有匹配,则结果中对应行左表的部分全部为空(NULL)
例:
- 内连接
from 表1 inner join 表2 on 条件(join 或 inner join)
select * from student inner join course on student.ID=course.ID
inner join 是比较运算符,只返回符合条件的行
例:
- 交叉连接
cross join 概念:没有where子句的交叉连接将产生连接所涉及的表的笛卡尔积(笛卡尔积是第一个表行数乘以第二个表行数积的大小)
select * from student cross join course
例:
如果此时给sql语句加上where子句,执行之后的结果和上述结果一致
- 多对多
当两张表是多对多的关系的时候,需要建一张中间表,中间表中至少需要包含两张表的主键,当然,也可以包含其他
student_course
select s.Name,C.Cname from student_course as sc left join student as s on s.Sno=sc.Sno left join course as c on c.Cno=sc.Cno
例: