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

136 篇文章 26 订阅
11 篇文章 1 订阅

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 查询不存在(用法相同)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值