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

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

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

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

UNION示例:

例子1.1

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

SQL语句:

SELECT * FROM Student WHERE Sdept='CS' UNION

SELECT * FROM Student WHERE Sage<=19 查询结果:

本查询实际上是求计算机系的所有学生与年龄不大于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 正则表达式查询含有非数字和字符的记录

    比如我们有一张school表,里面有一个字段county_name,现在我们要查询county_name字段中包含a-w字母和数字以外字符的记录,那么sql该如何写呢?请看下面的写法: select ...

  2. mysql的聚合查询_MySql聚合查询

    SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作. 集合操作主要包括并操作UNION.交操作INTERSECT.差操作EXCEPT. 注意,参加集合操作的各查询结果 ...

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

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

  4. mysql分表全局查询_mysql如何查询多样同样的表/sql分表查询、java项目日志表分表的开发思路/按月分表...

    之前开发的一个监控系统,数据库的日志表是单表,虽然现在数据还不大并且做了查询sql优化,不过以后数据库的日志表数据肯定会越来越庞大,将会导致查询缓慢,所以把日志表改成分表,日志表可以按时间做水平分表, ...

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

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

  6. java mysql 分页查询_MySQL分页查询方法及优化

    当数据库的数据量很大时,一次性查询结果就会变得很慢,为了提高查询效率,我们可以使用MySQL的分页查询功能.本文就为大家带来MySQL分页查询方法及优化. 推荐阅读: 分页查询方法: 在MySQL中, ...

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

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

  8. mysql 空间查询_MYSQL空间查询函数

    数据写入 插入时使用ST_GeomFromText,也可使用GeomFromText INSERT INTOt_customers ( lon_lat_point )VALUES( GeomFromT ...

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

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

最新文章

  1. 批评“古风”歌词“狗屁不通”就是不尊重?我们又都成了“垃圾听众”
  2. c语言使用zlib实现文本字符的gzip压缩与gzip解压缩
  3. oracle v$sql last_load_time,Oracle 等待事件V$视图
  4. ×××--PPTP 服务器配置(详细)
  5. html5图像调整大小,JavaScript调整HTML5画布中图像的大小
  6. 程序员必知8大排序3大查找(一)
  7. 20天掌握C语言,C语言零基础到项目实战,玩转C语言
  8. gojs 节点右键点击事件_SWMM快速建模方法(3)—建立管线上下游节点编号
  9. 20150324 作业1(升级喽)
  10. phpmyadmin的安装和使用
  11. spark java jar 依赖_spark提交依赖jar包的解决方法
  12. boost::test
  13. VMWare 装mac os x 一个必备优化神器 beamoff
  14. 孩子学python_教孩子学编程 Python
  15. GBase 8a - 开启防火墙安装集群添加端口策略
  16. SharePoint Designer定制MOSS/WSS表单页面
  17. 计算机专业对体重有要求吗,毕业季|@毕业生,你知道计算机学院有多重吗?
  18. IExplore.exe应用程序错误解决方法
  19. 键盘调节台式计算机声音,台式电脑如何用键盘控制声音开关
  20. sparksql查询_筛选_过滤

热门文章

  1. 构建初级前端页面以及重构开发环境(from 知乎)
  2. android数据库降级_Android之sqlite数据库版本升级和降级的处理(onUpgrade和onDowngrade)...
  3. 【GPS周-周内秒、BDS周-周内秒转换与逆转换】
  4. AAAI2021论文: 时空Kriging的归纳式图神经网络
  5. fabs linux头文件,fabs(c语言fabs函数用法求精度)
  6. GmSSL快速上手指南
  7. 冰尘社补丁php,300英雄冰尘社盒子ios
  8. 服务器2012分辨率不能修改,《F1 2012》无法修改分辨率解决方法
  9. 树莓派用root登陆_树莓派开启root用户权限
  10. Android获取设备号SSAID (Android ID) 和 IMEI