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`

结果如下:

自联接的操作实际上就是两张表都是自己,只不过,这两张表有一种特殊的关系,使得自己可以拆分成两个表

 

posted @ 2022-11-08 22:30  回忆也交给时间  阅读(123)  评论(0编辑  收藏  举报