程序员书籍笔记 程序员书籍笔记
  • JavaScript
  • HTML/CSS
  • PHP
  • Python
  • Go
  • 数据库
  • 容器
  • 微服务
  • 消息队列
  • 搜索引擎
  • 大数据
  • 鸟哥Linux私房菜
其他
  • 大数据
  • 深度学习
APP下载 (opens new window)
GitHub (opens new window)
  • JavaScript
  • HTML/CSS
  • PHP
  • Python
  • Go
  • 数据库
  • 容器
  • 微服务
  • 消息队列
  • 搜索引擎
  • 大数据
  • 鸟哥Linux私房菜
其他
  • 大数据
  • 深度学习
APP下载 (opens new window)
GitHub (opens new window)
  • 数据库

    • MySQL必知必会

      • 数据检索、排序、过滤
      • 数据处理、汇总、分组
      • 子查询、连表、组合
        • 使用子查询
          • 使用子查询进行过滤
          • 作为计算字段使用子查询
        • 连结表
          • WHERE的重要性
          • 内部连结
          • 连结多个表
        • 高级联结
          • 使用别名
          • 自联结
          • 自然联结
          • 外部联结
          • 带聚集函数的联结
        • 组合查询
          • 创建组合查询
          • 对组合结果进行排序
      • 全文本搜索、插入
      • 更新、删除、表操作
      • 视图、存储过程、游标
      • 触发器、事务
      • 全球化、安全、维护
    • MongoDB权威指南

  • 容器

  • 微服务

  • 消息队列

  • 搜索引擎

  • 大数据

  • 框架和软件
  • 数据库
  • MySQL必知必会
小游
2021-05-07

子查询、连表、组合

# 使用子查询

# 使用子查询进行过滤

下面这个例子意义不大,只是简单的演示一下什么是子查询

SELECT * FROM `comment` WHERE shareID IN (SELECT shareID FROM `comment` WHERE shareID > 10)
1

image-20210508205635027

# 作为计算字段使用子查询

下面这个例子其实意义也不大,这里统计shareID在另外一个表出现的次数

SELECT shareID,(SELECT COUNT(*) FROM `share` WHERE `comment`.shareID = `share`.userID) FROM `comment`
1

image-20210508210416909

# 连结表

# WHERE的重要性

其实就是连表查询,一般情况下,连表查询的结果会进行笛卡尔积运算

SELECT shareID,`share`.title FROM `comment`,`share`
1

image-20210508210801666

所以一般我们需要进行where来避免出现重复的值

SELECT shareID,`share`.title FROM `comment`,`share` WHERE `comment`.shareID = `share`.ID
1

image-20210508210859536

# 内部连结

我们可以使用INNER JOIN 和 ON来进行内部连结操作

SELECT shareID,`share`.title FROM `comment` INNER JOIN `share` ON `comment`.shareID = `share`.ID
1

image-20210509152644291

# 连结多个表

这个就没啥好说的,MySQL支持连多个表来进行查询操作,这里我直接用书上的例子来进行测试了。

image-20210509153204201

# 高级联结

# 使用别名

我们可以对连结的表使用别名,可以使用 AS 关键词,在查询的时候可以使用这些别名来进行查询

image-20210509153456767

# 自联结

这个就是最简单的连表查询,这里就不过多介绍了

# 自然联结

标准的联结(前一章中介绍的内部联结)返回所有数据,甚 至相同的列多次出现。自然联结排除多次出现,使每个列只返回一次。其实这个操作一般都是我们自己来完成,一般都是加上一些限定条件来避免检索出重复的数据。

# 外部联结

许多联结将一个表中的行与另一个表中的行相关联。但有时候会需 要包含没有关联行的那些行。这个时候就需要使用外部联结。内联结的参考上面那个例子,下面我们使用外联结来进行操作,

外部联结包括左外联结和右外联结。下面这里我们使用左外联结来进行演示:

SELECT shareID,`share`.title FROM `comment` LEFT OUTER JOIN `share` ON `comment`.shareID = `share`.ID
1

image-20210509154300363

这里我们其实就可以看到,我们这里返回了很多没用空数据

# 带聚集函数的联结

我们可以把函数与连结结合起来

image-20210509154441936

# 组合查询

多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语 句。MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个 查询结果集返回。这些组合查询通常称为并(union)或复合查询 (compound query)

# 创建组合查询

这里我们可以使用 UNION 关键词来进行组合查询。比如我们这里把两次查询的结果进行合并。

SELECT shareID,content FROM `comment` WHERE shareID = 11
UNION
SELECT shareID,content FROM `comment` WHERE shareID = 8
1
2
3

image-20210509173229817

UNION的规则

  • UNION必须由两条或两条以上的SELECT语句组成,语句之间用关 键字UNION分隔(因此,如果组合4条SELECT语句,将要使用3个 UNION关键字)。
  • UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过 分析 155 图灵社区会员 臭豆腐(StinkBC@gmail.com) 专享 尊重版权116 第 17 章 组 合 查 询 各个列不需要以相同的次序列出)。
  • 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以 隐含地转换的类型(例如,不同的数值类型或不同的日期类型)。

UNION从查询结果集中自动去除了重复的行,如果不希望删除,我们可以使用 UNION ALL

# 对组合结果进行排序

注意,这里我们只能进行一次排序。而且必须放在最后一条SELECT之后

SELECT shareID,content FROM `comment` WHERE shareID = 11
UNION
SELECT shareID,content FROM `comment` WHERE shareID = 8
ORDER BY shareID
1
2
3
4

image-20210509173540409

编辑 (opens new window)
上次更新: 2021/05/11, 19:39:39
数据处理、汇总、分组
全文本搜索、插入

← 数据处理、汇总、分组 全文本搜索、插入→

Theme by Vdoing | Copyright © 2021-2021 小游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式