【Mysql】容易被忽略的基础知识--集合查询

6 篇文章 1 订阅
6 篇文章 0 订阅


前言

Mysql查询中的集合查询,是查询中比较重要的Sql语法,很多Mysql查询需要借助此完成查询操作,为我们节省了大量的思考时间,提高了工作效率。

        例如:查询学校中所有师生的姓名、查询选修了课程2和课程4的学生、查询学校中与教师同名的学生姓名……本文就介绍了Mysql集合查询的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、集合查询的分类

        SELECT语句的查询结果是记录的集合,多个SELECT语句的结果可进行集合操作,其中包括:并操作(Union)、交操作(Intersect)和差操作(Except)。

类型举例
并操作(Union)AB的集合并去重复数据(相当于数学中的并集 AB)
交操作(Intersect)取AB相同的数据(相当于数学中的交集 AB)
差操作(Except)A去掉与B相同的数据(相当于数学中的差集和交集的集合运算 A-AB)

        其中标准SQL直接支持的集合操作种类只有并操作(Union);而一般商用数据库支持的集合操作种类有并操作(Union)、交操作(Intersect)和差操作(Except)。


二、集合查询的使用方法

1.并操作(Union)

        并操作(Union)的语法形式很简单,就是两个查询块用Union连接:

<查询块>
	 Union
<查询块>

在这里插入图片描述

图 1 并

例如: 设数据库中有一教师表Teacher(Tno, Tname,Tdept,Tbirth,Sal),查询学校中所有师生的姓名。
Teacher表
表1 Teacher表
Student表

表2 Student表
用并操作的Sql语句应该为:
Select Sname
From   Student
Union 
Select  Tname
From   Teacher;

使用Union的规则:

1.参加Union操作的各结果表的列数必须相同
2.对应项的数据类型也必须相同

Union 的结果集列名:

1.与 第一个 Select 语句的结果集中的列名相同 
2.另一个 Select 语句的结果集列名将被忽略
3.默认情况下,Union 运算符从结果集中删除重复的行。
4.如果使用 All 关键字,那么结果中将包含所有行并且将不删除重复的行。

        再来举一个例子,例如:查询计算机科学系的学生年龄不大于19岁的学生(及代表合并查询结果)。所以,我们可以使用多条件查询也可以使用并操作查询:
多条件查询(OR):

Select  Distinct  *
From  Student
Where  Sdept= 'CS'  
OR  Sage<=19;

并操作查询:

Select *
From Student
Where Sdept= 'CS'
Union
Select *
From Student
Where Sage<=19;

        补充:union all和union的异同:
相同点:两者都是取结果的交集。
不同点:
1.union对两个结果集进行并集操作,不包括重复行,相当于distinct,同时进行默认规则的排序。
2.union all:对两个结果集进行并集操作,包括重复行,即所有的结果全部显示,不管是不是重复。


2.交操作(Intersect)

        交操作(Intersect)的语法形式也很简单,就是两个查询块用Intersect连接。但是标准SQL中没有提供集合交操作,但可用其他方法间接实现(比如:IN函数),MySql中提供了集合交操作。

<查询块>
		 Intersect
<查询块>

在这里插入图片描述

图 2 交

例如:查询学生姓名与教师姓名的交集(实际上是查询学校中与教师同名的学生姓名,显然是交 如图 3)。用IN实现( 嵌套查询,下一章会讲):

Select Distinct Sname
From Student
Where Sname IN 
(Select Tname
From Teacher);

集合查询交操作:

Select Sname
From Student
Intersect
Select Tname
From Teacher;

在这里插入图片描述

图 3 关系图示


3.差操作(Except)

        差操作(Except)的语法形式同样也很简单,就是两个查询块用Except连接。和交操作一样,标准SQL 没有提供集合差操作,但可用其他方法间接实现(比如:IN函数),MySql中提供了集合差操作。

<查询块>
		 Except
<查询块>

在这里插入图片描述

图 4 差

例如:查询计算机科学系的学生与年龄不大于19岁的学生的差集(就是查询计算机科学系中年龄大于19岁的学生)。我们可以用AND和EXCEPT:
使用AND的Sql语句:

Select *
From Student
Where Sdept= 'CS' 
And Sage>19;

使用EXCEPT的Sql语句:

Select * From Student
Where Sdept= 'CS'
Except
Select * From Student
Where Sage<=19;

总结

以上就是今天要讲的内容,本文仅仅简单介绍了Mysql中集合查询的使用,大大减少了我们的工作量使得我们在查询中事倍功半!最后,祝大家在学习的路上,脚踏实地,虽艰辛,但值得,’“书山有路勤为径,学海无涯苦作舟。”!


注:注:本文章仅用于参考学习,如有错误,请大家指正。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值