两个表查询有重复_SQL表的联结
1、表的加法 UNION
会把重复的数据删除,只留⼀个
如果要保留重复⾏,在union后⾯加all
练习
2、表的联结
各表之间的关系,关系就是数据库能够对应的匹配,正式的名字叫联结
联结是将通过表表之间的关系,将两个表合并在⼀起
(1)交叉联结
是将表中的每⼀⾏与另⼀个表中的每⼀⾏合并在⼀起,交叉联结表中的⾏数是两个表中⾏数的乘积,交叉联结实际中⽤的较少,但是其他联结的基础。
(2)内联结 inner join
查出同时存在于两个表中的数据
过程:①两个表通过学号进⾏内联结,将两个表中都有的学号所在的⾏取出来
②将两个表中取出的数据合并,交叉联结
练习
(3)左联结 left join
将左侧表中的数据全部取出来
过程:①两个表通过学号产⽣匹配关系,进⾏联结时将左侧表作为主表,主表中的数据全部读取出来,右边表中只选出与左边表中相同学号的⾏
②将两个表中取出的数据进⾏合并,进⾏交叉联结
练习
(4)右联结 right join
将右侧表中的数据全部取出来sql中union多表合并
过程:①两个表通过学号进⾏联结,将右侧表中的数据全部取出来,左边表只选出同右边表相同学号的⾏
②将取出的数据进⾏交叉联结
练习
(5)全联结 full join
返回左表和右表中的所有⾏,当某⾏和另⼀个表中有匹配时,两个⾏进⾏合并,没有匹配时,另⼀个表中对应的地⽅⽤空值填充。
mysql不⽀持全连接
什么情况⽤哪⼀种联结:当实际⼯作业务中想要⽣成固定⾏数的表单,或者特别说明了要哪⼀张表⾥的全部数据时,使⽤左联结或者右联结,其他情况都⽤内联结来获取两个表的公共部分当有多个表进⾏联结时,是在from⾥加⼊联结,不会影响之前学过的SQL运⾏顺序。
3、联结应⽤案例
步骤:①翻译成⼤⽩话 ②写出分析思路 ③写出对应的SQL语句
eg1:查询所有学⽣的学号、姓名、选课数、总成绩
eg2:查询平均成绩⼤于85的所有学⽣的学号,姓名,平均成绩
eg3:查询学⽣的选课情况,学号,姓名,课程号,课程名称
4、case表达式
可以帮助解决复杂的查询问题,case表达的作⽤相当于进⾏条件判断的函数,⽤来判断每⼀⾏是否满⾜某个条件eg1:在查询结果中显⽰成绩是否及格
eg2:查出每门课程的及格⼈数和不及格⼈数
5、练习
注:求得是输⼊德国球门的队员,⽽不是德国射门的球员
主队是德国,或者客队是德国
德国与A队⽐赛,进球的是A对,那么am2 am1='GER' A队与德国⽐赛,进球的是A队,那么am1 am2='GER'
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论