Mysql查询中的集合查询,是查询中比较重要的Sql语法,很多Mysql查询需要借助此完成查询操作,为我们节省了大量的思考时间,提高了工作效率。
例如:查询学校中所有师生的姓名、查询选修了课程2和课程4的学生、查询学校中与教师同名的学生姓名……本文就介绍了Mysql集合查询的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
SELECT语句的查询结果是记录的集合,多个SELECT语句的结果可进行集合操作,其中包括:并操作(Union
)、交操作(Intersect
)和差操作(Except
)。
类型 | 举例 |
---|---|
并操作(Union ) |
AB的集合并去重复数据(相当于数学中的并集 A∪ B) |
交操作(Intersect ) |
取AB相同的数据(相当于数学中的交集 A∩ B) |
差操作(Except ) |
A去掉与B相同的数据(相当于数学中的差集和交集的集合运算 A- A∩ B) |
其中标准SQL直接支持的集合操作种类只有并操作(Union
);而一般商用数据库支持的集合操作种类有并操作(Union
)、交操作(Intersect
)和差操作(Except
)。
Union
) 并操作(Union
)的语法形式很简单,就是两个查询块用Union
连接:
<查询块>
Union
<查询块>
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:对两个结果集进行并集操作,包括重复行,即所有的结果全部显示,不管是不是重复。
Intersect
) 交操作(Intersect
)的语法形式也很简单,就是两个查询块用Intersect
连接。但是标准SQL中没有提供集合交操作,但可用其他方法间接实现(比如:IN
函数),MySql中提供了集合交操作。
<查询块>
Intersect
<查询块>
嵌套查询
,下一章会讲):
Select Distinct Sname
From Student
Where Sname IN
(Select Tname
From Teacher);
集合查询交操作:
Select Sname
From Student
Intersect
Select Tname
From Teacher;
Except
) 差操作(Except
)的语法形式同样也很简单,就是两个查询块用Except
连接。和交操作一样,标准SQL 没有提供集合差操作,但可用其他方法间接实现(比如:IN
函数),MySql中提供了集合差操作。
<查询块>
Except
<查询块>
例如:查询计算机科学系的学生与年龄不大于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中集合查询的使用,大大减少了我们的工作量使得我们在查询中事倍功半!最后,祝大家在学习的路上,脚踏实地,虽艰辛,但值得,’“书山有路勤为径,学海无涯苦作舟。”!
注:注:本文章仅用于参考学习,如有错误,请大家指正。