注册 登录  
 加关注

网易博客网站关停、迁移的公告:

将从2018年11月30日00:00起正式停止网易博客运营
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风雨启示录

欢迎光临我的网店优优我心:http://uumyheart.taobao.com

 
 
 

日志

 
 

MySQL: 子查询  

2010-08-10 20:34:02|  分类: 数据库学习笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
子查询是将一个SELECT语句的查询结果作为中间结果,供另一个SELECT语句查询调用,子查询也叫做子选择或者嵌套选择;
SELECT studentNO
FROM (SELECT studentNO,sex
      FROM student
      WHERE age > 18) AS student18
WHERE sex='M'

从student表中查出年龄大于18的学号(studentNO)和性别(sex),作为中间结果集,并被命名为student18,然后从student18表中查出性别(sex)是男的('M')的学生的学号(studentNO)
子查询按返回结果集的不同分为4种:表子查询,行子查询,列子查询和标量子查询。
    表子查询:返回的结果集是一个表集合,N行N列(N>=1)。表子查询经常用于父查询的FROM子句中。
    行子查询:返回的结果集是一个表集合,一行N列(N>=1)。行子查询可以用于福查询的FROM子句和WHERE子句中。
    列子查询:返回的结果集是一个表集合,N行一列(N>=1)。
    标量子查询:返回的结果集是一个表集合,一行一列,也就是一个标量值。可以指定一个标量表达式的任何地方,都可以用一个标量子查询。
eg:行子查询
SELECT studentNO
FROM student
WHERE (sex,age) = (SELECT sex,age
                   FROM student
                   WHERE studentNO = 15
                   )

标量子查询:
SELECT studentNO
FROM student
WHERE sex = (SELECT sex
             FROM student
             WHERE studentNO = 15
            
)
 
3.使用Exist和Not Exist参数
 
这里的Exist和Not Exist用途及用法和在其他没有什么大的区别,我就简单举几个范例好了:
 
范例一:      SELECT DISTINCT store_type FROM Stores
                    WHERE EXISTS (SELECT * FROM Cities_Stores
                                  WHERE Cities_Stores.store_type = Stores.store_type);
范例二:   SELECT DISTINCT store_type FROM Stores
                       WHERE NOT EXISTS (SELECT * FROM Cities_Stores
                                   WHERE Cities_Stores.store_type = Stores.store_type);
范例三:  这个例子中嵌套使用了Not Exist语法,稍微注意一下:
               SELECT DISTINCT store_type FROM Stores S1
                    WHERE NOT EXISTS (
                               SELECT * FROM Cities WHERE NOT EXISTS (
                                       SELECT * FROM Cities_Stores
                                                 WHERE Cities_Stores.city = Cities.city
                                                         AND Cities_Stores.store_type = Stores.store_type));
 
支持子查询的语法有:SELECT,INSERT,UPDATE,DELETE,SET和DO。
 
子查询可以使用任何普通查询中使用的关键词:如DINSTINCT,GROUP BY,LIMIT,ORDER BY,UNION,ALL,UNION ALL等。可以使用<,>, <=, >=, =, <>运算符进行比较,也可以使用ANY ,IN和SOME进行集合的匹配。
注意insert在子查询中的用法:
1、如果只想插入某几行,用法如下:
insert into o_well_his_0107 ( date, x_data) select date, x_data from o_well_rt  where subwell_id = 103 ;
2、如果只想插入其中一行,但是必须确保select输出只有一行:
insert into o_well_his_0107  set date = (select date from o_well_rt  where subwell_id = 104 );
3、如果目标表,跟需要SELECT选出的字段一样,除了像1那样,还可以这样使用:
insert into o_well_his_0101  select  NEW.date,NEW.x_data,NEW.y_data,NEW.once_time;
  评论这张
 
阅读(2275)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018