概念:

所谓子查询,即一个select语句中嵌套了另外的一个或者多个select语句

需求:查找和Smith同部门的所有员工的id和last_name

目标: 员工id,last_name

from:  s_emp

条件: s_emp.dept_id = Smith所在部门的id?

select id,last_name

from s_emp

where dept_id = ?

阶段目标: Smith所在部门的id

目标: dept_id

from : s_emp

条件: last_name = 'Smith';

select dept_id

from s_emp

where last_name = 'Smith';

组合:

select id,last_name

from s_emp

where dept_id = (

select dept_id

from s_emp

where last_name = 'Smith'

)

应用场景:

1.一条查询语句的查询条件依赖另外一条查询语句的查询结果。

2.一条查询语句的查询结果是作为另外一条查询语句的查询表(查询依据)。

3.在DML操作中使用子查询(后期介绍)

子查询的基本原则:

1.在查询中可以有单行子查询和多行子查询

2.子查询可以出现在操作符的左边或者右边

3.子查询在很多sql命令中都可以使用

4.嵌套查询先执行,然后将结果传递给主查询。

一、比较值不确定,需要另外一个select语句执行后才能得到,使用子查询

语法:

select ...

from ...

where col_name 比较操作符 (

select ...

from ...

where ...

group by ...

having...

)

group by ...

having...

order by ...

单值子查询:子查询的结果为1个

需求:

1.查询和Simith职称相同的所有员工的last_name和职称

分析步骤:

1.确定最终查询结果(目标/主查询):查询员工的last_name和title

from : s_emp

条件 : title = Smith的职称

select last_name,title

from s_emp

where title = ?

2.确定条件(子查询):Smith的职称

from : s_emp

条件 :last_name = 'Smith';

select title

from s_emp

where last_name = 'Smith';

3.组合

select last_name,title

from s_emp

where title = (select title

from s_emp

where last_name = 'Smith');

2.查看工资大于Chang员工工资的所有员工的id和名字。

最终目标:员工的id,last_name

from:s_emp

条件: salary > Chang员工的工资

select id,last_name

from s_emp

where salary > ?

阶段目标:Chang员工的工资

from : s_emp

条件: last_name = 'Chang';

select salary

from s_emp

where last_name = 'Chang';

组合:

3.查看员工工资小于平均工资的所有员工的id和名字

例如:查找和Smith同一个部门的员工的id和last_name

多值子查询:子查询的结果为多个

需求:

1.查询所在区域为2号区域的所有部门的员工的id和last_name

1.确定最终查询结果: 员工的id, last_name

from : s_emp

条件 :s_emp.dept_id  in (?);

select id,last_name

from s_emp

where dept_id  in ?

2.确定条件:所在区域为2号部门id

子查询:部门id

from : s_dept

条件: region_id = 2;

select id

from s_dept

where region_id = 2;

3.组合:

select id,last_name

from s_emp

where dept_id  in (

select id

from s_dept

where region_id = 2

)

子查询出现情况二:

查找的内容不确定,需要从构建出来一个查询的表

语法:

select ....

from (select .... from ....) b

where ......

练习:查询各部门的id,name 和部门员工的平均工资

1.查询目标:

需要部门的id,部门的name ------ 从 s_dept表中

部门员工的平均工资 avg(salary) --------- salary只有s_emp表中有

条件 : 部门id,name和部门 员工,因此要求部门的id跟员工所在部门的id相等才连接

select id,name, 平均工资

from s_dept , ?

where s_dept.id = ?.dept_id;

2.查询条件

select(dept_id,avg(salary) sal)

from s_emp

group by dept_id;

3.组合:

select id,name,b.sal

from s_dept dept,(select dept_id,avg(salary) sal

from s_emp

group by dept_id

) b

where dept.id = b.dept_id;

Oracle子查询(嵌套查询)的更多相关文章

  1. SQL子查询/嵌套查询

    sql子查询 嵌套SELECT语句 嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为 ...

  2. 关于mysql中的数据查询—嵌套查询

    嵌套查询 一个SELECT  FROM  WHERE语句称为一个查询块. 嵌套查询:将一个查询块嵌套在另一个查询块的WHERE子句或者HAVING短语的条件中的查询. 注:子查询的SELECT语句中不 ...

  3. mongodb多个条件查询in,日期查询,嵌套查询,统计集合总数等常用实例

    1. 多个条件查询in in db.inventory.find( { qty: { $in: [ 5, 15 ] } } ) 2. 日期查询 db.books.find({}) 查询时间大于6-,结 ...

  4. 数据库SQL语言学习--上机练习2(连接查询 嵌套查询)

    上机练习2 1.              启动SQL Server 2008中的 SQL Server Management Studio. 2.              针对下面三张基本表进行操 ...

  5. SQL——嵌套查询与子查询

    前言 sql的嵌套查询可以说是sql语句中比较复杂的一部分,但是掌握好了的话就可以提高查询效率.下面将介绍带in的子查询.带比较运算符的子查询.带any/all的子查询.带exists的子查询以及基于 ...

  6. SQL Server 之 子查询与嵌套查询

    当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询. 1 子查询 子查询是一个嵌套在select.insert.update或delete语句或其他子查询中的查询.任何允许使用 ...

  7. MySQL——优化嵌套查询和分页查询

    优化嵌套查询 嵌套查询(子查询)可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.嵌套查询写起来简单,也容易理解.但是,有时候可以被更有效率的连接(JOIN ...

  8. SQL连接查询和嵌套查询详解

    连接查询 若一个查询同时涉及两个或两个以上的表,则称之为连接查询.连接查询是数据库中最最要的查询, 包括: 1.等值连接查询 2.自然连接查询 3.非等值连接查询 4.自身连接查询 5.外连接查询 6 ...

  9. oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by

    select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...

随机推荐

  1. 在 Django 模板中遍历复杂数据结构的关键是句点字符

    在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...

  2. 通过Queue的构造函数的可选参数maxsize来设定队列长度

    创建一个"队列"对象 import Queuemyqueue = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无 ...

  3. JavaScript入门篇 第三天(认识DOM)

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...

  4. BizTalk 开发系列(三十九) BizTalk Server 2009技术概览

    BizTalk Server 2009已经发布一段时间了,之前Beta版发布的时候也写过一篇文章<BizTalk Server 2009 Beta初体验>, 当时比较了2006 R2与20 ...

  5. redis与memcache的区别2

    总结一: memcache官方定义 Free & open source, high-performance, distributed memory object caching system ...

  6. DHTML概述

    <!-- DHTML概述:动态的HTML.不是一门语言,是多项技术综合体的简称. 其中包含了HTML.CSS.DOM.JavaScript. 这四个技术在动态HTML页面效果定义时,都处于什么样 ...

  7. Windows下如何安装Python的第三方库

    有下面几个办法: 1. 通过http://www.lfd.uci.edu/~gohlke/pythonlibs/这个网站, 下载whl文件, 解压之后会有三个文件夹, 将最短名字的那个文件夹复制到C: ...

  8. markdown语法测试

    斜体 粗体 百度 标题一 -------- 标题二 ======== 标题三 标题四 有序列表一 有序列表二 无序列表一 无序列表二 这是引用的文字 这是一句行内代码var=1 public clas ...

  9. CentOS7安装配置SAMBA服务器

    假设我们有这样一个场景 共享名 路径 权限 SHAREDOC /smb/docs 所有人员包括来宾均可以访问 RDDOCS /smb/tech 仅允许特定组的用户进行读写访问 特定组的组名为RD,目前 ...

  10. Jmeter多机并发压测IP地址问题

    meter.engine.RemoteJMeterEngineImpl: Local IP address=192.168.56.1 不能成功链家到相应的压力机 解决步骤: 1.找到jmeter.ba ...