ENAME JOB SAL

---------- --------- ----------

JONES MANAGER 2975

BLAKE MANAGER 2850

CLARK MANAGER 2450

SCOTT ANALYST 3000

KING PRESIDENT 5000

FORD ANALYST 3000

-- HAVING 子句中使用子查询

SQL > select deptno , min ( sal )

2 from emp

3 group by deptno

4 having min ( sal ) >

5 ( select min ( sal )

6 from emp

7 where deptno = 20 );

DEPTNO MIN ( SAL )

---------- ----------

30 950

10 1300

-- FROM 子句中使用子查询

SQL > select empno , ename

2 from

3 ( select empno , ename

4 from emp

5 where deptno = 20 );

EMPNO ENAME

---------- ----------

7369 SMITH

7566 JONES

7788 SCOTT

7876 ADAMS

7902 FORD

-- 单行子查询中的常见错误

-- 子查询的结果返回多于一行

SQL > select empno , ename

2 from emp

3 where sal =

4 ( select sal

5 from emp

6 where deptno = 20 );

( select sal

ERROR at line 4 :

ORA - 01427 : single - row subquery returns more than one row

-- 子查询中不能包含 ORDER BY 子句

SQL > select empno , ename

2 from emp

3 where sal >

4 ( select avg ( sal )

5 from emp

6 order by empno );

order by empno )

ERROR at line 6 :

ORA - 00907 : missing right parenthesis

-- 子查询内部没有返回行,如下语句可以正确执行,但没有数据返回

SQL > select ename , job

2 from emp

3 where empno =

4 ( select empno

5 from emp

6 where mgr = 8000 );

no rows selected

六、多行子查询

返回多个行

使用多行比较运算符 IN ,ANY ,ALL

在多行子查询中使用 IN 操作符 */

SQL > select empno , ename , job

2 from emp

3 where sal in

4 ( select max ( sal )

5 from emp

6 group by deptno );

EMPNO ENAME JOB

---------- ---------- ---------

7698 BLAKE MANAGER

7902 FORD ANALYST

7788 SCOTT ANALYST

7839 KING PRESIDENT

-- 在多行子查询中使用 ANY 操作符

SQL > select empno , ename , job

2 from emp

3 where sal < any

4 ( select avg ( sal )

5 from emp

6 group by deptno );

EMPNO ENAME JOB

---------- ---------- ---------

7369 SMITH CLERK

7900 JAMES CLERK

7876 ADAMS CLERK

7521 WARD SALESMAN

7654 MARTIN SALESMAN

7934 MILLER CLERK

7844 TURNER SALESMAN

7499 ALLEN SALESMAN

7782 CLARK MANAGER

7698 BLAKE MANAGER

-- 在多行子查询中使用 ALL 操作符

SQL > select empno , ename , job

2 from emp

3 where sal > all

4 ( select avg ( sal )

5 from emp

6 * group by deptno )

EMPNO ENAME JOB

---------- ---------- ---------

7566 JONES MANAGER

7788 SCOTT ANALYST

7839 KING PRESIDENT

7902 FORD ANALYST

七、相关子查询

子查询中使用了主查询中的某些字段,主查询每扫描一行都要执行一次子查询 */

-- 查询工资高于同一部门的员工的部门号,姓名,工资

SQL > select deptno , ename , sal

2 from emp outer

3 where sal >

4 ( select avg ( sal )

5 from emp inner

6 where inner. deptno = outer. deptno );

DEPTNO ENAME SAL

---------- ---------- ----------

30 ALLEN 1600

20 JONES 2975

30 BLAKE 2850

20 SCOTT 3000

10 KING 5000

20 FORD 3000

-- 查询负责管理其它员工的员工记录 ( 使用 exists)

SQL > select empno , ename

2 from emp outer

3 where exists

4 ( select empno

5 from emp inner

6 where inner. mgr = outer. empno );

EMPNO ENAME

---------- ----------

7566 JONES

7698 BLAKE

7782 CLARK

7788 SCOTT

7839 KING

7902 FORD

-- 查询不管理其它员工的职员 (not exists)

SQL > l3

3 * where exists

SQL > c / where / where not

3 * where not exists

SQL > l

1 select empno , ename

2 from emp outer

3 where not exists

4 ( select empno

5 from emp inner

6 * where inner. mgr = outer. empno )

SQL > /

EMPNO ENAME

---------- ----------

7369 SMITH

7499 ALLEN

7521 WARD

7654 MARTIN

7844 TURNER

7876 ADAMS

7900 JAMES

7934 MILLER

EXISTS NOT EXISTS IN NOT IN 的比较

EXISTS IN 的不同:

EXISTS 只检查行的存在性 ,IN 要检查实际值的存在性 ( 一般情况下 EXISTS 的性能高于 IN)

NOT EXISTS NOT IN

当值列表中包含空值的情况下 ,NOT EXISTS 则返回 true , NOT IN 则返回 false .

-- 看下面的查询,查询部门号不在 emp 表中出现的部门名称及位置

SQL > select deptno , dname , loc

2 from dept d

3 where not exists

4 ( select 1

5 from emp e

6 * where e . deptno = d . deptno )

DEPTNO DNAME LOC

---------- -------------- -------------

40 OPERATIONS BOSTON

--IN 与空值

SQL > SELECT *

2 FROM emp e

3 WHERE e . empno NOT IN (

4 SELECT 7369 FROM dual

5 UNION ALL

6 SELECT NULL FROM dual

7 )

8 ;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

SQL > SELECT *

2 FROM emp e

3 WHERE e . empno IN ( '7369' ,NULL)

4 ;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

7369 SMITH CLERK 7902 1980 - 12 - 17 800.00 20

注:子查询要包含在括号内

子查询一般放在比较条件的右侧

除非进行 TOP N 分析,否则不要在子查询中使用 ORDER BY */

八、多列子查询

1 、成对比较

查询工资为部门最高的记录 */

SQL > select * from scott . emp

2 where ( sal , job ) in

3 ( select max ( sal ), job from scott . emp group by job );

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7934 MILLER CLERK 7782 23 - JAN - 82 1300 10

7499 ALLEN SALESMAN 7698 20 - FEB - 81 1600 300 30

7839 KING PRESIDENT 17 - NOV - 81 5000 10

7566 JONES MANAGER 7839 02 - APR - 81 2975 20

7902 FORD ANALYST 7566 03 - DEC - 81 3000 20

7788 SCOTT ANALYST 7566 19 - APR - 87 3000 20

2 、非成对比较 , 实现了与上述类似的功能 */

SQL > select * from scott . emp

2 where sal in ( select max ( sal ) from scott . emp group by job )

3 and job in ( select distinct job from scott . emp );

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7934 MILLER CLERK 7782 23 - JAN - 82 1300 10

7499 ALLEN SALESMAN 7698 20 - FEB - 81 1600 300 30

7566 JONES MANAGER 7839 02 - APR - 81 2975 20

7788 SCOTT ANALYST 7566 19 - APR - 87 3000 20

7902 FORD ANALYST 7566 03 - DEC - 81 3000 20

7839 KING PRESIDENT 17 - NOV - 81 5000 10

九、嵌套子查询

即位于子查询内部的子查询,嵌套层数最多可达层。然而应尽量避免使用嵌套子查询,使用表连接的查询性能会更高 */

SQL > select deptno , Num_emp

2 from ( select deptno , count ( empno ) as Num_emp from emp group by deptno ) d

3 where Num_emp > 3 ;

DEPTNO NUM_EMP

---------- ----------

30 6

20 5

注意:子查询对空值的处理

除了 count(*) 外,都会忽略掉空值 */

十、更多 */

Oracle 数据库实例启动关闭过程

Oracle 10g SGA 的自动化管理

使用 OEM,SQL*Plus,iSQL*Plus 管理 Oracle 实例

Oracle 实例和 Oracle 数据库 (Oracle 体系结构 )

SQL 基础 --> 常用函数

SQL 基础 --> 过滤和排序

SQL 基础 -->SELECT 查询

--=========================--SQL 基础--> 子查询--=========================    /*一、子查询    子查询就是位于SELECT、UPDATE、或DELETE语句中内部的查询    二、子查询的分类    单行子查询        返回零行或一行    多行子查询        返回一
子查询 是在一个完整的查询语句中,嵌套不同功能的小查询,从而完成复杂查询的一种编写形式。本部分主要介绍非关联 子查询 ,关联 子查询 的适用场景,语句写法,执行逻辑及相对应的注意事项。 1.非关联 子查询 1.1执行逻辑 1.2在WHERE子句中使用 子查询 1.2.1 子查询 返回一个具体数据 1.2.2 子查询 返回一条数据 1.2.3 子查询 返回多行单列数据 1.3在HAVING子句中使用 子查询 1.4在FROM子句中使用 子查询 2.关联 子查询 2.1在细分的组内进行比较 2.2使用EXISTS
子查询 允许把一个查询嵌套在另一个查询当中。 子查询 ,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。 子查询 可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和union等;但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set或 者do。
子查询 一、为什么会使用 子查询 二、什么是 子查询 三、 子查询 的具体使用+实例1、WHERE子句后使用 子查询 2、FROM子句后使用 子查询 一、为什么会使用 子查询 虽然可以通过连接查询来实现多表查询数据记录,但不建议使用,因为连接查询的性能很差,为什么呢?我们来进行分析,例如 我们要查询部门表dept 和雇员表employee中的数据记录,一般可能会写成: SELECT * FROM Course c1,Scroe c2 WHERE c1.c_id=c2.c_id; 对于这条 SQL 语句,在 数据库 执行的时候,会先对
### 回答1: SAP HANA 数据库 是一种面向内存的关系型 数据库 ,具有高速的数据处理和查询能力。 SQL (Structured Query Language)是一种用于 数据库 管理的标准化语言,用于查询、添加、删除和修改 数据库 中的数据。 SAP HANA 数据库 SQL 参考手册为用户提供了详细的 SQL 语法和语句用法,使得用户能够充分利用 SAP HANA 数据库 的强大功能和高效性能。这个手册提供了丰富的语句和函数,是 SAP HANA 数据库 操作者必备的工具之一,可以让用户根据自己的需求和数据特点,编写出高效、精确的 SQL 语句。 手册包含了基本的 SQL 语法和数据类型,包括数据的增删改查等常用操作。同时,它还提供了高级的特性和函数,如聚合函数、窗口函数、数据挖掘函数等,可以应用于数据分析、数据处理和数据建模等方面。 该手册还解释了 SAP HANA 数据库 语句执行过程的细节,包括语句优化、执行计划和性能调优等方面。通过深入了解 SAP HANA 数据库 SQL 参考手册,用户可以更好地理解 数据库 内部的工作原理,从而进一步优化 SQL 语句的性能。 总之,SAP HANA 数据库 SQL 参考手册是 SAP HANA 数据库 用户的重要工具,可以帮助用户更好地理解 数据库 的功能和性能,编写高效、准确的 SQL 语句,提高 数据库 的效率和性能。 ### 回答2: SAP HANA 数据库 SQL 参考手册是专门为SAP HANA 数据库 设计的一份指南。该手册包含了SAP HANA 数据库 所支持的各种 SQL 语句和函数,帮助用户更好地了解和使用该 数据库 。 SAP HANA 数据库 是一款高性能的内存 数据库 ,可以帮助企业快速处理海量数据。为了发挥其最大的潜力,需要熟练使用SAP HANA 数据库 的各种 SQL 语句和函数。而这正是该手册的目的所在。 该手册详细介绍了 SQL 语句的语法和用法,包括SELECT、INSERT、UPDATE、DELETE等常用语句,还涉及到数据类型、索引、触发器、存储过程等高级主题。此外,手册还提供了各种函数的介绍,如聚合函数、日期函数、文本函数、数值函数等,以及如何创建和使用用户定义函数、视图和游标等。 需要说明的是,SAP HANA 数据库 SQL 参考手册不是用于入门学习的教材。用户需要有一定的 数据库 基础 和编程知识,并了解 SQL 的一般原理和用法。只有在此 基础 上,才能更好地理解和使用该手册。 总之,SAP HANA 数据库 SQL 参考手册是一份非常重要的工具,对于想要熟练使用SAP HANA 数据库 的开发人员和 数据库 管理员非常有用。 ### 回答3: SAP-HANA 数据库 SQL 参考手册是一本非常有用的工具,它为用户提供了丰富的语法和查询操作,以帮助他们更有效地使用SAP-HANA 数据库 。该手册覆盖了广泛的主题,包括数据建模、查询以及事务处理等方面,也提供了详细的语法和示例,以便用户在使用时可以轻松理解操作。 在手册中,用户可以找到各种不同类型的操作和函数,包括基本的查询操作、 子查询 、搭配联接使用的查询、排序函数、聚合函数、数据分析函数以及窗口函数等。除此之外,该手册还提供了许多计算、数据转换以及条件函数等,这些都是在 数据库 中十分有用和常见的操作。 另外,在手册中还提供了对SAP-HANA中特定功能的解释和指导,例如如何使用SAP-HANA中的新型模型,如何使用视图和数据封装技术等。无论用户是在处理大量的数据还是在执行复杂的分析操作,该手册都可以为他们提供有用的参考和指导。 总之,SAP-HANA 数据库 SQL 参考手册是一本非常重要的工具,它可以帮助用户更高效地使用SAP-HANA 数据库 ,并帮助他们在处理大量数据和执行复杂的分析操作时提高工作效率。