MySql - 基础学习 - 联表查询
一.联表查询
-- 联表查询 /* 思路 1.需求分析,分析查询的字段来自于那张表(连接查询) 2.确定使用那种查询方式 3.确定交叉点(两张表中什么数据是相同的) 4.判断条件`student` */ -- inner join SELECT s.`id`,`name`,`paw`,`gradename` FROM student AS s INNER JOIN grade AS g ON s.id=g.`gradeid` -- right join SELECT s.`id`,`name`,`paw`,`gradename` FROM student AS s RIGHT JOIN grade AS g ON s.id=g.`gradeid` -- left join SELECT s.`id`,`name`,`paw`,`gradename` FROM student AS s LEFT JOIN grade AS g ON s.id=g.`gradeid`
操作 | 描述 |
inner join | 如果表两个都有,就返回 |
left join | 会从左边中返回值,即使右表中没有匹配的值 |
right join | 会从右边中返回值,即使左表中没有匹配的值 |
join(连接的表) on(判断条件) 连接查询
where 等值查询
on和where可以联用
一般join 后面直接跟着on
SELECT s.`id`,`name`,`paw`,`gradename` FROM student AS s LEFT JOIN grade AS g ON s.id=g.`gradeid` WHERE gradename IS NULL
三表查询
SELECT s.`id`,st.`name`,`gradename`,st.`sex` FROM student AS s LEFT JOIN grade AS g ON s.id = g.gradeid RIGHT JOIN stdent1 AS st ON s.id=st.id
不管是几表查询,都要记住我们的思路,要查询n张表中,我们要最先建立两张表联查,然后再增加,一步一步的慢慢增加查询
1.需求分析,分析查询的字段来自于那张表(连接查询)
2.确定使用那种查询方式
3.确定交叉点(两张表中什么数据是相同的)on
4.判断条件 where
二.自联接
自己和自己的表连接,核心:把一张表拆成两张表
父类
categoryid | categoryName |
2 | 信息技术 |
3 | 软件开发 |
5 | 美术设计 |
子类
pid(父id) | categoryid | categoryName |
3 | 4 | 数据库 |
2 | 8 | 办公信息 |
3 | 6 | web开发 |
5 | 7 | 美术设计 |
操作:查询父类对应的子类关系
父类 | 子类 |
信息技术 | 办公信息 |
软件开发 | 数据库 |
软件开发 | web开发 |
美术设计 | ps技术 |
SELECT a.`categoryName` AS '父栏目',b.`categoryName` AS '子栏目' FROM `category` AS a INNER JOIN `category` AS b ON a.`categoryid`=b.`pid`
结果如下:
自联接的操作实际上就是两张表都是自己,只不过,这两张表有一种特殊的关系,使得自己可以拆分成两个表