Oracle子查询过程中值得注意的事项


  本文标签:Oracle子查询

  我们都知道HAVING中我们可以用Oracle子查询 ,而且两个查询的语句的结果是可做集合操作的,如果你想知道HAVING中我们是如何使用Oracle子查询的?以及两个查询的语句的结果是可做集合的实际操作是如何进行的?以下的内容就有相关的答案  。

  1. 查询语句可以嵌套

  

  例如: SELECT …… FROM (SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2;

  

  2. 何处可用Oracle子查询?

  

  当查询条件是不确定的条件时

  

  DML(insert, update,delete)语句里也可用子查询

  

  HAVING里也可用子查询

  

  3. 两个查询语句的结果可以做集合操作

  

  例如:

  

  并集UNION(去掉重复记录)

  

  并集UNION ALL(不去掉重复记录)

  

  10

  

  J2EE @ zxw

  差集MINUS,

  

  交集INTERSECT

  

  4. 子查询的注意事项

  

  先执行括号里面的SQL语句,一层层到外面

  

  内部查询只执行一次

  

  如果里层的结果集返回多个,不能用= > < >= <=等比较符要用IN.

  

  5. Oracle子查询的例子(1)

  

  

  1. SQL> select title,avg(salary) from s_emp   
  2. group by title Having avg(salary) =   
  3. (select min(avg(salary)) from s_emp   
  4. group by title);  

  

  

  找到最低平均工资的职位名称和工资

  

  子查询的例子(2)

  

  Oracle子查询可以用父查询里的表名

  

  这条SQL语句是对的:

  

  

  1. SQL>select cty_name from city where st_code in   
  2. (select st_code from state where st_name=TENNESSEE and   
  3. city.cnt_code=state.cnt_code);  

  

  

  说明:父查询调用子查询只执行一次.

  

  6.取出结果集的80 到100的SQL语句

  

  Oracle处理每个结果集只有一个ROWNUM字段标明它的逻辑位置,

  

  并且只能 用ROWNUM<100, 不能用ROWNUM>80  。

  

  以下是经过分析后较好的两种Oracle取得结果集80到100间的SQL语句

  

  ( ID是唯一关键字的字段名 )

  

  语句写法:

  

  

  1. SQL>select * from (   
  2. ( select rownum as numrow, c.* from (   
  3. select [field_name,...] 
    from table_name where 条件1 order by 条件2) c)   
  4. where numrow > 80 and numrow <= 100 )  

  

  

  order by 条件3;

  

  以上的相关内容就是对Oracle子查询的介绍,望你能有所收获  。