子查询

原创 2015年11月21日 15:14:36

不相关子查询:

--子查询先执行,然后再执行外部查询。外部查询会使用到子查询的

--返回值。

 

--查询挣得的比亚伯多的雇员的姓名和薪水

select last_name,salary

  from employees

  where salary > (select salary

                   from employees

                   where last_name='Abel');

 

 

 

--子查询可以放在比较操作符的左边,但是这样写可读性很差

select last_name,salary

  from employees

  where (select salary

                   from employees

                   where last_name='Abel') < salary;

 

--单行子查询:

--子查询返回单行单列一个值

 

--多行子查询:

--子查询返回多行单列多个值

 

--对于单行子查询的返回值,在外部查询要使用单行比较操作符

--进行比较:=、>,<,<=,>=

 

--查找和Chen干同样的工作,但是挣得比Chen多的雇员的信息

select last_name,job_id,salary

  from employees

  where job_id = (select job_id

                   from employees

                   where last_name='Chen')

    and salary > (select salary

                   from employees

                   where last_name='Chen');

 

--子查询中也可以用组函数

--本例显示了月薪等于最低月薪的雇员的姓名、工作编号和月薪

select last_name,job_id,salary

  from employees

  where salary = (select min(salary)

                   from employees);

 

--注意,如果子查询返回的结果集为空,那么会把null值带入到

--外部查询中,这可能会导致外部查询的结果集也为空

select last_name,salary

  from employees

   where job_id = (select job_id

                    from employees

                    where last_name='Haas');

 

 

--对于多行子查询,在外部查询中要比较这些值,必须

--使用多行比较操作符:3个:in  any  all

--其中,any all不能单独用,在其前面必须加上单行比较操作符。

--例如:<any  >any=any <all >all等

 

 

--本例显示了工作不是IT程序员,

--并且工资少于任何一个程序员的雇员的信息

select last_name,salary

  from employees

  where salary <any (select salary

                   from employees

                   where job_id='IT_PROG')

  and job_id <> 'IT_PROG';

 

 

--本例显示了工作不是IT程序员,

--并且工资少于所有程序员的雇员的信息

select last_name,salary

  from employees

  where salary <all (select salary

                   from employees

                   where job_id='IT_PROG')

  and job_id <> 'IT_PROG';

 

--当外部查询的where条件使用not in 操作符时,要特别

--注意:如果子查询的返回值中有一个null值,会导致

--外部查询的where条件也为null,从而外查询的结果集为空

 

--查询所有普通雇员(没有当官的)的姓名

select last_name

  from employees

  where employee_id not in (selectmanager_id

                             from employees);

 

--解决办法:排除子查询结果集中的null值

select last_name

  from employees

  where employee_id not in (selectmanager_id

                             from employees

                             where manager_idis not null);

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Oracle初级(子查询).doc

  • 2013年09月05日 21:00
  • 106KB
  • 下载

Oracle子查询

  • 2012年12月12日 22:23
  • 5KB
  • 下载

MySQL在字段中使用select子查询

前几天看别人的代码中看到在字段中使用select子查询的方法,第一次见这种写法,然后研究了一下,记录下来 大概的形式是这样的: select a .*,(select b.* from b where...

Oracle数据库-- 高级子查询chinese

  • 2012年02月01日 22:27
  • 329KB
  • 下载

MySQL如何将select子查询结果横向拼接后插入数据表中

我的要求具体是这样的。我有数据表audit的结构如下:+-----------+------------+------+-----+-------------------+-------+ | Fie...

子查询相关练习

  • 2016年01月04日 20:54
  • 13KB
  • 下载

数据库子查询

  • 2014年03月10日 10:38
  • 44KB
  • 下载

mysql 两表join与in子查询的比较

有两个表 promotion_full_reduction base_user_favorite_item 现在要查询用户收藏的商品中参加促销了的商品个数,有两种写法,一种是使用in子查询:SELEC...
  • joenqc
  • joenqc
  • 2017年06月16日 15:40
  • 1007

.9i10g_子查询语句(_70_页_).ppt

  • 2011年08月29日 15:09
  • 539KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:子查询
举报原因:
原因补充:

(最多只允许输入30个字)