数据透视表之SQL高级查询下

上传人:大米 文档编号:561389034 上传时间:2023-03-20 格式:DOC 页数:8 大小:386.50KB
返回 下载 相关 举报
数据透视表之SQL高级查询下_第1页
第1页 / 共8页
数据透视表之SQL高级查询下_第2页
第2页 / 共8页
数据透视表之SQL高级查询下_第3页
第3页 / 共8页
数据透视表之SQL高级查询下_第4页
第4页 / 共8页
数据透视表之SQL高级查询下_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《数据透视表之SQL高级查询下》由会员分享,可在线阅读,更多相关《数据透视表之SQL高级查询下(8页珍藏版)》请在金锄头文库上搜索。

1、一、子查询详讲子查询的一些特别要注意的地方1、子查询必须放在括号内2、子查询也必须放在比较操作符号的右边3、子查询最多可以嵌套到255级4、子查询中不能使用 ORDER BY子句,即 ORDER BY必须位于查询的最外层一、单行子查询单行子查询并不是最后输出的结果只能返回一行,而是指子查询只能返回一行。有一条规则我们必须记住:当我们用“等于”比较操作符把子查询和父查询嵌套在一起时,父查询期望从子查询那里只得到一行返回值。例1、查询所在部门为“研究B部”的职工在职工表中的记录select * from 职工表 $ where部门编号 =(select部门编号 from 部门表 $ whe其它一些

2、表明是单行子查询的比较操作符有“,=,=,”。二、多行子查询多行子查询,意味着子查询返回的结果子集可以是多行。因此,我们通常用集合比较操作符(如:IN, NOT IN )例2、查询所在控股方以 A开头的职工在职工表中的记录select * from 职工表 $ where部门编号 in (select部门编号 from 部门表 $ wh三、多重嵌套子查询例1和例 2中,主查询的 WHERE子句中都只有一列。然而,有时需要主查询处理多重关系例3、查询每个部门工资最高的职工信息select * from 职工表 $ where部门编号&-&工资in( select(select部门编号部门编号&-

3、&工资,max( 工资 ) asfrom 工资from 职工表 $ group by部门编号 )注意:多重嵌套查询,一般是自内向外,这样写好内层的SQL语句,再慢慢地嵌套好外层的语句,对自己的思维发建议学员们学多重嵌套的时候,先把内部的语句复制出来测试一下,看看结果是怎么样的。一般在 oracle 和MS SQL中会出现多列子查询,但在excel 中,只能通过嵌套和增加新的连接字段来实现多列子查询四、带有 any(some) 或 all谓词的子查询使用 any或all谓词时必须同时使用比较运算符。主要见: any all any= any= all= any= all= any= all!=

4、(或 ) any!= (或 ) all大于子查询结果中的某个值大于子查询结果中的所有值小于子查询结果中的某个值小于子查询结果中的所有值大于或等于子查询结果中的某个值大于或等于子查询结果中的所有值小于或等于子查询结果中的某个值小于或等于子查询结果中的所有值等于子查询结果中的某个值等于子查询结果中的所有值不等于子查询结果中的某个值不等于子查询结果中的任何一个值例4、查询其他部门编号中比部门编号为A0003的某一职工的工资还要少的所有记录and子查询工资集然后进行父查询,找出所有部门编号不是 A0003且工资少于 6500或其首先子查询,找出部门编号为 A0003 以下的职工记录中所有职工的工资,构

5、成一个集合。注意:该查询结果也可以用聚集函数来实现首先用子查询找出部门编号为A0003中最高工资为 6500,然后在父查询中查出所有部门编号不是A0003且工资小于SQL语句如下:a例5、查询其他部门编号中比部门编号为A0001的所有职工的工资还要少的所有记录and注意:该查询结果也可以用聚集函数来实现首先用子查询找出部门编号为A0001中最低工资为 1300,然后在父查询中查出所有部门编号不是A0001且工资小于SQL语句如下:a注意:用聚集函数查询通常要比any 和 all查询的效率要高,特别是大数据量的时候就比较明显的。any ( 或 some) ,all谓词与聚集函数、 in 谓词的等

6、价转换关系=或!=anyin- max min= minall-not in min max= max五、自连接(比较难理解,给有基础的学员去研究,课上不讲)一个表与自身进行连接,称为自连接例子 6:查询工资表中员工的姓名和基本工资,其中每行包含两组员工的姓名和基本工资,且左边的员工工资要select a.员工姓名 ,a. 基本工资 ,b. 员工姓名 ,b. 基本工资from 工资表 $ a inner join 工资结果表:有一个成绩表 , 里面有学号、功课编号、学生成绩三个字段.例7:用一个 SQL查询语句得出每门功课成绩最好的前两名select distinct a.* from (se

7、lect top 2 成绩表 $.成绩表 $ a where a.学号学号 from 成绩表 $ where in成绩表 $.功课编号= a.功课编号order by学生成绩注意 : 成绩表 $ a这里的 a起到中转站的作用,可以简化新表的缩写结果表:内部的子连接:首先对学生成绩进行降序排列,然后提取最好成绩的前成绩表 $. 学号 from 成绩表 $ where 成绩表 $. select top 2 2名功课编号= a.功课编号order by学生成绩值得注意的是:因为是要查询每门功课,故外部一层与内层的联系是功课编号要相等,便出现了 成绩表 $. 功课编号 = a. 功课编号而外面一层主

8、要是为了提取其记录,需要不重复的,定义了一个新的虚构表而功课编号为连接条件进行连接 成绩表 $ a查询那里只得到一行返回值。 where部门 = 研究 B部)比较操作符(如: IN, NOT IN )把父查询和子查询连接起来$ where控股方 like A%)好外层的语句,对自己的思维发散有好处新的连接字段来实现多列子查询。where 部门编号 =A0003)and 部门编号 A0003编部门编号不是 A0003且工资小于 6500的职工记录where部门编号 =A0003)and 部门编号 A0003where 部门编号 =A0001)and 部门编号 A0001部门编号不是 A0001且工资小于 1300的职工记录where部门编号 =A0001)and 部门编号 A0001时候就比较明显的。本工资,且左边的员工工资要大于右边员工的工资。 工资表 $ b on a.基本工资 b. 基本工资. 功课编号 order by学生成绩 desc)功课编号 order by学生成绩 desc相等,便出现了

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号