【Mysql 集合查询】Mysql常被忽视的查询方法,你知道吗?

文章目录

  • 前言
  • 一、集合查询的分类
  • 二、集合查询的使用方法
    • 1.并操作(`Union`)
    • 2.交操作(`Intersect`)
    • 3.差操作(`Except`)
  • 总结


前言

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
<查询块>

【Mysql 集合查询】Mysql常被忽视的查询方法,你知道吗?_第1张图片

图 1 并

例如: 设数据库中有一教师表Teacher(Tno, Tname,Tdept,Tbirth,Sal),查询学校中所有师生的姓名。
【Mysql 集合查询】Mysql常被忽视的查询方法,你知道吗?_第2张图片
表1 Teacher表
【Mysql 集合查询】Mysql常被忽视的查询方法,你知道吗?_第3张图片

表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
<查询块>

【Mysql 集合查询】Mysql常被忽视的查询方法,你知道吗?_第4张图片

图 2 交

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

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

集合查询交操作:

Select Sname
From Student
Intersect
Select Tname
From Teacher;

【Mysql 集合查询】Mysql常被忽视的查询方法,你知道吗?_第5张图片

图 3 关系图示


3.差操作(Except)

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

<查询块>
		 Except
<查询块>

【Mysql 集合查询】Mysql常被忽视的查询方法,你知道吗?_第6张图片

图 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中集合查询的使用,大大减少了我们的工作量使得我们在查询中事倍功半!最后,祝大家在学习的路上,脚踏实地,虽艰辛,但值得,’“书山有路勤为径,学海无涯苦作舟。”!


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

你可能感兴趣的:(sql,数据库,Mysql,mysql,数据库,database)