联表查询知识

15 篇文章 0 订阅
3 篇文章 0 订阅

JOIN 对比

 


-- ================	联表查询 join	=================

-- 查询参加了考试的同学(学号,姓名,科目编号,分数)
SELECT * FROM student
SELECT * FROM result


/*思路
1.分析需求,分析查询的字段来自哪些表,(连接查询)
2.确定使用哪种连接查询?  7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表中 studentNo = 成绩表 studentNo
*/

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 reult r
ON s.studentNO = r.studentNO

-- left Join
SELECT s.studentNO,studentName,SubjectNO,StudentResult
FROM student s
LEFT JOIN reult r
ON s.studentNO = r.studentNO
操作描述
Inner如果表中至少有一个匹配,就返回行
left join会从左表中返回所有的值,即使右表中没有匹配
right join会从右表中返回所有的值,即使左表中没有匹配

join(连接的表) on(判断的条件) 连接查询
where   等值查询 

-- 查询缺考的同学
SELECT s.studentNO,studentName,SubjectNO,StudentResult
FROM student s
LEFT JOIN reult r
ON s.studentNO = r.studentNO
WHERE StudentResult IS NULL
-- ================	联表查询 join	=================

-- 查询参加了考试的同学(学号,姓名,科目编号,分数)
SELECT * FROM student
SELECT * FROM result


/*思路
1.分析需求,分析查询的字段来自哪些表,(连接查询)
2.确定使用哪种连接查询?  7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表中 studentNo = 成绩表 studentNo
*/

-- 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 reult r
ON s.studentNO = r.studentNO

-- left Join
SELECT s.studentNO,studentName,SubjectNO,StudentResult
FROM student s
LEFT JOIN reult r
ON s.studentNO = r.studentNO


-- 查询缺考的同学
SELECT s.studentNO,studentName,SubjectNO,StudentResult
FROM student s
LEFT JOIN reult r
ON s.studentNO = r.studentNO
WHERE StudentResult IS NULL


-- 思考题(查询了参加考试的同学的信息:学号,学生姓名,科目名,分数)
/*思路
1.分析需求,分析查询的字段来自哪些表,student、result、subject(连接查询)
2.确定使用哪种连接查询?  7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表中 studentNo = 成绩表 studentNo
*/
SELECT s.studentNo,studentName,SubjectNo,`StudentResult`
FROM student s
RIGHT JOIN result r
ON r.studentNo = s.student
INNER JOIN `subject` sub
ON r.SubjectNo = sub.SubjectNo

-- 我要查询哪些数据
-- 从哪几个表查 FROM 表  XXX  Join  连接的表  on  交叉条件
-- 假设存在一种多张表查询,慢慢来,先查询两张表然后再慢慢增加

自连接:

        自己的表和自己的表连接,核心:一张表拆为两张一样的表即可

父类

categoryidcategoryName
2信息技术
3软件开发
5美术设计

 子类

pidcategoryidcategoryName
34数据库
28办公信息
36web开发
57美术设计

操作:查询父类对应的子类关系

父类子类
信息技术办公信息
软件开发数据库
软件开发web开发
美术设计ps技术
-- 查询父子信息:把一张表看为两个一模一样的表

SELECT a`categoryName` AS '父栏目',b.`categoryName` AS '子栏目'
FROM `category` AS a,`category` AS b
WHERE a.`categoryid` = b.`pid`

-- 查学员所属的年级(学号,学生的姓名,年级名称)
SELECT studentNo,studentName,`GradeName`
FROM student s
INNER JOIN `grade` g
ON s.`GradeID` = g.`GradeID`

-- 查询科目所属的年级(科目名称,年级名称)
SELECT `SubjectName`,`GradeName`
FROM `subject` sub
INNER JOIN `grade` g
ON sub.`GradeID` = g.`GradeID`


-- 查询了数据库结构-1 考试的同学信息:学号,学生姓名,科目名,分数
SELECT `StudentNo`,`StudentName`,`SujectName`,`StudentResult`
FROM student s
INNER JOIN `result` r
ON s.StudentNo = r.StudentNo
INNER JOIN `subject` sub
ON r.`SubjectNo` = sub.`SubjectNo`
WHERE subjectName = `数据库结构-1`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值