第八章 子查询和高级查询 主讲内容:关联子查询、嵌套子查询、多 表连接查询等
第八章 子查询和高级查询 主讲内容:关联子查询、嵌套子查询、多 表连接查询等
ORACL∈ ·上节课作业 ·数据查询语法基本格式: SELECT{*|列名1,列名2,… FROM tablename [WHERE condition] GRoUP BY field1,……. HAVING condition]] ORDER BY field1 [asc desc 第3页
上节课作业 • 数据查询语法基本格式: SELECT { * | 列名1,列名2,……} FROM tablename [WHERE condition] [GROUP BY field1, …… [ HAVING condition] condition] ] [ORDER BY field1 [asc|desc] , ……] 第 3 页
ORACL∈ 00本节课内容 子查询 二.高级查询 第4页
本节课内容 一.子查询 二.高级查询 第 4 页
ORACL∈ 子查询 SQL语句所表示的查询中,可以使用另一个查询的结果( 即一个查询块)作为条件的一部分,这种将一个查询块嵌 套在另一个查询块的 Where子句或 having子句的条件中的 查询称为子查询或嵌套查询; 在 SELECT、 UPDATE或 DELETE语句内部使用 SELECT语句, 这个内部 SElect语句称为子查询( Subquery)l 第5页
一 . 子查询 • SQL语句所表示的查询中,可以使用另 个查询的结果 可以使用另一个查询的结果( 即一个查询块)作为条件的一部分,这种将一个查询块嵌 套在另 个查询块的 套在另一个查询块的where子句或h i av ng子句的条件中的 子句的条件中的 查询称为子查询或嵌套查询; • 在SELECT、UPDATE或DELETE语句内部使用SELECT语句, 这个内部SELECT语句称为子查询(Subquery)。 第 5 页
ORACL∈ ●·01.子查询的类型 ·在子查询中可以使用两种比较操作符一一单行操作符和多 行操作符。 单行操作符:例如=、>、>=、、!=; 多行操作符:例如ALl、ANY、N、 EXISTS; 第6页
1. 子查询的类型 • 在子查询中可以使用两种比较操作符——单行操作符和多 行操作符。 – 单行操作符:例如=、>、>=、、!= ; – 多行操作符:例如ALL、ANY、IN、EXISTS ; 第 6 页
ORACL∈ 可以把子查询分为两种类型:单行子查询和多行子查询。 单行子查询 sQL语句只返回一行数据,或者无内容; 一适用于 where子句和 having子句; 多行子查询 SQL语句返回多行数据; 第7页
可以把子查询分为两种类型:单行子查询和多行子查询 。 • 单行子查询 – SQL语句只返回一行数据,或者无内容; – 适 用 于where子句 和havin g子句; • 多行子查询 – SQL语句返回多行数据; 第 7 页
ORACL∈ 子查询时,需要注意以下几点: 一子查询需要使用括号()括起来; 一子查询要放在比较操作符的右边; 一当子查询的返回值是一个集合而不是一个值时,不能 使用单行操作符,而必须根据需要使用ANY、IN、AL 或 EXISTS等操作符。 第8页
• 子查询时,需要注意以下几点: – 子查询需要使用括号 ( ) 括起来; – 子查询要放在比较操作符的右边; – 当子 询 值 个集 个值 查询的返回值是一个集合而不是一个值时,不能 使用单行操作符,而必须根据需要使用ANY、IN、ALL 或EXISTS等操作符。 第 8 页
ORACL∈ ●·。2.在 WHERE子句中使用子查询 ·在 SELECT语句中的 WHERE子句中可以使用子查询,表示将 子查询返回的结果作为外部的 WHERE条件 例如 查询和 Jones一个部门的员工信息; 查询和 jones工资等同的其他员工信息; 第9页
2. 在WHERE子句中使用子查询 • 在SELECT语句中的WHERE子句中可以使用子查询 子句中可以使用子查询,表示将 子查询返回的结果作为外部的WHERE条件; • 例如: – 查询和jones一个部门的员工信息; – 查询和jones工资等同的其他员工信息; 第 9 页
ORACL∈ ·语法格式: SELECT*列名称 FROM表名 WHERE表达式操作符(SQL查询块) 第10页
• 语法格式: SELECT *| 列名称 FROM 表名 WHERE 表 式达 操作符 (SQL查询块) 第 10 页
ORACL∈ ·例1,查询和“NES”一个部门的职工信息; SELECT FROM scott. emp WheRE deptno = seleCt deptno FROM scott. emp WHERE ename=JONES) QL> SELECT FROM scott. emp 2 WHErE deptno IN 3 <selEcT deptno FROM scott. emp 4 WHERE ename= JONES’ EMPNO ENAME JOB MGR HIREDATE SAL DEPTNO 7902 FORD ANALYST 756663-12月-81 3g99 7876 ADAMS CLERK 778823-5月-87 11g 7788 SCOTT ANALYST 756619-4月-87 第11页
• 例1,查询和“JONES”一个部门的职工信息; SELECT * FROM scott.emp WHERE deptno = ( SELECT deptno FROM scott.emp scott.emp WHERE ename= 'JONES‘ ); 第 11 页