联表查询
join 对比
-- ================ 联表查询 join ==========================
--查询参加了考试的同学(学号,姓名,科目编号,分数)
/*
SELECT * FROM student;
SELECT * FROM result;
1.分析查询的字段来自哪张表
2.确定使用哪种联接查询
确定交叉点(两个表中哪个数据是相同的)
*/
-- join(连接的表) on(判断条件) 联接查询
-- where 等值查询
SELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student AS s
INNER JOIN result AS r
WHERE s.StudentNo = r.StudentNo
-- ====== right join ====
SELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student s
RIGHT JOIN result r
ON s.StudentNo = r.StudentNo
-- ====== left join ====
SELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student s
LEFT JOIN result r
ON s.StudentNo = r.StudentNo
操作 | 描述 |
---|---|
inner join | 如果表中至少有一个匹配,则返回结果 |
left join | 即使右表中没有匹配,也会从左表中返回值 |
right join | 即使左表中没有匹配,也会从右表中返回值 |
联表思路:
要查询哪些数据 select …
从哪几个表中查 from 表 join 连接表 on 交叉条件
自连接
== 自己的表和自己的表连接,核心:一张表拆为两张一样的表 ==
父类
categoryid | categoryName |
---|---|
2 | 信息技术 |
3 | 软件开发 |
5 | 美术设计 |
子类
pid | categoryid | categoryName |
---|---|---|
3 | 4 | 数据库 |
2 | 8 | 办公信息 |
3 | 6 | web开发 |
5 | 7 | ps技术 |
操作:查询父类对应的子类关系
父类 | 子类 |
---|---|
信息技术 | 办公信息 |
软件开发 | 数据库 |
软件开发 | web开发 |
美术设计 | ps技术 |
-- 查询父子信息:把一张表拆成两张表
SELECT a.`categoryName` AS '父栏目',b.`categoryName` AS '子栏目'
FROM `category` AS a,`category` AS b
WHERE a.`categoryid` = b.`categoryid`