【SQL学习笔记3】JOIN连接

本文介绍了SQL中的JOIN连接,包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN的用法,并强调了在实际应用中应尽量使用小表JOIN大表的原则。通过示例展示了如何查询不同类型的JOIN结果,特别是如何查找A表中但不在B表的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JOIN:通过引用两个或者两个以上的表,从而获取数据。

***实际应用过程中应尽量使用小表join大表,join查询时应注意的点:

-- 只支持等值连接
SELECT a.* FROM a JOIN b ON (a.id = b.id)
   
SELECT a.* FROM a JOIN b 
ON (a.id = b.id AND a.department = b.department)
   
-- 可以 join 多个表
SELECT a.val, b.val, c.val FROM a JOIN b 
ON (a.key = b.key1) JOIN c ON (c.key = b.key2)

JOIN有以下几种用法:

1.(INNER)JOIN:表中至少有一个行匹配,才会返回相应的行,否则不返回:

如下,返回所有同学的语文成绩,如果没有语文成绩则不返回该同学姓名:

select stu_name,grade from
student
join
(select stu_id,grade from course 
join 
grade
on grade.stu_id=course.stu_id
where couname='语文') as a
on student.stu_id=a.stu_id;

2.LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行:

如下:返回所有同学的语文成绩,如果没有语文成绩则只返回该同学姓名

select stu_name,grade from
student
left join
(select stu_id,grade from course 
join 
grade
where couname='语文' and grade.stu_id=course.stu_id) as a
on student.stu_id=a.stu_id;

3.RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行:

如下:返回所有同学的语文成绩,如果没有语文成绩则只返回该同学姓名

select stu_name,grade from
(select stu_id,grade from course 
join 
grade
where couname='语文' and grade.stu_id=course.stu_id) as a
left join
student
on student.stu_id=a.stu_id;

4.FULL JOIN: 只要其中一个表中存在匹配,就返回行:

 

****join的示例用法,查找在A表却不在B表的数据:

-- 统计没有选择数学课的学生姓名
select tsuname from
(select couid from course where couname="数学") t1
join
grade
on 
t1.couid=grade.couid
right join
student
on grade.stuid=student.stuid
where student.stuid is null

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值