SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作。

集合操作主要包括并操作UNION、交操作INTERSECT、差操作EXCEPT。

注意,参加集合操作的各查询结果的列数必须相同;对应的数据类型也必须相同。

本示例中的数据表有student,sc,course三个,数据表的具体内容请看:Mysql数据库中的EXISTS和NOT EXISTS

UNION示例:

例子1.1

题目:查询计算机科学系的学生及年龄不大于19岁的学生。

SQL语句:

SELECT * FROM Student WHERE Sdept='CS' UNION SELECT * FROM Student WHERE Sage<=19

欢迎大家阅读《MySql聚合查询》,跪求各位点评,by 搞代码

查询结果:

本查询实际上是求计算机系的所有学生与年龄不大于19岁的学生的并集。

与它等效的SQL语句是:

SELECT * FROM Student WHERE Sdept='CS' OR Sage<=19

注意:虽然这个两个SQL语句是等效的,但是本质上是不一样的,第一个SQL语句是分别进行两次SELECT然后将结果取并集;第二个SQL语句是直接进行了一次SELECT语句查询。

INTERSECT示例:

MySql语句并不至此INTERSECT,所以只能使用其替代语句

例子2.1

题目:查询计算机科学系中年龄不大于19岁的学生。

对应的SQL语句应该是:

SELECT * FROM Student WHERE Sdept='CS' INTERSECT SELECT * FROM Student WHERE Sage<=19;

替代的SQL语句:

SELECT * FROM student WHERE Sdept = 'CS' AND Sage <=19

查询结果:

例子2.2

题目:查询即选修了课程1又选修了课程2的学生。(就是查询选修课程1的学生集合与选修课程2的学生集合的交集)

对应的SQL语句应该是:

SELECT Sno FROM SC WHERE Cno='1' INTERSECT SELECT Sno FROM SC WHERE Cno='2';

替代的SQL语句为:

(使用IN)

SELECT Sno FROM SC WHERE Cno = '1' AND Sno IN ( SELECT Sno FROM SC WHERE Cno = '2' )

或者为:

(使用EXISTS)

SELECT Sno FROM SC SCX WHERE Cno = '1' AND EXISTS ( SELECT Sno FROM SC SCY WHERE Cno = '2' AND SCX.Sno = SCY.Sno )

查询结果为:

或者为:

(使用JOIN ON)

SELECT * FROM SC SCX JOIN SC SCY ON ( SCX.Cno = '1' AND SCY.Cno = '2' AND SCX.Sno = SCY.Sno )

EXCEPT操作:

很不幸,MySql也不支持EXCEPT操作,只能使用替代的语句。

例子3.1

查询计算机科学系的学生与年龄不大于19岁的学生的差集。

对应的SQL语句为:

SELECT * FROM Student WHERE Sdept='CS' EXCEPT SELECT * FROM Student WHERE Sage<=19;

也就是查询计算机科学系中年龄大于19岁的学生。

替换语句为:

(直接使用WHERE,不得不说这么做很简单,但是意思上不是很好理解)

SELECT * FROM Student WHERE Sdept = 'CS' AND Sage >19

查询结果为:

或者替换语句为:

(使用NOT IN)

SELECT * FROM Student WHERE Sdept = 'CS' AND Sno NOT IN ( SELECT Sno FROM Student WHERE Sage <=19 )

查询结果为:

或者使用替换语句为:

(使用NOT EXISTS)

SELECT * FROM Student SX WHERE Sdept = 'CS' AND NOT EXISTS ( SELECT * FROM Student SY WHERE SY.Sage <=19 AND SX.Sno = SY.Sno )

查询结果为:

对集合操作结果的排序

ORDER BY子句只能用于对最终查询结果排序,不能对中间结果排序。

任何情况下,ORDER BY子句只能出现在最后;对集合操作结果排序时,ORDER BY子句中用数字指定排序属性。

下面是一种错误的写法:

SELECT * FROM Student WHERE Sdept='CS' ORDER BY Sno UNION SELECT * FROM Student WHERE Sage<=19 ORDER BY Sno;

正确的应该是:

SELECT * FROM Student WHERE Sdept='CS' UNION SELECT * FROM Student WHERE Sage<=19 ORDER BY 2;

输出结果:

如果写成:

SELECT * FROM Student WHERE Sdept='CS' UNION SELECT * FROM Student WHERE Sage<=19 ORDER BY 1;

输出结果为:

原创文章,转载请注明: 转载自搞代码

微信 赏一包辣条吧~

支付宝 赏一听可乐吧~

mysql的聚合查询_MySql聚合查询相关推荐

  1. 简单mysql 查询_MySQL简单查询详解

    MySQL的查询操作 单表查询:简单查询 多表查询:连接查询 联合查询 布尔条件表达式操作符= 等值比较 <=>:跟空值比较不会产生额外信息的等值比较 <>:不等值 <: ...

  2. mysql lambda查询_MySQL高级查询和编程基础

    学习概述 随着数据库管理信息系统的日益复杂和庞大,软件应用系统对数据库设计.数据存储.数据查询和数据维护等提出了更高的要求.本书主要介绍数据库设计的方法和技术.子查询技术.MySQL编程基础知识和存储 ...

  3. mysql查询_MySQL常用查询

    单表查询 ①查询所有     * mysql> select * from student; ②查询选中字段记录 mysql> select s_name from student; ③条 ...

  4. MySQL实验四数据库的查询_MySQL数据库查询(实验四)

    MySQL数据库查询 准备工作:脚本文件xkgl.sql下载:xkgl脚本.sql 1.执行脚本xkgl.sql (创建xkgl库.表及插入数据),观察有无错误,如有记录错误信息,并解决. (1) 执 ...

  5. mysql数据库的查询_mysql数据库查询

    查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SEL ...

  6. mysql商品查询_mysql的查询、子查询及连接查询(商城查询常用)

    一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 1.where常用运算符: 比较运算符 > ...

  7. mysql 什么是子查询_MySQL 子查询

    什么是子查询 为什么要使用子查询 子查询的分类 怎样使用子查询 关联子查询 要使用的数据表 image.png 1. 什么是子查询? 子查询顾名思义就是在正常查询之前先查询出来一条数据或者一个表. 子 ...

  8. mysql 内嵌查询_mysql嵌套查询_MySQL

    mysql嵌套查询_MySQL 一:创建ecs_goods表插入以下数据: +----------+------------------------------+--------+---------- ...

  9. mysql的复杂查询_mysql复杂查询

    所谓复杂查询,指涉及多个表.具有嵌套等复杂结构的查询.这里简要介绍典型的几种复杂查询格式. 一.连接查询 连接是区别关系与非关系系统的最重要的标志.通过连接运算符可以实现多个表查询.连接查询主要包括内 ...

  10. mysql rand() 子查询_MySQL ------ 子查询(十三)

    查询(query):任何SQL 都是查询,但此术语一般指select 语句 子查询(subquery):嵌套在查询中的查询,MySQL4.1 引入对子查询的支持. 接下来得就比较有意思了,需要你对于表 ...

最新文章

  1. python免费教学视频教程-Python免费教程_Python免费视频教程大全_易玩网
  2. 逾期怎么处理_招商信用卡逾期三个月银行起诉我怎么处理?信用卡逾期一年半收到短信发到户籍所在地...
  3. SQL的3个主要组成
  4. 计算机网络(九)——简述Socket
  5. 【SpringMVC笔记】拦截器 + 文件上传下载
  6. spyder中以html输出图形,交互(?)用matplotlib在Spyder中绘图
  7. ubuntu下安装及设置FTP服务器!!
  8. 计算机教室配套,中小学标准音乐教室建设及设备配套方案
  9. html5二维动画教程,Flash二维动画制作案例教程
  10. STM8S103系列IO口模拟串口通信(实现真正串口)
  11. Jflash 工程配置及下载
  12. HTML5游戏开发进阶指南.pdf
  13. 防盗报警器c语言程序,基于AT89C2051设计的无线防盗报警器 附程序
  14. 用Tkinter打造GUI开发工具(35)Tkinter中的视频播放组件
  15. jupyter notebook更改默认浏览器
  16. 这是一个赞赏码(附赞赏码生成方法)
  17. 奔 跑 吧 兄 弟 場 外 手 機 中 獎 活 動 是 真 的 嗎
  18. android qq 设置界面大小设置,怎么设置手机腾讯QQ的字体大小
  19. 关于金融评级机构及金融公司
  20. 使用FFmpeg,将mp4等格式转mp3格式

热门文章

  1. nagios和cacti的整合
  2. 弹性计算双周刊 第 9 期
  3. ZAM 3D入门教程(5):Lathe编辑器
  4. Linux下如何释放内存
  5. PowerDesigner导出
  6. 给VIM安装YouCompleteMe插件
  7. 【学习笔记1】CentOS 下载
  8. 在Linux 下配置PHP 支援GD
  9. [WPF]winfom中ShowWPF新窗口时TextBox等控件无法输入问题解决方法 .
  10. 实验6      VRRP网关备份(下)