连接查询概念:
将多张表(大于等于 2 张表)按照某个指定的条件进行数据的拼接,其最终结果记录数可能有变化,但字段数一定会增加。
(1)交叉连接
最后得到的结果是拼在一起的,所谓的笛卡尔积的形式,这个没什么用
select
*
from
student
cross
join
class;
(2)内连接 : 从左表中取出每条数据,和右表中的所有数据进行匹配,当左表和右表的值相同时,结果才保留
select
*
from
student
inner
join
class
on
student.grade =
class
.grade;
(3)外连接:left以左边为主表,right以右边为主表,主表完整显示,另一张表匹配不成功则显示为null
左表 + left\right + join + 右表 + on + 左表.字段 = 右表.字段;
select
s.*,
c.id
as
c_id
,
c.grade
as
c_grade
,room
from
student
as
s
left
join
class
as
c
on
s.grade = c.grade;
注:as 是取别名
(4)自然连接:自动匹配连接条件,系统以两表中同名字段作为匹配条件,分为自然内连接,和自然外连接
A:自然内连接,自动使用同名字段作为连接条件,而且在连接完成之后合并同名字段
select
*
from
student
natural
join
class;
B:自然外连接
select
*
from
student
natural
left
join
class;
C:实际上,自然连接并不常用,咱们可使用内连接和外连接来模拟,模拟的关键在于使用同名字段作为连接条件及合并同名字段
select
*
from
student
left
join
class
using
(id,grade);
using内的字段名是作为连接条件的字段,也是需要合并的同名字段