一、子查询

1、子查询(subquery):嵌套在其他查询中的查询。

例如:select user_id from usertable where mobile_no in (select mobile_no from mobile where mobile_id = '10086');

这条SQL语句中,括号内为从mobile表汇总检索mobile_id为10086的所有行中的mobile_no列,括号外为从user_table表中检索mobile_id为10086的所有行中的user_id列;

PS:select语句中,子查询总是从内向外处理(实际上,MySQL执行了2个select操作),where子句中使用子查询,必须保证select语句具有与where子句中相同数目的列;

子查询一般与in操作符结合使用,但也可用于测试等于(=)、不等于(<>)等。

格式化SQL:包含子查询的select语句一般相较来说阅读和调试更为不方便,特别是它比较复杂的情况下,因此把子查询分解为多行并且适当缩进,能极大的简化子查询的使用。

2、使用计算字段使用子查询

例如:select user_name,user_id,(select count(*))

from orders where orders_cust_id = usertable_user_id)

as orders

from usertable

order by user_name;

这条SQL语句对usertable表中每个用户返回3列:user_name,user_id和orders,orders是一个计算字段,由圆括号内的子查询建立,它对检索出的每个用户执行一次,

子查询中where子句它使用了完全限定表名,它告诉SQL比较orders表和usertable表中的user_id列。

相关子查询(correlated subquery):涉及外部查询的子查询(任何时候只要列名可能存在多叉性,就必须使用这种语法[表名和列名有一个句点分隔])。

PS:使用子查询建立查询的最可靠方法是逐渐进行(首先建立最内层的查询,确认后用硬编码数据建立外层查询,由内到外)

二、组合查询

MySQL允许执行多个查询(多条select语句),并将结果作为单个查询结果集返回,这些组合查询称为并(union)或复合查询(compound query)。

以下两种基本情况,需要使用组合查询:

①在单个查询中从不同表返回类似结构的数据;

②对单个表执行多个查询,按单个查询返回数据;

1、union

union可将多条select语句的结果组合成单个结果集,例子如下

select user_id, mobile_id, mobile_num

from mobiletables

where mobile_num = 10086

union

select user_id, mobile_id, mobile_num

from mobuletables

where user_id in (10000,10010);

这条SQL语句中,union指示MySQL执行两条select语句,并把输出组合成单个查询结果集。

union使用规则:

①union必须由两条或以上的select语句组成,语句之间用关键字union分隔;

②union中每个查询必须包含相同的列、表达或聚集函数(各个列不需要以相同的次序列出);

③列数据类型必须兼容:类型不用完全相同,但必须是DBMS可以隐含的转换类型;

④union自动从查询结果集中去除重复的行(这是union的默认行为,如果想返回所有匹配行,可使用union all)

2、union all

union自动从查询结果集中去除重复的行,如果想返回所有匹配行,可使用union all;例子如下:

select user_id, mobile_id, mobile_num

from mobiletables

where mobile_num = 10086

union all

select user_id, mobile_id, mobile_num

from mobuletables

where user_id in (10000,10010);

union和where的区别:

union几乎可以完成与多个where条件相同的工作。union all为union的一种形式,它完成where子句完成不了的工作(如果需要每个条件匹配行全部出现,则必须使用union all)。

3、对组合查询结果排序

select语句的输出用order by子句排序,在用union组合查询时,只能使用一条order by子句,它必须出现在最后一条select语句之后。

select user_id, mobile_id, mobile_num

from mobiletables

where mobile_num = 10086

union all

select user_id, mobile_id, mobile_num

from mobuletables

where user_id in (10000,10010)

order by user_id, mobile_num;

MySQL将用它来排序所有的select语句返回的所有结果。

MySQL(八)子查询和分组查询相关推荐

  1. case when 子查询_标准SQL——子查询、分组查询、多表联查

    点击上方蓝色字关注我们!❈ 一.查询子句: 1.排序子句:order by 列,列.. [asc|desc]  排序, select * from user order by account desc ...

  2. MySQL对数据表进行分组查询(GROUP BY)

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  3. ORM单表查询,跨表查询,分组查询

    ORM单表查询,跨表查询,分组查询 单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models.T ...

  4. Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)

    阅读目录 一.Django ORM 常用字段和参数: 二.单表查询 三.多表查询 基于双下划线的多表查询 四.聚合查询和分组查询 摘要: 单表查询 多表查询 聚合查询 分组查询 一.Django OR ...

  5. Django 【第六篇】ORM跨表操作(聚合查询,分组查询,F和Q查询等)

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

  6. SQL条件查询,分组查询,排序查询,分页查询

    DQL查询操作(条件查询,分组查询,排序查询,分页查询) 文章目录 DQL查询操作(条件查询,分组查询,排序查询,分页查询) 一.查询语法 二.基础查询 三.条件查询 四.排序查询 五.分组查询 六. ...

  7. day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询

    day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询 昨日内容复习 自定义过滤器.标签.inclusion_tag 1.首先现在应用目录下创建名字为templatet ...

  8. oracle关联分组查询,oracle中关联查询、分组查询

    高级查询 1.关联查询 作用:可以跨越多表查询 --查询出员工的名字和他所在部门的的名字 //古老的写法 select first_name,name from s_emp,s_dept where ...

  9. 多表查询, 聚集查询和分组查询

    有如下模型为例 class Publisher(models.Model):name=models.CharField(max_length=30)address=models.CharField(m ...

  10. 第三章 模糊查询与分组查询 ② 代码

    第三章 模糊查询与分组查询 ② 代码 参考代码: 1.增删改语句 0715 [classinfo/student] 2.去重查询/带条件修改/条件删除 [category/goods] 3.案例演练 ...

最新文章

  1. python编程学习笔记_python编程:从入门到实践学习笔记-Django开发用户账户(一)...
  2. ObserveIT Client安装后屏幕延迟问题
  3. C++描述杭电OJ 2017.字符串统计||
  4. Docker,容器,虚拟机和红烧肉
  5. python怎么读取石墨表格_Python用Pandas读写Excel
  6. 阿里天池全国社保比赛心得
  7. Java之Exception
  8. SAP License:ERP系统有哪些?
  9. seata分布式事务原理_分布式事务 Seata 及其三种模式详解
  10. 大学excel题库含答案_大学生计算机基础excel试题及答案
  11. 模型笔记1---3d max 导入obj模型设置
  12. linux内核不能识别u盘分区,一种在Linux内核中识别特定USB大容量存储设备的方法及系统与流程...
  13. 一个计算机游戏机,我想入手一台游戏主机,ps、xbox、任天堂相比,哪个好?
  14. 【分享】微信公众号在 “集简云平台“ 集成应用的常见问题与解决方案
  15. php 如何将富文本内容输出到word里面且添加页眉和页脚
  16. python之pyttsx3实现文字转语音播报
  17. 查看、修改oracle字符集,查看oracle版本
  18. JQuery对CheckBox的一些相关操作
  19. 题解报告(CDUT暑期集训——第四场)
  20. 微信小程序发布上线流程以及个人小程序怎么通过审核

热门文章

  1. Win10任务计划+PowerShell实现Git自动推送
  2. nginx系列之二:配置文件解读
  3. 秒杀多线程第十篇 生产者消费者问题
  4. C++ COM编程之QueryInterface函数(二)
  5. 趣谈设计模式 | 观察者模式(Observer) :消息的发布与订阅
  6. 数据结构与算法 | 循环队列
  7. 睡前必读 | 如何系统性地学习分布式系统?
  8. Spring事务“套路”面试
  9. Xilinx+AWS F1+VP9带来30倍实时转码性能提升
  10. 2017第四季度移动行业数据报告