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

    MySQL子查询 应用

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

    内容提示:MySQL 4.1版以后有两种方法可以使用一个单独的查询从多个数据表中取得数据:使用连接(join)或者使用子查询(subquery)。本文将介绍MysQL子查询的应用.
             MySQL 4.1版的发布,现在有两种方法可以使用一个单独的查询从多个数据表中取得数据:使用连接(join)或者使用子查询(subquery)。我们来举例说明,假设你有一下的表格:
       
       CREATE TABLE clients (
        clno INT,
        fname VARCHAR(15),
        lname VARCHAR(15),
        job VARCHAR(15),
        account_balance DECIMAL(7,2));
      
      INSERT INTO clients VALUES
        (10, 'sam','smith','auditor',5525.75),
        (20,'james','jones','manager',8960.25);
      
      CREATE TABLE firms (
        clno INT,
        company VARCHAR(15),
        city VARCHAR(15));
      
      INSERT INTO firms VALUES
        (10,'abc co','leduc'),
        (20,'def ltd','nisku'),
        (30,'ghi inc','nisku');

      下面我们使用连接(join)方法取得client表格中id为10的数据。

       SELECT
        fname, lname, city, job, company, account_balance
        FROM clients c, firms f
        WHERE c.clno = f.clno
          AND c.clno = 10;

      但是你并非总是可以通过使用连接(join)方式查询你所需要的数据。举一个例子,假如你需要最大的帐户表中的客户信息。下面的查询,看起来好像应该可以正确返回你所需要的数据,但是实际上会发生错误:

       SELECT
        fname, lname, city, job, company, account_balance
        FROM clients c, firms f
        WHERE c.clno = f.clno
          AND c.account_balance = MAX(c.account_balance);

      错误的原因是:invalid use of group
      function,就是这个聚合函数,Max,不允许出现在where子句当中。这也就是子查询诞生的原因,在本文当中,我将简短的描述添加到mysql数据库系统的子查询功能。
      子查询就是包含在括号中选择语句
      简单的将,子查询就是一个被写在另一个sql语句(一般情况下,是select语句,但是不总是这样)中的查询语句。判断是否是子查询的方式是看查询语句是否在括号中间,下面是一个例子。

       SELECT * FROM clients WHERE clno IN                -- outer query
         (SELECT clno FROM firms WHERE city = 'leduc');  -- inner query
      SELECT * FROM clients WHERE clno IN                -- 外部查询
         (SELECT clno FROM firms WHERE city = 'leduc');  -- 内部查询
       
      这个查询将会返回表clients中clno中所有城市为’leduc’的记录。为了得到结果,dbms首先会取得内部查询的结果,查找所有表
      clno中所有城市为‘leduc’的记录。然后比较表clients,返回符合clno值的每一行。因为只有一个值符合子查询,实际上,等效于下面语句:

       SELECT * FROM clients WHERE clno = 10;

      当然,这个查询语句也可以写成以下方式:

       SELECT
        c.clno, fname, lname, job, account_balance
        FROM clients c INNER JOIN firms f USING (clno)
        WHERE city = 'leduc';

     
     1 2 3  下一页
    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