一、表的加法

union:将多个表的数据记录按行合并在一起(即多个表的并集),同时返回的结果会删除重复行,重复的记录只保留一行。如果需要保留重复行,可以使用union all

二、表的联结

1.交叉联结(cross join)

也叫笛卡儿积,指将表中的每一行和另外一个表的每一行合并在一起,返回的结果的行数等于两个表的行数的乘积,交叉联结是所有联结的基础。

2.内联结(inner join)

指查找同时存在于两张表的数据,即两个表的交集

3.左联结(left join)

指将左侧的表中的数据全部取出

4.右联结(right join)

指将右侧的表中的数据全部取出

5.全联结(full join)

指返回的是左表和右表中的所有行,如果没有匹配的行则会显示空值,MySQL不支持全联结

6.选择联结的方法

根据想要保留哪一部分数据来选择用哪一种联结,当需要生成固定行数的表单或者需要指定取出哪一张表中的全部数据的时候,使用left join或right join,其他情况则用inner join,另外,联结不会影响SQL运行顺序。

三、联结的应用案例

练习:

左联结,题目要求是所有学生,因此以学生表为主表,以学生表的学号分组
having子句对分组结果指定条件
3张表的联结

四、case表达式

1.case表达式用于多种情况的条件判断

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

when子句的判断表达式用于判断某一行数据是否符合某个条件,若符合则返回then子句的表达式,若不符合则继续执行下一个when子句,如果所有的when子句都不符合,则返回else子句的表达式。

2.注意事项

①else子句可以省略不写,默认为else null,但不建议省略

②end不能省略

③case表达式可以书写在任意子句中

练习:

按课程号分组,通过sum求和计算人数
自定义分组,因为课程号和课程名称是一对一的对应关系,所以group by后面可以加课程名称,如果两者不是一对一的对应关系,则不能添加

Group by 分组时,当用多个列来分组时,这几个列的值要全部相同才算一组,例如以上的课程号和课程名称要一一对应。

五、SQLzoo练习题

where子句中的条件:主队是德国或者客队是德国,比如德国 和 A队比赛(德国是主队),进球的是A队,A队和德国比赛(德国是客队),进球的是A队,内联结的结果中入球球员有重复值,用distinct去重复值
比赛地点(比赛信息表game),和每个比赛地点的进球数(进球信息表goal:按比赛地点分组,对进球人员进行汇总count(player),要查出比赛信息表game中全部比赛地点,所以是左联结,game表是主表
查找出有波兰球队'POL'参加的比赛编号,比赛日期,对应这场比赛的进球数
比赛编号,比赛日期(在比赛信息表game)和'GER'得分的进球数(进球信息表goal:按比赛地点分组,对进球人员进行汇总count(player)
查找出所有比赛的日期,每场比赛中对战双方各自的进球数(也就是team1进球数,team2进球数),当比赛信息表game中的球队编号(team1)也出现在进球信息表(goal)中时,表示这个球队进球了,使用case语句来统计,要查出game表中的全部比赛日期,所以用左联结,game表是主表

sql case when then else多个条件_SQL-多表查询相关推荐

  1. 数据导入导出 、 表记录基本操作 、 查询及匹配条件 、 多表查询 、

    数据管理:(管理表记录) 数据导入:把系统文件的内容存储到数据库的表里. mysql> create table uesr( -> name varchar(50), -> mima ...

  2. 2.4.3 Mybatis 高级查询, 复杂映射, 返回主键, 动态SQL if, set, foreach, 核心配置文件深入,plugins标签, 多表查询, 嵌套查询

    目录 Mybatis 复杂映射&配置文件深入 一 Mybatis高级查询 1.1 ResutlMap属性 1.2 多条件查询(三种) 1.3 模糊查询 二 Mybatis映射文件深入 2.1 ...

  3. case when then else多个条件_SQL巡礼之CASE用法

    使用CASE表达式使SQL语句的条件判断形式变得十分丰富,也因为CASE表达式不依赖于具体的数据库技术,所以它的可移植性也会更高. 现在就让我们一起来领略一下CASE语句的用法吧. CASE表达式语法 ...

  4. 一条sql语句统计一个字段的不同条件, 无需过多子查询

  5. sql 相加_SQL多表查询

    一.表的加法 相加就是用union把两个select语句相加,会去重:如果需要保留重复的行,用union all就可以了 二.表的联结 联结的几种类型: 1.交叉联结 2.内联结 3.左联结 4.右联 ...

  6. sql join on 多表连接_SQL 多表查询-交叉连接(笛卡尔积)

    交叉连接(笛卡尔积)返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数. 简单解释一下笛卡尔积 设A,B为集合,用 ...

  7. JPA 多条件、多表查询

    JPA对于简单的查询操作确实很给力,但是涉及到多表.多条件.分页的场景就不是很好实现了. 可行的解决方案 1.多条件 public interface BaseRepository<T,ID e ...

  8. mysql子查询作为条件_sql - 使用子查询作为条件的MySQL DELETE FROM

    sql - 使用子查询作为条件的MySQL DELETE FROM 我正在尝试这样的查询: DELETE FROM term_hierarchy AS th WHERE th.parent = 101 ...

  9. SQL CASE When THEN END 行列转换,复杂查询

    使用 CASE CASE 函数是特殊的 Transact-SQL 表达式,它允许按列值显式可选值.数据中的更改是临时的,没有对数据进行永久更改.例如,CASE 函数可以在 state 列中有 CA 值 ...

最新文章

  1. proshow_ARTSLINK零创|巴特莱特B-Pro Show:建筑让我自由
  2. python主要用途-Python能用来做什么?以下是Python的三大主要用途
  3. C语言——日常刷题(一)
  4. linux下mysql服务架设_linux下源码搭建php环境之mysql(一)
  5. php 商品显示,php – WooCommerce仅显示购买的商品
  6. 快速排序+统计→奶牛的耳语(洛谷P1296题题解,Java语言描述)
  7. 负数乘以正数溢出问题
  8. Python类属性访问的魔法方法
  9. hint oracle qbname_从才oracle中找到所有列名为BANK_ACC,且BANK_ACC=000的项,并将BANK_ACC=000000的项修改为BANK_ACC=111...
  10. erlang注意(经典)
  11. 查看Linux下端口被哪个程序占用
  12. php 7 中对数值 * 100 出现很多小数_PHP快速入门第二讲:数据类型
  13. 在zephyr上使用mipi-sys-t
  14. 汇编跳转指令(转载)
  15. 好程序员Java教程分享使用HttpClient抓取页面内容
  16. Jaas demo 登陆验证
  17. linux内核移植imx8,iMX8模块Ubuntu移植
  18. 花呗的24期利息计算器_花呗分期利息怎么算(附计算公式大全)
  19. IGCT器件是什么?
  20. Could not transfer artifact问题

热门文章

  1. Pass4side CompTIA PDI+ Beta Exam PD1-001 DEMO 免费下载
  2. 免费人脸识别工具可以跟踪社交媒体网站上的人
  3. 用keepalived配置高可用集群
  4. YII2.0之博客实战
  5. 主库创建存储过程时从库显示 Error 1049
  6. ssh非交互式远程命令
  7. [Diary]6.12
  8. 软件测试 学习之路 基本介绍
  9. JavaScript变量提升
  10. Spring 创建对象的方式