4.4联表查询
操作 | 描述 |
---|---|
inner join | 如果表中有一个匹配就返回 |
left join | 以left左边的表为基准,把on的所有条件作为匹配条件,不符合的右表内容都为null。 |
right join | 以right右边的表为基准,把on的所有条件作为匹配条件,不符合的左表内容都为null。 |
注意:
如果你使用 LEFT JOIN 来寻找在一些表中不存在的记录,你需要做下面的测试:WHERE 部分的
字段内容 IS NULL,MYSQL 在查询到一条匹配 LEFT JOIN 条件后将停止搜索更多行(在一个特定的组合键下)。
-- ***************联表查询*****************
# 1.分析需求 ,分析查询的字段来自哪些表
# 2.确定连接查询的方式(left , right , inner)
# 3.过滤条件(on....)
-- inner join ... on
SELECT s.studentNo,studentresult,studentName FROM `student` AS `s`
INNER JOIN `result` AS `r`
ON s.studentNo=r.studentNo;
-- left join ... on
SELECT s.studentNo,studentresult,studentName FROM `student` AS `s`
LEFT JOIN `result` AS `r`
ON s.studentNo=r.studentNo;
-- right join ... on
SELECT s.studentNo,studentresult,studentName FROM `student` AS `s`
RIGHT JOIN `result` AS `r`
ON s.studentNo=r.studentNo;
总结:
用什么方式连接,就以哪边为基准,结果为哪边的全部信息以及符合on条件的哪边信息。
回顾一下left join的定义,左边表会返回所有行,所以left join如果对左边表进行约束的话是不会生效的;但是,对left join的右边表添加条件的话是生效的!反之,right join 同理!
如果认为LEFT JOIN的 On后面跟的条件和写在Where后面一样,那你就错了