查询去除空值_SQL数据处理(五):SQL多表查询

5946ae004da9230f9918cb17b5ab0619.png

一. 表的加法

b87f4e64d5b770e4411df3790abafc65.png

加法(union)。合并两张数据表course和course1/去除重复行重合

【select 课程号,课程名称 from course union select 课程号,课程名称 from course1;】
输出结果两个表合并的数据

若要保留重复的行数据(union all)

【select 课程号,课程名称 from course union all select 课程号,课程名称 from course1;】
输出结果两个表合并的数据,保留重复数据

二. 表的联结

2.1 交叉联结(cross jion):笛卡尔积指将表中的每一行逗鱼另一个表中的每一行合并在一起

例如课程表(crouse)和课程表1(crouse1)进行交叉联结得到6行数据

2920c1d7945cd6af08c9c9183f73a8dc.png

2.2 内联结(inner jion):

b7b99885ed8909af0f61542b053e740f.png
  1. 查找出同时存在于两张表中的数据
  2. 例如学生表(student)和成绩表(score)同时存在学号0001
  3. 内联结运行会取出符合条件的行数据
  4. 将取出的数据通过交叉联结进行合并
  5. on 表示某个表的某列与另一个表的某列进行联结的
  • 学生表与成绩表通过学号进行内联结合并为一张表
【select a.学号,a.姓名,b.课程号 from student as a inner join score as b on a.学号 = b.学号;】
输出结果 0001=李彦宏=0001、0001=李彦宏=0002

daa3dd2d87938bd14ad10b474b76edf3.png

2.3 左联结(left jion):

3459cd80dc05bc6b7706beebd0de3745.png
  1. 将左侧的表作为主表,将左侧表中的数据全部读取出来
  2. 将右侧的表中只读取与左侧表同时存在的数据行
  3. 进行交叉联结(合并数据),因为0002学号在右侧表没有对应的数据行显示为空值

-- 学生表与成绩表通过学号进行左联结合并为一张表

【select a.学号,a.姓名,b.课程号 from student as a left join score as b on a.学号 = b.学号;】
输出结果 0001=李彦宏=0001、0001=李彦宏=0002、0002=李彦宏=空值

195984bfbf67a1fc6e8f3813e6f25906.png

获取因为左联结忽略的数据

【select a.学号,a.姓名,b.课程号 from student as a left join score as b on a.学号 = b.学号 where 课程号 is Null;】
输出结果0002=李彦宏=空值

2.4 右联结(right jion):

3cf26ab5b6a9dc65bb375aa111b67807.png
  1. 将右侧的表作为主表,将右侧表中的数据全部读取出来
  2. 将左侧的表中只读取与左侧表同时存在的数据行
  3. 进行交叉联结(合并数据),因为0005学号在右侧表没有对应的数据行显示为空值

-- 学生表与成绩表通过学号进行右联结合并为一张表

【select a.学号,a.姓名,b.课程号 from student as a right join score as bon a.学号 = b.学号 where b.学号 = Null;】
输出结果 0001=李彦宏=0001、0001=李彦宏=0002、空值=空值=0003

2a31095af2eec8d509a5747a566c16cc.png

获取因为右联结忽略的数据

【select a.学号,a.姓名,b.课程号 from student as a right join score as b on a.学号 = b.学号 where a.学号 is Null;】
输出结果空值=空值=课程号

2.5 全联结(full jion):

  1. 全联结会返回左表和右表中的所有数据行
  2. 当两个表中的数据存在匹配的数据行时会进行合并
  3. 若两个表中的数据存在没有匹配的数据行,不存在的值会用空值表示

bff3924b077cf590a804de9c52893e17.png

三. 联结应用案例

46c91f65f24937613874adc641a9a45e.png

61f11a52158fd66d95b349bb28dccbb7.png
  • 查询所有学生的学号,姓名,选课数,总成绩
【select a.学号,a.姓名,count(b.课程号) as 选课数,sum(b.成绩) as 总成绩 
from student as a left join score as b
on a.学号 = b.学号
group by a.学号;】
输出结果0001=李彦宏=2=170、0002=李彦宏=0=空值
  • 查询平均成绩大于60的所有学生的学号、姓名和平均成绩
【select a.学号,a.姓名,avg(b.成绩) as 平均成绩
from student as a left join score as b
on a.学号 = b.学号
group by a.学号
having avg(b.成绩)>60;】
输出结果0001=李彦宏=85
  • 查询学生的选课情况:学号,姓名,选课号,课程名称
【select a.学号,a.姓名,c.课程号,c.课程名称
from student a inner join score b on a.学号=b.学号
inner join course c on b.课程号=c.课程号;】
输出结果0001=李彦宏=0001=语文、0001=李彦宏=0002=数学

四. case表达式

4.1 定义:

使用case表达式可以解决复杂的条件判断,用来判断每一行数据是否满足指定条件

case when <判断表达式> then <表达式>when <判断表达式> then <表达式>when <判断表达式> then <表达式>......else <表达式>
end

若满足“when判断表达式”条件则执行“then表达式”,若不满足则执行下一个“when判断表达式”。若不满足所有的“when判断表达式”则执行“else表达式”

4.2 注意事项

  1. else子句可以不写,此时默认为空值
  2. case子句可以写才SQL语句的子句里面
  3. 当有多种需要条件判断时使用case表达式

4.3 练习题

a370acd3a040f6b395df2fff385e94f7.png
  • 定义成绩数据表中的成绩数据是否及格
【select 学号,课程号,成绩,
(case when 成绩>60 then '及格'when 成绩<=60 then '不及格'else null
end) as 是否及格
from score;】
输出结果0001=0001=80=及格、0001=0002=90=及格、0005=0003=60=不及格
  • 查询每门课程的及格人数和不及格人数
【select 课程号,
sum(case when 成绩>=60 then 1else 0end) as 及格人数,
sum(case when 成绩 < 60 then 1else 0end) as 不及格人数
from score
group by 课程号;】
输出结果0001=1=0、0002=1=0、0003=1=0
  • 使用分段[100-85],(85-70],(70,60],(60,-]来统计各科成绩,分别统计:各分数段的人数,课程号,和课程名称
【select a.课程号,b.课程名称,
sum(case when 成绩 between 85 and 100 then 1 else 0 end) as '[100-85]',                         
sum(case when 成绩>=70 and 成绩<85 then 1 else 0 end) as '[85-70]',                        
sum(case when 成绩>=60 and 成绩<70then 1 else 0 end) as '[70-60]',
sum(case when 成绩<60 then 1 else 0 end) as '[<60]'
from score as a right join course as b
on a.课程号=b.课程号
group by a.课程号,b.课程名称;】

四. 联结总结

文氏图:SQL的联结形式

af7ac071689aa38c4873daaacf258c11.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS Office文档未保存怎么恢复

有时候用WPS Office时&#xff0c;文档还没保存&#xff0c;因为电脑卡死或者关机&#xff0c;再次打开时编辑的内容都不见了&#xff0c;这个时候可以利用WPS自带的备份功能来恢复文档&#xff0c;表格、幻灯片、文档都是可以的。 首先单击WPS左上角的按钮&#xff0c;选择&qu…

LeetCode 664. 奇怪的打印机(区间DP)

文章目录1. 题目2. 解题1. 题目 有台奇怪的打印机有以下两个特殊要求&#xff1a; 打印机每次只能打印由 同一个字符 组成的序列。每次可以在任意起始和结束位置打印新字符&#xff0c;并且会覆盖掉原来已有的字符。 给你一个字符串 s &#xff0c;你的任务是计算这个打印机…

程序闪退怎么运行_苹果应用程序崩溃闪退怎么办?如何解决苹果设备的软故障?...

你们在使用苹果设备的时候是不是经常遇到程序卡死&#xff0c;或者苹果设备假死的情况&#xff1f;如果您遇到程序崩溃闪退或报错的时候&#xff0c;请不要慌张&#xff0c;按照以下方法解决问题。苹果设备它是应用程序问题还是设备故障&#xff1f;首先&#xff0c;您必须弄清…

lxrun不是内部或外部命令_在Win10 安装 WSL的Linux子系统,解决cmd中执行lxrun时提示“不是内部或外部命令”...

Win10 安装Linux子系统原理就是安装一个&#xff08;Linux系统的&#xff09;应用程序。使用应用程序一般的使用Linux子系统&#xff0c;非常方便。第一步&#xff1a;启用开发者模式启用开发者模式&#xff0c;其实很简单&#xff0c;本人参考的是该文章&#xff1a;手把手教你…

LeetCode 1886. 判断矩阵经轮转后是否一致

文章目录1. 题目2. 解题1. 题目 给你两个大小为 n x n 的二进制矩阵 mat 和 target 。 现 以 90 度顺时针轮转 矩阵 mat 中的元素 若干次 &#xff0c;如果能够使 mat 与 target 一致&#xff0c;返回 true &#xff1b; 否则&#xff0c;返回 false 。 示例 1&#xff1a; …

ggplot2中显示坐标轴_qplot()——ggplot2的快速绘图

先前写过几篇用ggplot2进行基本绘图的文章&#xff0c;但对于初学者&#xff0c;或只需绘制简单图形时&#xff0c;这些命令显得繁琐&#xff0c;这里介绍ggplot2中的快速绘图函数qplot(). 此函数相对能较快速便捷地绘制图形。往期文章&#xff1a;张光耀&#xff1a;ggplot2数…

python清洗文本数据_02.数据预处理之清洗文本信息

准备30万条新闻数据编号新闻类别新闻数量(条)1财经370982教育419633科技655344时政630865体育655346娱乐65534yield生成器斐波那契数列介绍和数学描述斐波那契数列算法实现斐波那契数列算法生成器实现算法时间性能对比分析# codingutf-8"""Description&#xff…

学习思考 耐得寂寞 拥得繁华

要么读书&#xff0c;要么旅行&#xff0c;身体和灵魂&#xff0c;必须有一个在路上。 生活不可能像想象得那么好&#xff0c;但也不会像想象得那么糟。我觉得人的脆弱和坚强都超乎自己的想象。有时&#xff0c;我可能脆弱得一句话就泪流满面&#xff0c;有时&#xff0c;也发现…

python比较时间的最大值_时间戳的最大值

我在用3.6.1 |Continuum Analytics, Inc.| (default, May 11 2017, 13:09:58) \n[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]在Windows10机器上运行的Ubuntu16.04VM中。在我把你的ctime调用分解到它的各个部分&#xff0c;去调查&#xff0c;但是我没有达到同样的最大值。在>&g…

LeetCode 879. 盈利计划(动态规划)

文章目录1. 题目2. 解题1. 题目 集团里有 n 名员工&#xff0c;他们可以完成各种各样的工作创造利润。 第 i 种工作会产生 profit[i] 的利润&#xff0c;它要求 group[i] 名成员共同参与。如果成员参与了其中一项工作&#xff0c;就不能参与另一项工作。 工作的任何至少产生…

【Unity】对象池技术

【Unity】对象池技术 1.简介 对象池&#xff08;Object Pooling&#xff09;技术是一种用于优化游戏性能和内存管理的技术。 对象池可以用于各种需要频繁实例化和销毁游戏对象的场景&#xff0c;例如子弹、敌人、玩家等。其主要目标是减少频繁的内存分配和垃圾回收的次数&…

正则邮箱_自己写一个通用的邮箱正则表达式

今天把正则又复习了一遍&#xff0c;为了加深记忆&#xff0c;自己写一个邮箱的正则表达式咱们先来看几个合法的邮箱地址hd33322nat123.commaksim.kim.82d-link.uavova_lazarev1969jaagers.comb4-service.szhaopinmail.com通过观察上面几个例子&#xff0c;不难看出所有邮箱地址…

[css][移动设备]禁止横竖屏时内容自动调整

参考&#xff1a;http://www.kankanews.com/ICkengine/archives/106643.shtml iOS下当竖屏转向横屏的时候&#xff0c;发现内容字体会自动变大&#xff0c;通过各种方法设置字体大小都失败了。 需要在body中设置如下&#xff1a; text-size-adjust: none;-ms-text-size-adjust…

python gettext_python gettext使用

python中使用gettext进行语言国际化的方法1.编辑源代码, 保存为gettextdemo.pyimport gettextcatalogs gettext.find("example", localedir"locale", allTrue)print catalogs:,catalogst gettext.translation(example, "locale", fallbackTrue…

python 数字、字符串与 time时间/日期 的转换

获取当前时间戳 >>> import time >>> num time.time() # 当前时间戳, 7位浮点 >>> type(num) <class float> >>> num 1623302086.1892786数字 转 时间 >>> t time.localtime(num) # 数字 转 时间 >>> type(t…

python基础版课件_python基础课件精编版.ppt

6.10 问题解答 (1)能不能像执行.exe文件那样执行.py文件呢&#xff1f; 在Windows上是不行的&#xff0c;但是&#xff0c;在Mac和Linux上是可以的&#xff0c;方法是在.py文件的第一行加上一个特殊的注释。 (2)在实际项目中&#xff0c;条件语句用的多还是循环语句用的多&…

Convert Windows 32bit dirver to Windows 64bit

Pre-condition: 1.source code(vc6.0WDK based) Development environment: 2.VS2013 3.WDK 8/8.1 Steps: 1.Create a new project. File->New->Visual C->Windows Driver 2.Copy .c and .h source code to project 3.Modify project property xxx属性页->配置属性-…

小程序 模糊查询_[轻应用小程序]如何使用信息查询功能?

本文内容结构如下图一、查询功能是什么&#xff1f;有什么作用&#xff1f;对于企业&#xff0c;会有一些和自身业务相关的数据&#xff0c;需要给到客户提供“查询信息”或“查询缴费”服务。查询信息&#xff1a;学校、培训机构&#xff1a;查询成绩。人力招聘&#xff1a;面…

LeetCode 1887. 使数组元素相等的减少操作次数(map)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;你的目标是令 nums 中的所有元素相等。完成一次减少操作需要遵照下面的几个步骤&#xff1a; 找出 nums 中的 最大 值。记这个值为 largest 并取其下标 i &#xff08;下标从 0 开始计数&#xff09;。如果…

input和output哪个是充电_input是什么接口?告诉大家这个小常识,以后音箱接线更容易...

很多网友都遇到过这样的问题&#xff0c;在电视、电脑、音箱、功放等设备的后面&#xff0c;经常会有很多接口&#xff0c;其中有的接口旁边写着“input”&#xff0c;那么input到底是什么接口呢 &#xff0c;今天就和大家聊聊这个问题。在字面意思来看&#xff0c;“input”翻…