两个表查询有重复_SQL表的联结

本文介绍了SQL中表的加法UNION及其变体,重点讲解了交叉联结、内联结、左联结、右联结的概念及应用场景,并通过实例演示了如何使用这些联结方式。此外,还探讨了CASE表达式在解决复杂查询问题中的作用,提供了多个实战案例以加深理解。

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

1、表的加法 UNION

  • 会把重复的数据删除,只留一个
  • 如果要保留重复行,在union后面加all
  • 练习

6c59db61697140463fa153efb5466bb2.png

2、表的联结

  • 各表之间的关系,关系就是数据库能够对应的匹配,正式的名字叫联结
  • 联结是将通过表表之间的关系,将两个表合并在一起

(1)交叉联结

  • 是将表中的每一行与另一个表中的每一行合并在一起,交叉联结表中的行数是两个表中行数的乘积,交叉联结实际中用的较少,但是其他联结的基础。

(2)内联结 inner join

  • 查找出同时存在于两个表中的数据
  • 过程:①两个表通过学号进行内联结,将两个表中都有的学号所在的行取出来

②将两个表中取出的数据合并,交叉联结

  • 练习

395063f8fcf42389feb89af8c7ab5074.png

(3)左联结 left join

  • 将左侧表中的数据全部取出来
  • 过程:①两个表通过学号产生匹配关系,进行联结时将左侧表作为主表,主表中的数据全部读取出来,右边表中只选出与左边表中相同学号的行

②将两个表中取出的数据进行合并,进行交叉联结

  • 练习

e21677d40b4f6d386b6d8b7b8dd14052.png

(4)右联结 right join

  • 将右侧表中的数据全部取出来
  • 过程:①两个表通过学号进行联结,将右侧表中的数据全部取出来,左边表只选出同右边表相同学号的行

②将取出的数据进行交叉联结

  • 练习

fd4240b1e15ebdbbebf8b44671c66c19.png

(5)全联结 full join

  • 返回左表和右表中的所有行,当某行和另一个表中有匹配时,两个行进行合并,没有匹配时,另一个表中对应的地方用空值填充。
  • mysql不支持全连接

什么情况用哪一种联结:当实际工作业务中想要生成固定行数的表单,或者特别说明了要哪一张表里的全部数据时,使用左联结或者右联结,其他情况都用内联结来获取两个表的公共部分当有多个表进行联结时,是在from里加入联结,不会影响之前学过的SQL运行顺序。

3、联结应用案例

  • 步骤:①翻译成大白话 ②写出分析思路 ③写出对应的SQL语句
  • eg1:查询所有学生的学号、姓名、选课数、总成绩

432f141bc3727db0b83feaaffaedb920.png
  • eg2:查询平均成绩大于85的所有学生的学号,姓名,平均成绩

59fd4f99aa0588ecc6a4913a8adf444f.png
  • eg3:查询学生的选课情况,学号,姓名,课程号,课程名称

fc9048b198cde1430d010b69774be7af.png

4、case表达式

  • 可以帮助解决复杂的查询问题,case表达的作用相当于进行条件判断的函数,用来判断每一行是否满足某个条件
  • eg1:在查询结果中显示成绩是否及格

9198d232a34699220247add20a3d5b4f.png

eg2:查出每门课程的及格人数和不及格人数

46ec3a6f4a868c5c5a3dbbb8f23d9261.png

5、 练习

4d0a8420f9e7f1df4a04a55aa82e1fa3.png

d243a4ef81076c23f356f3f406534c00.png

cd7f4899cd2a863c87e992f9b772327d.png

04c96697cdcdf0a48a0bad820c9fe358.png

49d527b0b119d1e6275381bf5af32b5e.png

a3be0b854380981a77cef708d6a0f6ad.png

ee03f9512fea861092358680f1c8e02e.png

4cdd0e501328d9de5de1ed769752f08f.png

注:求得是输入德国球门的队员,而不是德国射门的球员

主队是德国,或者客队是德国

德国与A队比赛,进球的是A对,那么goal.teamid=game.team2 and game.team1='GER'

A队与德国比赛,进球的是A队,那么goal.teamid=game.team1 and game.team2='GER'

8a83590e9af6d2d48e4e6e3a4cd42f9f.png

c5434abd979591e3cbf51923d7661d9f.png

a6d3012753585efc3158c6dc7b3c7c95.png

0cc271f769b643e907276ea598bb047a.png

4156a887f049ba8d448f5d83c132b477.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值