一.表的加法

相加就是用union把两个select语句相加,会去重;如果需要保留重复的行,用union all就可以了

二.表的联结

联结的几种类型:

1.交叉联结 2.内联结 3.左联结 4.右联结 5.全联结

一.交叉联结 cross join(笛卡尔积)

两个表的行数相乘就是最终的行数

在实际运用中很少用到,因为数据太多了,占用大量的设备空间,但是是后面所有联结的基础。

二.内联结 inner join

查找出同时存在于两张表中的数据,用文氏图去记忆更直观

select a.学号,a.姓名,b.课程号

from student as a inner join score as b

on a.学号=b.学号;

二.左联结 left join

查找出左侧表中的数据,用文氏图记忆

三.右联结 right join

将右侧表中的数据全部取出来,文氏图右边的圈

四.全联结 full join

Mysql不支持全联结

当需要某个表的表头或者特别指明要某个表的数据时,用 left join 或者 right join

其他情况用inner join

以下是重点:

如何用sql解决实际问题

问题:查询所有学生的学号、姓名、选课数、总成绩

1.学号、姓名(学生表student)

2.选课数(成绩表score按学号分组,对课程号计数count)

3.总成绩(成绩表,按学号分组,对成绩求和sum)

select a.学号,a.姓名,count(b.课程号) as 选课数,sum(b.成绩) as 总成绩

from

student as a left join score as b

on a.学号=b.学号

group by a.学号;

问题:查询平均成绩大于85的所有学生的学号、姓名、平均成绩

1.学号、姓名(学生表student)

2.平均成绩 (avg(成绩)score 需要group by 学号 分组后再筛选平均成绩用having)

select a.学号,a.姓名,avg(b.成绩) as 平均成绩

from student as a left join score as b

on a.学号=b.学号

group by a.学号

having avg(b.成绩)>85;

问题:查询学生的选课情况:学号、姓名、课程号、课程名称

1.学号、姓名(student)

2.课程号,课程名称(score、course)

select a.学号,a.姓名,c.课程号,c.课程名称

from

student as a inner join score as b on a.学号=b.学号

inner join course as c on b.课程号=c.课程号;

case表达式

相当于进行条件判断的函数,用来判断每一行是不是满足某个条件

case when<判断表达式> then<表达式>

when<判断表达式> then<表达式>

when<判断表达式> then<表达式>

---

else<表达式>

end

内部运行逻辑:

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

select 课程号,

sum(case when 成绩>=60 then 1

else 0

end) as 及格人数,

sum(case when 成绩<60 then 1

else 0

end) as 不及格人数

from score

group by 课程号;

运行过程:

case表达式的注意事项

1.else表达式可以不写,视为null,建议不要省略

2.case表达式可以写在sql语句的任意子句里面

案例:

使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:

各分数段人数,课程号,课程名称

1的地方容易忘记加;2的地方可加可不加

sql 相加_SQL多表查询相关推荐

  1. SQL 语句的多表查询方式

    SQL 语句的多表查询方式 例如:按照 department_id 查询 employees(员工表)和 departments(部门表) 的信息. 方式一(通用型): SELECT ... FROM ...

  2. Apache Drill介绍-SQL语句和系统表查询

    Apache Drill介绍-SQL语句和系统表查询 Apache Drill 主要用于查询,主要关注select 和 建表语句,Drill 支持select 很标准, 这次主要介绍create语句, ...

  3. sql 相加_SQL经典题型

    SQL内容及常见面试题如下: 以下为具体的面试题内容和答案 一.简单查询题目 查询姓"猴"的学生名单 查询姓名中最后一个字是"猴"的学生名单 查询姓名中带&qu ...

  4. 查询去除空值_SQL多表查询

    表的加法 union 去除重复行 union all保留重复行 union的用法 union all的用法 表的联结 交叉联结也称笛卡尔积,是将表中的每一行都与另一张表的所有行合并在一起 内联结是将两 ...

  5. SQL语言之多表查询(oracle)

    多表查询 当查询的数据并不是来源一个表时,需要使用多表连接操作完成查询.根据不同表中的 数据之间的关系查询相关联的数据. 一.笛卡尔乘积(Cartesian product) 在数学中,两个集合x和y ...

  6. mysql多表查询sql语句怎么写_MySQL基本SQL语句之单表查询、多表查询和子查询

    一.简单查询: 基本语法: SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * F ...

  7. 修改 连接层_Mybatis连接池_动态sql语句_多表查询实现

    Mybatis连接池 Mybatis中的连接池Mybatis连接池提供了3种方式的配置:配置的位置:主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种 ...

  8. inner join去除重复_SQL多表查询:join表联结

    在之前的学习和练习中,所有的操作都是在一张表中进行操作,实际工作中,我们期望得到的数据往往分散在不同的表中,今天我将带大家一起学会从多张表中获取数据. 一.表的加法 表的加法在SQL语句中用union ...

  9. mysql连接查询分为几种方式_SQL多表查询的几种连接方式

    一.基础 1.1 SQL查询的基本原理 第一.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果. 第二.两 ...

最新文章

  1. 仓库管理员怎样做台账_工作日志之仓库管理员与会计之间的对接工作
  2. 黄聪:C#编写的Word操作类,有换页,添加表格,文本功能
  3. 软件c#语言调用摄像头,C#调用摄像头的几种方式
  4. Android中的Touch事件处理流程
  5. 终端进入网页_华为云进入IDC MarketScape终端安全检测与响应市场领导者象限
  6. IDEA怎么导入一个maven项目
  7. 【libmodbus-vs2019】测试使用
  8. HTML + CSS实现图片3D旋转效果
  9. 小米手机与计算机如何连接网络连接,小米手机连接不上电脑怎么办 图文教你小米手机怎么连接电脑...
  10. 《人力资源视角下的企业数字化转型》高峰圆桌论坛圆满闭幕
  11. window系统下添加路由的方法
  12. python新闻内容爬虫专用包newspaper详细教程
  13. 网上商城小程序(小程序+PHP)
  14. Qt字体族FontFamily一览表
  15. C++如何定义一个长度超过一百万的整型数组
  16. [Fatal Error] total number of created files now is 100576, which exceeds 100000. Killing the job.
  17. linux mplayer 一键安装,在 Linux 中安装 MPlayer
  18. BSN区块链服务网络底十六章
  19. Java 模拟58登录
  20. 3D游戏作业7:巡逻兵

热门文章

  1. Mysql的coalesce
  2. 南京晓庄学院java实验五_讲座|城市文化与南京世界“文学之都”的建设
  3. 解决centos6.5出现-bash: mysql: command not found的方法
  4. java函数ao活动对象_[AO] AO全面介绍
  5. mysql 服务端是否正常运行_如何确定mysql是否正常运行?(问题已解决:结帖)
  6. linux系统安装文网卫士,360主机卫士 Linux 版本 安装
  7. java oracle.sql.struct转字符串_把Oracle查询结果的一列转换为一字符串
  8. canvas整体放大_【HTML5】Canvas 实现放大镜效果
  9. chroot环境怎么重启linux,linux下简易chroot环境的塔建
  10. java比较map_java-比较hashMap值