Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > MySQL的嵌套查询
【标  题】:MySQL的嵌套查询
【关键字】:MySQL
【来  源】:http://www.cublog.cn/u/8718/showart.php?id=113446

MySQL的嵌套查询

Your Ad Here
1. SELECT语句的子查询:
语法:   SELECT ... FROM (subquery) AS name ...

先创建一个表:
CREATE TABLE t1 (s1 INT, s2 CHAR(5), s3 FLOAT);
INSERT INTO t1 VALUES (1,'1',1.0);
INSERT INTO t1 VALUES (2,'2',2.0);

我们就可以进行以下的嵌套查询了:
SELECT sb1,sb2,sb3
     FROM (SELECT s1 AS sb1, s2 AS sb2, s3*2 AS sb3 FROM t1) AS sb
     WHERE sb1 > 1;

结果是: 2, '2', 4.0.

我们知道下面语句是不会得到正确结果的,因为对经过Group by排序的集合进行求均值是不能得到正确答案的:
SELECT AVG(SUM(column1)) FROM t1 GROUP BY column1

所以我们可以通过下面的嵌套查询实现同样的效果:
SELECT AVG(sum_column1)
     FROM (SELECT SUM(column1) AS sum_column1
         FROM t1 GROUP BY column1) AS t1;

2.行的子查询(Row Subquery):
看下面的例子:
SELECT * FROM t1 WHERE ROW(1,2) = (SELECT column1, column2 FROM t2);
这个查询是返回column1等于column2的结果行。Row函数中的1和2相当于构造参数。想必Blogjava上的同志对这些应该比较清楚,也不去详细介绍了。

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));

4.条件关联关系查询:
解释起来麻烦,直接看例子吧:
SELECT column1 FROM t1 AS x
   WHERE x.column1 = (SELECT column1 FROM t2 AS x
       WHERE x.column1 = (SELECT column1 FROM t3
          WHERE x.column2 = t3.column1));
跟其他数据库做法是一样的。

5.其他使用方法和注意:
除了上面这些还有很多很多,不过就不去细讲了,因为这些跟别的数据库差不多,只是为了给大家一个参考,提提就够了。

      SELECT (SELECT s1 FROM t2) FROM t1;
      SELECT (SELECT s2 FROM t1);

支持子查询的语法有:SELECT,INSERT,UPDATE,DELETE,SET和DO。

子查询可以使用任何普通查询中使用的关键词:如DINSTINCT,GROUP BY,LIMIT,ORDER BY,UNION,ALL,UNION ALL等。可以使用<,>, <=, >=, =, <>运算符进行比较,也可以使用ANY ,IN和SOME进行集合的匹配。
DOS-FDISK分区命令的隐藏功能:【上一篇】
MySQL 4.1 字符集支持的原理 (转):【下一篇】
【相关文章】
  • mysql的日志
  • MYSQL输出说明
  • MYSQL基本使用
  • MySQL5.0-win32……(1)
  • mysql之my.cnf
  • 悬而未决:MYSQL的数据表可以加密吗?
  • 怎么样用PHPMyAdmin 将*.Sql数据倒入MYSQL[经典推荐]
  • Apache+PHP+MySQL+Discuz服务器的简单架设[续]
  • 也谈 mysql 数据库的同步问题
  • 在MySql中添加远程控制用户
  • 【随机文章】
  • MSTP拓宽ADSL数据通道
  • 走向实用化的40Gb/s技术
  • Global.asa 参考
  • 由一个vc内嵌asm的BUG引出的...
  • ksedmp: internal or fatal error?
  • DB2数据库功能及性能使用心得
  • EJB学习笔记(3)
  • IDS的规则建立(3)
  • 服务器操作系统安装(RedHat8.0)
  • Cisco常见路由器密码和版本恢复方法探讨
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.