专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 详解MySQL子查询

详解MySQL子查询

更新时间:2021-01-20 17:09:30 来源:赢咖4 浏览971次

子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。子查询允许把一个查询嵌套在另一个查询当中。MySQL子查询是在MySQL数据库中是使用频率比较高的一种查询类型,优化子查询,对于MySQL数据库的整个系统的性能也有直接的影响。

 

子查询可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和union等;但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set或者do。子查询的工作方式是:先处理内查询,由内向外处理,外层查询利用内层查询的结果嵌套查询不仅仅可以用于父查询select语句使用。还可以用于insert、update、delete语句或其他子查询中。

 

一、子查询的组成

1、包含标准选择列表组件的标准select查询。

2、包含一个或多个表或者视图名称的标准from子句。
3、可选的where子句。
4、可选的group by子句。
5、可选的having子句。

 

二、子查询的语法规则

1、子查询的select查询总是使用圆括号括起来。
2、不能包括compute或for.browse子句。
3、如果同时指定top子句,则可能只包括order by子句。
4、子查询最多可以嵌套到32层。个别查询可能会不支持32层嵌套。
5、任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。
6、如果某个表只出现在子查询中二不出现在外部查询中,那么该表的列就无法包含在输出中。

 

三、返回一个值的子查询
当子查询的返回值只有一个时,可以使用比较运算符如=、<、>、>=、<=、!=等将富查询和子查询连接起来。实例如下:

1.简单子查询

select name,age
from person
where age > ( select age
from person
where name = '张三');

 

2.like嵌套查询

select count(distinct(Tname)) --查询姓“张”的老师的个数
from Teacher
where Tname like '张%';

 

  • 返回一组值的子查询
    如果子查询的返回值不止一个,而是一个集合时,则不能直接使用比较运算符,可以在比较运算符和子查询之间插入ANY、SOME或ALL。其中等值关系可以用IN操作符。

 

1.in嵌套查询

in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。

select name
from person
where countryid in ( select countryid
from country
where countryname = '中国');

 

2.some嵌套查询

some在sql中的逻辑运算符号,如果在一系列比较中,有些值为True,那么结果就为True。some的语法是:

<表达式>{ =|<>|!=|>|>=|!>|<|<=|!<}some(子查询)

select name from person
where countryid = some ( select countryid from country --用等号和以下查询到的值比较,如果与其中一个相等,就返回
where countryname = '中国');

 

3.all嵌套查询

all是sql中的逻辑运算符好,如果一系列的比较都为true,那么结果才能为true。

<表达式>{ =|<>|!=|>|>=|!>|<|<=|!<}all(子查询)

select name from person
where countryid > all ( select countryid from country --当countryid大于以下返回的所有id,此结果才为True,此结果才返回
where countryname = '中国');

 

4.exists嵌套查询

exists是sql中的逻辑运算符号。如果子查询有结果集返回,那么就为True。exists代表“存在”的意义,它只查找满足条件的那些记录。一旦找到第一个匹配的记录后,就马上停止查找。

在MySQL数据库中的许多查询都离不开子查询,使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死。因此,子查询也是MySQL数据库中的重要知识点之一,在本站的MySQL教程中,针对MySQL子查询,会有专门的实例训练,帮助我们快速掌握子查询的技巧,还在犹豫什么,快开始学习MySQL子查询吧!

 

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>