MySQL子查询(嵌套查询)-----详细

MySQL子查询(嵌套查询)

一、子查询
1、子查询允许把一个查询嵌套在另一个查询当中(也就是嵌套查询)

2、子查询可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、 limit、join和union等,但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set或者do

二、子查询的分类
1、表子查询:
  ------返回的结果集是 N 行 N 列

2、标量子查询:
  ------返回单一值的标量,最简单的形式

3、列子查询:
  ------返回的结果集是 N 行 1 列

4、行子查询:
  ------返回的结果集是 1 行 N 列

可以使用的操作符: = , >, <, >=, <=, <>, ANY, IN, SOME, ALL, EXISTS
 
三、实例
1、表子查询:
指子查询返回的结果集是: N 行 N 列,的一个表数据

SELECT * FROM article WHERE (title, content, uid) IN (SELECT title, content, uid FROM blog);	

2、标量子查询:
是指子查询返回的是单一值的标量,如一个数字或一个字符串,也是子查询中最简单的返回形式。可以使用:=, >, < ,>=, <=, <>,这些操作符对子查询的标量结果进行比较,通常子查询的位置在比较式的右侧

SELECT * FROM article WHERE uid=(SELECT uid	FROM user WHERE	status=1 ORDER BY uid DESC LIMIT 1)	
SELECT * FROM t1 WHERE column1=(SELECT MAX(column2) FROM t2);	
SELECT * FROM article AS t WHERE column2=(SELECT COUNT(*) FROM article WHERE article.uid=t.uid);

3、列子查询:
指子查询返回的结果集是: N 行 1 列,该结果通常来自对表的某个字段查询返回
可以使用:IN、 ANY、 ALL操作符

SELECT * FROM article WHERE uid IN (SELECT uid FROM user WHERE status=1);
SELECT s1 FROM table1 WHERE s1>ANY (SELECT s2 FROM table2);		
SELECT s1 FROM table1 WHERE s1>ALL (SELECT s2 FROM table2);	

4、行子查询 :
指子查询返回的结果集是: 1 行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集

SELECT * FROM article WHERE (title,content,uid)=(SELECT title, content,uid FROM blog WHERE bid=2);

 
四、EXISTS谓词
EXISTS是一个非常牛叉的谓词,它允许数据库高效地检查指定查询是否产生某些行

select * from t1 where city='shanghai' and EXISTS(select * from t2 where t1.cid=t2.cid);	

例如:
查询 x1 表中 name 字段下是否有 zhangsan,若有则查询 x1 表中的记录,否则不查询

select * from x1 where EXISTS(select name from fruits where name='zhangsan');

查询 x1 表中是否存在 num=7 的记录,若存在,则查询 x1 表中 success 大于 80 的记录

select * from x1 where success>80 and EXISTS (select num from x1 where num=7);

相反,可以使用 not exists 查询不存在(用法相同)


MySQL子查询(嵌套查询)-----详细_第1张图片
感谢每一个认真阅读我文章的人!!!
如果下面这些资料用得到的话可以直接拿走:

1、自学开发或者测试必备的完整项目源码与环境

2、测试工作中所有模板(测试计划、测试用例、测试报告等)

3、软件测试经典面试题

4、Python/Java自动化测试实战.pdf

5、Jmeter/postman接口测试全套视频获取

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。如果在学习或工作中遇到问题可以直接点击此链接进群询问,群里也会有大神帮忙解答,也可以手动添加群号 743262921 备注222

你可能感兴趣的