美文网首页
SQL查询语句之子查询1

SQL查询语句之子查询1

作者: 发觉原来我只是250 | 来源:发表于2017-07-13 15:11 被阅读0次

【子查询】

1、 子查询的各个使用形式。

2、 分析子查询的主要意义。

实际上,对于整个的SQL语法而言,所有的组成,就是几个固定的查询语句:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。

而所谓的子查询,指的就是,在一个查询里面继续嵌套其他的查询语句。如果非要给子查询一个语法的话:

SELECT [ DISTINCT ] 分组字段 [别名],... | 统计函数, (

SELECT [ DISTINCT ] 分组字段 [别名],... | 统计函数

FROM 表名称 [别名],表名称 [别名],...

[ WHERE 过滤条件(s) ]

[ GROUP BY 分组字段,分组字段,... ]

[ HAVING 分组后的过滤条件 ]

[ ORDER BY 字段 [ ASC | DESC ],字段 [ ASC | DESC ],... ] )

FROM 表名称 [别名],表名称 [别名],... , (

SELECT [ DISTINCT ] 分组字段 [别名],... | 统计函数

FROM 表名称 [别名],表名称 [别名],...

[ WHERE 过滤条件(s) ]

[ GROUP BY 分组字段,分组字段,... ]

[ HAVING 分组后的过滤条件 ]

[ ORDER BY 字段 [ ASC | DESC ],字段 [ ASC | DESC ],... ] )

[ WHERE 过滤条件(s) (

SELECT [ DISTINCT ] 分组字段 [别名],... | 统计函数

FROM 表名称 [别名],表名称 [别名],...

[ WHERE 过滤条件(s) ]

[ GROUP BY 分组字段,分组字段,... ]

[ HAVING 分组后的过滤条件 ]

[ ORDER BY 字段 [ ASC | DESC ],字段 [ ASC | DESC ],... ] ) ]

[ GROUP BY 分组字段,分组字段,... ]

[ HAVING 分组后的过滤条件 (

SELECT [ DISTINCT ] 分组字段 [别名],... | 统计函数

FROM 表名称 [别名],表名称 [别名],...

[ WHERE 过滤条件(s) ]

[ GROUP BY 分组字段,分组字段,... ]

[ HAVING 分组后的过滤条件 ]

[ ORDER BY 字段 [ ASC | DESC ],字段 [ ASC | DESC ],... ] ) ]

[ ORDER BY 字段 [ ASC | DESC ],字段 [ ASC | DESC ],... ] ;

在一个查询语句之中,有可能会同时嵌套多个子查询。对于子查询的时候,给出几个非官方的使用方法:

◆ WHERE子句:子查询一般会返回单行单列、单行多列、多行单列数据。

◆ HAVING子句:子查询会返回单行单列,同时表示要使用统计函数。

◆ FROM子句:子查询返回多行多列数据(表结构)。

◆ SELECT子句:返回单行单列,不过一般不使用。

【在WHERE子句里面,使用子查询(重点)】

WHERE子句的作用是,进行数据行的筛选操作的。

范例:查询出低于公司 平均工资 的雇员信息

◆ 应该先统计出公司的平均工资的数值。

SELECT AVG(sal) FROM emp ;

◆ 以上的查询,返回单行单列,可以作为WHERE子句的过滤条件使用。

SELECT * FROM emp

WHERE sal<(SELECT AVG(sal) FROM emp ) ;

范例:查询出公司最早雇佣的雇员信息

◆ 使用MIN( )函数,找到最早的雇佣日期,返回单行单列数据。

SELECT MIN(hiredate) FROM emp ;

◆ 如果返回单行单列数据,并且又不使用统计函数,在WHERE子句中出现。

SELECT * FROM emp

WHERE hiredate=(SELECT MIN(hiredate) FROM emp ) ;

除了返回单行单列的内容之外,还可以返回单行多列,此类的操作,一般不会经常使用。

范例:查询与SCOTT从事同一工作,并且工资相同的雇员信息。

◆ 首先应该知道SCOTT的工作和工资。

SELECT job, sal FROM emp WHERE ename='SCOTT' ;

◆ 需要有另外的雇员在职位和工资上,与SCOTT的完全相同,由于此时返回的是单行多列的内容,所以需要使用( )进行描述。

SELECT * FROM emp

WHERE (job, sal)=(

SELECT job, sal FROM emp WHERE ename='SCOTT' )

AND ename<>'SCOTT' ;

如果说子查询返回的内容,是多行单列的话,那么,就表示: 一个操作的数据范围。所以,对于此类的判断,在SQL语句之中,提供有三个操作符:IN(应)、ANY(安你)、ALL噢。

1、 IN操作: 指的是与子查询返回的内容相同

查询经理们的工资

SELECT sal FROM emp WHERE job='MANAGER' ;

查询 工资 与经理们的工资 相同的 所有雇员信息

SELECT * FROM emp WHERE sal IN(

SELECT sal FROM emp WHERE job='MANAGER' ) ;

此过程,与之前所学的IN操作,完全相同,唯一的区别在于,之前学的IN的范围内容是自己设置的,而此时是通过子查询而来的。

那么,既然有了IN操作,就一定会有NOT IN操作。

查询工资与经理们的工资不同的所有雇员信息

SELECT * FROM emp

WHERE sal NOT IN(

SELECT sal FROM emp WHERE job='MANAGER' ) ;

SELECT * FROM emp

WHERE NOT sal IN(

SELECT sal FROM emp WHERE job='MANAGER' ) ;

但是,如果使用的是NOT IN或者是NOT ... IN,新的问题就出现了,子查询里面,不能够返回null。如果子查询返回了null,那么,最终的查询,不会有任何的结果出现。

范例:子查询返回了null

SELECT mgr FROM emp ;

SELECT * FROM emp WHERE empno NOT IN(

SELECT mgr FROM emp ) ;

相关文章

  • SQL查询语句之子查询1

    【子查询】 1、 子查询的各个使用形式。 2、 分析子查询的主要意义。 实际上,对于整个的SQL语法而言,所有的组...

  • Java自学-JDBC 查询

    在JDBC中使用ResultSet查询SQL语句 执行查询SQL语句 步骤 1 : 查询语句 executeQue...

  • mysql数据库查询语句

    1.简单的查询基本表的SQL语句 (1)查询语句 (2)查询语句 Student表的删除SQL语句: 选课表的操作...

  • SQL查询语句

    常用SQL查询语句 一、简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SE...

  • SQL查询语句之子查询2

    2、 ANY操作:一共分为三种形式: ◆ =ANY:功能与IN操作一样 查询 工资 与经理们的工资 相同的 所有雇...

  • 《SQL必知必会》笔记6-子查询、联结表join

    1 使用子查询 查询(query):任何SQL语句都是查询,但一般指SELECT语句。 SQL还允许创建子查询(s...

  • 搜索

    直接sql查询 用sql语句like查询,复杂的用sql语句拼接。 视图和存储过程查询 简化程序,提高执行效率,维...

  • MySQL面试题 | 附答案解析(十四)

    接上篇!!! 5. 什么是子查询 (1)QL语句的查询结果做为另一条查询语句的条件或查询结果 (2)SQL语句嵌套...

  • mysql基础——sql 执行流程

    内容 一条sql查询语句如何执行 一条sql更新语句如何执行 一 1条sql查询语句如何执行 1.1 执行流程例如...

  • Hibernate查询方式和策略

    1. 遍历HashSet 2. HQL查询语句 基本查询和SQL语句类似,但是面向对象。 条件查询 分页 setF...

网友评论

      本文标题:SQL查询语句之子查询1

      本文链接:https://www.haomeiwen.com/subject/kxwwhxtx.html