设为首页
加为收藏
联系我们
  • 电子商务
  • 软件网络
  • 看天下
  • 营销财经
  • 关闭导航
  • 网络编程
  • 数据库类
  • 关闭导航
  • 网络编程
  • 社交礼仪
  • 数据库类
  • 人文地理
  • 关闭导航
  • 编程工具
  • 电子书籍
  • 关闭导航
  • 生活休闲
  • 演讲讲座
  • 视频教程
  • 经典影视
  • 关闭导航
  • 图文资讯:
    初识 MySQL
    初识 MySQL
    您的位置: 首页 > 文章中心 > 数据库类 > MySQL

    MySQL子查询 应用

    时间: 2008-09-10  信息来源: 新浪博客  作者: 编辑整理  点击数:

    内容提示:MySQL 4.1版以后有两种方法可以使用一个单独的查询从多个数据表中取得数据:使用连接(join)或者使用子查询(subquery)。本文将介绍MysQL子查询的应用.

      下面是这中类型的查询:

       SELECT * FROM cars c1 WHERE NOT EXISTS
        (SELECT * FROM passengers p1 WHERE NOT EXISTS
          (SELECT * FROM cars c2
             WHERE c2.compartment = p1.compartment
               AND c2.compartment = c1.compartment));

      这个查询的作用是请求查找所有存在乘客的汽车。为了理解这个结果集的含义,我们假设Smith在20号汽车,Jones在25号汽车,但是在cars表中没有包含25号汽车。这样就会有一个乘客―Jones―乘坐一个不存在的汽车。(在标准的数据库中,不会存在这种情况,可以通过使用主键/外键来约束这两个表间的数据完整性)。这个查询中的第二个NOT
      EXISTS子查询,返回true对于乘客Jones。
      另外,这里的一个乘客―Jones,没有乘坐20号汽车。因此第一个NOT
      EXISTS子查询在这里返回false。因为这里没有其他汽车被检查,这个查询的结果是空(返回零行)――这里没有汽车每一个乘客都乘坐。
      子查询的其他用法
      在sql标准1999中,Mysql提供了增强的子查询支持。在前面提到的行级子查询,现在支持一次比较多个列的值:

      SELECT ROW ('smith', 'auditor') =  (SELECT lname, job FROM clients WHERE clno = 10); 

      在这个例子中,子查询包含值为'smith' 和 'auditor'的数据。这些数据和ROW的值就行比较时,他们的内容一样,因此返回1(true)。
      你也可以把一个子查询,作为一个表名,放在from子句后面(就像oracle里面的用法一样,作为内部视图):

       SELECT * FROM (SELECT * FROM clients WHERE job LIKE 'a%') AS cl;

      为了取得这个查询的结果,mysql服务器熟悉取得子查询的结果,然后把结果集赋予别名(cl,在本例中)。然后让外部的查询使用。实际上,上面的例子可以被分解如下:
      SELECT * FROM cl;
      这里cl作为一个子查询的临时结果集:
      SELECT * FROM clients WHERE job LIKE 'a%';
      当子查询被使用在from 子句当中,关键字as是强制使用的;中间的临时结果必须被命名,作为外部的查询被引用。
      使用子查询修改数据
      子查询还有这样的一个功能:用来修改数据库的数据。这就是说,你可以把子查询放在delete,insert,update或者replace语句里面,我们举例说明:

       UPDATE clients SET account_balance =  (SELECT SUM(amount) FROM accounts where clno=clients.clno);

      这个update语句为每一个客户修改 account_balance 数据,通过计算account表中的客户帐号。
      这里有一个提示:目前不允许使用同一个表的子查询来修改这个表中的数据。
      
      总结:
      子查询在mysql 4.1版中新添加,现在支持数量、行、表的子查询。
      比较操作符号= <> < <= > >=可以使用在子查询中,并且可以使用[NOT] IN 和 [NOT] EXISTS子句。
      表级子查询可以使用短句ANY/SOME 或者 ALL做比较。
      子查询可以用来修改数据。
     
    Tags: MySQL,子查询 责任编辑:aboutstudy
     
      关于我们 友情链接 网站地图 广告服务 联系我们 管理登陆  
      鄂ICP备07014143号  
      Powered by EmpireCMS 5.0  
      Template designed by 直来直往.
      联系信息: QQ 365931563 Email:jiangtian001@sina.com  
      ©CopyRight 2007-2008, SKDE.CN, Inc. All Rights Reserved