联表查询

联表查询

JOIN对比

操作符名称描述
INNER JOIN 只返回两个表中联结字段相等的行
LEFT JOIN 返回包括左表中的所有记录和右表中联结字段相等的记录
RIGHT JOIN 返回包括右表中的所有记录和左表中联结字段相等的记录
-- join(连接的表) on(查询条件) 连接查询
-- where 等值查询

/*
连接查询:
如需要多张数据表的数据进行查询(如查询学生的信息表和查询学生考试成绩的表),则可通过连接运算符实现多个查询

内连接 inner join
查询两个表中结果的交集
外连接 outer join
左外连接 left join
(以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充)
右外连接 right join
(以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充)
*/
/*思路:
(1):分析需求,确定查询的列来源于两个类,student result,连接查询
(2):确定使用哪种连接查询?(内连接)
*/
-- 内连接
SELECT s.`studentno`,`studentname`,`subjectno`,`address`
FROM `student` AS s-- 为两表命名来作为区分
INNER JOIN `result` AS r
ON r.`studentno` = s.`studentno` -- 找两表的相同字段,不然不能连接

-- 右连接
SELECT s.`studentno`,`studentname`,`subjectno`,`address`
FROM `student` s -- AS可以省略
RIGHT JOIN `result` r
ON r.`studentno` = s.`studentno`

--左连接
SELECT s.`studentno`,`studentname`,`subjectno`,`address`
FROM `student` s -- AS可以省略
LEFT JOIN `result` r
ON r.`studentno` = s.`studentno`


-- 查询右边中没有的数据
SELECT s.`studentno`,`studentname`,`subjectno`,`address`
FROM `student` s -- AS可以省略
LEFT JOIN `result` r
ON r.`studentno` = s.`studentno`
WHERE `studentresult` IS NULL

-- 从哪几个表中查:FROM 表 XXX JOIN 连接表 ON 交叉条件
-- 从多张表查询,慢慢来,先查询两张表,再慢慢添加
SELECT s.studentno,studentname,subjectname,StudentResult
FROM `student` s
RIGHT JOIN `result` r
ON s.`studentno` = r.`studentno`
INNER JOIN `subject` sub
ON sub.`subjectno` = r.`subjectno`

 

posted @ 2021-04-23 10:48  术树  阅读(422)  评论(0)    收藏  举报