AntSoul

它总是在行走,行走,永远的行走…… 行走是它生存的恒久姿态和最佳造型。 它似乎有一双不知疲倦的脚。 ———我说的是蚂蚁。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  42 随笔 :: 0 文章 :: 1 评论 :: 0 Trackbacks

    子查询是指在其它的SQL语句中的SELECT语句,也叫嵌套查询。但是,当在DDL语句中引用子查询时,可以带有ORDER BY子句;在WHERE子句,SET字句中不能带有ORDER BY子句。subQuery具有以下的一些作用:
    →  同坐在INSERT或CREATE TABLE语句中使用subQuery,可以将原表数据插入到目标表中。

    →  通过在CAREATE VIEW或CREATE MATERIALIZED VIEW中使用subQuery,可以定义视图或者实例化视图所对应的SELECT语句。

    →   通过在UPDATE语句中使用subQuery可以修改一列或者多列数据。

    →   在WHERE,HAVING,START WITH子句中可以使用subQuery,可以提供条件值。

一般来说根据返回的结果不同,subQuery被分为单行subQuery,多行subQuery和多列subQuery。

单行subQuery: 只返回一行数据的subQuery。例如:
 SELECT name,salary,deptno, FROM employee WHERE deptno =(SELECT deptno FROM employee WHERE name ='antsoul');


多行subQuery:返回多行数据的subQuery。当在WHERE子句中使用的时候,必须使用多行比较符。(IN,ALL,ANY)  例如:
使用IN:
SELECT name,job,salary,deptno FROM employee WHERE job IN (SELECT distinct job FROM employee WHERE deptno = 10);

使用ALL:
SELECT name,salary,deptno FROM employee WHERE salary > ALL(SELECT salary  FROM employee WHERE deptno = 30);

使用ANY:
SELECT name,salary,deptno FORM employee WHERE salary >ANY(SELECT salary FOMR employee WHERE deptno =30);

多列subQuery:当多列subQuery在WHERE子句中使用时候,必须运用多行比较符(IN,ALL,ANY)。例如:
显示与antsoul部门和岗位完全相同的职员。
SELECT name,job,salary,deptno FROM employee WHERE (deptno,job) = (SELECT deptno,job FORM employee WHERE name ='antsoul');

相关subQuery: 需要引用主查询表列的子查询语句,相关子查询是通过关键字EXISTS来实现的。例如:
显示工作在“ShangHai ” 的所有职员。
SELECT name,job FORM employee WHERE EXISTS(SELECT 1 FROM dept WHERE deptno = emp.deptno AND dept.loc = 'ShangHai');

posted on 2007-03-07 17:39 yok 阅读(567) 评论(0)  编辑  收藏 所属分类: DataBase

只有注册用户登录后才能发表评论。


网站导航: