SQL语句- 连接(join)

  • left join : 左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
  • right join : 右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
  • inner join : 内连接,又叫等值连接,只返回两个表中连接字段相等的行。
  • full join : 外连接,返回两个表中的行:left join + right join。
  • cross join : 结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

join 例子

查询所有学生以及成绩:

  • student(学生表)

student

  • sc(成绩表)

sc

1
2
3
4
SELECT student.Sname, sc.score FROM student
left JOIN sc
ON student.SId = sc.SId
ORDER BY student.SId;

返回学生名字和成绩,但是有些学生没有考试,没有分数,

这个时候根据 left join原则,还是会返回所有学生名字,只不过后面的分数就是 null 了。

sc

如果把 left join 改成 inner join:

这个时候就不会返回没有考试的学生名字了,

因为INNER JOIN:如果表中有至少一个匹配,则返回行

.jpg)

right join :和left反之。

full join : 相当于 LEFT JOIN +RIGHT JOIN 。


on 和 where 区别

数据库在进行join连接操作时,都会生成一张临时表,然后再将这张表返回给用户

  • 1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
  • 2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
# sql
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×