联表查询
| 操作符名称 | 描述 |
|---|---|
| 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`

浙公网安备 33010602011771号