欢迎投稿

今日深度:

Oracle(四)--)高级子查询(多例详解难度高,实

Oracle(四)--)高级子查询(多例详解难度高,实在不信进来看~)


这一节将讨论一下子查询更加复杂的应用,主要在于简化 SQL,从侧面提高性能,当然。。提高性能的地方有很多很多。。今天听了一场关于 Oracle 的性能调优的讲座,了解了 Oracle 性能、优化要注意的各个方面。虽然现在可能还遇不到那么复杂的问题,但是关于简化 SQL ,优化 SQL 还是目前可以做到并作为一个不断努力的地方。话不多说,通过几个例子先来讨论一下~(当然。。对于我这种菜鸟还是有难度的,各位大神多多谅解,多多包涵~)希望给大家一些有益的思考或借鉴~

一、子查询回顾

子查询是嵌套在 SQL 语句中的另一个 SELECT 语句 \
例: 1、查询工资大于148号员工工资的员工信息(只能为单列查询,否则报错) \

结果如下
\

2、查询 Last_name 为 grant 的 manager 的信息 \
结果如下

\
二、多列子查询( 将返回多个结果用 in ) 1、例:查询 employee_id 为 149 号或 176 号员工的 manager_id 和 department_id 相同的其他员工的 emloyee_id , manager_id , department_id。 不成对比较方式: employees 表中 employee_id 、 department_id 、 manager_id 的数据如下 \

分析: 1)首先应该写出以下图中的内容 \
-- 查询 emloyee_id , manager_id , department_id -- where 条件将 manager_id、department_id 限定 -- employee_id 不能为 149 或 176. 2)之后将 manager_id 和 department_id 的 sql 语句填上即可,当然此时最好将 "" 改为 in。
\
查询结果显示如下:
\
我们发现上述查询中有两个部分出现多次,于是我们应该通过多列子查询使得 sql 语句更加简洁。 成对比较方式:sql如下

\
2、在 from 子句中使用子查询 例:返回比本部门平均工资高的员工的 last_name,department_id,salary 及平均工资 分析: 1、首先我们讨论一下没有平均工资的情况该如何写。 \

-- 要注意的地方在于部门号要一致(本部门) 2、加上平均工资 \

通过加入一个 select 查询进行平均工资的查询,也要保证为本部门,查询结果如下 \
那么如何在 from 子句中使用子查询呢? 首先,这里用到了与多表连接类似的方式。多表连接怎么用?看一眼下面的例子即可: \

那和 from 子句使用子查询有何关系呢?其实 departments 是一个真实存在的表,然而在平均工资查询时,我们可以通过 sql 语句来建立一个表,然后建立 employees 与 该表的连接关系,即可降低 sql 语句的冗余度。sql 语句如下和结果如下: \\
可以发现这样的查询结果与之前的结果是一致的,但是冗余度大大降低,但是思路要清晰,难度较大。 \
三、单列子查询表达式:是在一行中只返回一列的子查询 ----------------------------------------------------------------------------------------- 例:显示员工的 employee_id,last_name,和 location。其中,若员工的 department_id 与 location_id 为 1800 的 department_id 相同,则 location 为 'CANADA',其余为 'USA'。 分析:若..则.. 条件语句:case..when..then..end,sql 及 返回结果如下 \
\
employees 表中信息 \
departments 表中信息(仅有一个 ID 对应) \
----------------------------------------------------------------------------------------------------- 例:查询员工的 employee_id 和 last_name,要求按照员工的 department_name 排序 \
department_name 不存在于 employees 表中, 每次查询一个员工时,都会找到对应的 name ,然后跟已有排好序的 name 进行对比,如果靠前就往前排,靠后则往后排,故此连接条件必须存在。

www.htsjk.Com true http://www.htsjk.com/oracle/23725.html NewsArticle Oracle(四)--)高级子查询(多例详解难度高,实在不信进来看~) 这一节将讨论一下子查询更加复杂的应用,主要在于简化 SQL,从侧面提高性能,当然。。提高性能的地方有很多很多。...
相关文章
    暂无相关文章
评论暂时关闭