《2022年SQL高级查询案例 .pdf》由会员分享,可在线阅读,更多相关《2022年SQL高级查询案例 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、SQL 子查询典型例子1、单行子查询select ename,deptno,sal from emp where deptno=(select deptno from dept where loc=NEW YORK);2、多行子查询SELECT ename,job,sal FROM EMP WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE A%);3、多列子查询SELECT deptno,ename,job,sal FROM EMP WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) F
2、ROM EMP GROUP BY deptno);4、内联视图子查询(1)SELECT ename,job,sal,rownum FROM (SELECT ename,job,sal FROM EMP ORDER BY sal);(2)SELECT ename,job,sal,rownum FROM ( SELECT ename,job,sal FROM EMP ORDER BY sal) WHERE rownum(SELECT sal FROM EMP WHERE ename=MARTIN);基本条件查询比较运算符 :,=,6000 例 2:查出 1999 年最后一个季度的订单情况。SELE
3、CT ORDER_NUM,ORDER_DATE,PRODUCT,AMOUNT FROM ORDERS WHERE ORDER_DATE BETWEEN 01-OCT-99 AND 31-DEC-99 例 3:查出名称是以ABC 开头的产品订单情况。SELECT ORDER_NUM,ORDER_DATE,PRODUCT,AMOUNT FROM ORDERS WHERE PRODUCT LIKE ABC% 例 4:列出所有的销售处,按区域名字母顺序排列。SELECT CITY,REGION FROM OFFICE ORDER BY REGION ASC 在这里 ASC 表示升序,如果表示降序可用D
4、ESC。例 5:列出每个销售人员以及他们工作的城市和区域的情况。SELECT NAME,CITY,REGION FROM SALESREPS,OFFICE WHERE REP_OFFICE=OFFICE 例 6:查出有多少销售员的销售额超过了其目标额,以及他们的销售额总和。SELECT COUNT(NAME),SUM(SALES) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - FROM SALESREPS WHERE SALE
5、SQUOTA 注意本例中使用了函数,与前面介绍的查询不同之处在于:它不仅仅是从数据库中查出某些数据, 并且对查出的数据进行多种计算处理,并将结果作为查询结果输出。SQL 语言提供了 6 种处理函数,帮助完成不同的处理工作。这6 种函数是:SUM(),用于计算表中某一列的总和。AVG(), 用于计算表中某一列的平均值。MIN(), 用于选择表中某一列的最小值。MAX(), 用于选择表中某一列的最大值。COUNT(), 用于计算表中某一列中值的个数。COUNT(*), 用于计算某张表的行数。例 7:对于每两个或更多的销售员的销售点,计算其中所有销售员的总销售员的总销售目标值和总销售员金额。SELE
6、CT CITY,SUM(QUOTA),SUM(SQLESREPS.SALES) FROM OFFICE,SALESREPS GROUP BY CITY HAVING COUNT(*)=2 SELECT 查询处理工作过程描述总结:形成 FROM 子句所指定的目标表(表的乘积)。如果FROM 子句仅指定一个表,则此表为目标表。如果有 WEHER 子句,则将其搜索条件用于目标表中的每一行,保留使搜索条件为TRUE 的行,剔除使搜索条件为FALSE或 NULL 的行。若 WHERE 子句中包含另一个SELECT查询语句, 先去完成另一个SELECT 查询语句操作, 然后将其查询结果用到本次查询的搜索条
7、件中,进行检测。若有 GROUP BY 子句,则对目标表中所保留的行进行分组,以使得每组中的各行具有相同的分组列的列值。若有 HAVING 子句,则将其搜索条件作用于每个行组,保留那些使搜索条件为TRUE的组, 剔除使搜索条件为FALSE 或 NULL 的行。若 HAVING 子句中包含另一个SELECT 查询语句,先去完成另一个SELECT查询语句操作,然后将其查询结果用到本次查询的HAVING子句搜索条件中,进行检测。对于所保留的每一行(或行组),计算由SELECT 子句所指定的每项值,对于简单的列指定,取当前行(或行组)中该列的值;对于列函数,若有GROUP BY 子句,则用当前名师资料
8、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - 行组作为参数;否则,用所有行作为其参数;剔除SELECT子句中没有指定的各列。本文来自编程入门网 - 若 SELECT 子句后选择了DISTINCE, 则将所生成结果中的所有内容重复的行剔除掉。若有 ORDER BY 子句,则按相应的排序设置对结果进行排序。有三种基本的子查询。它们是: 在通过IN 或由 ANY 或 ALL 修改的比较运算符引入的列表上操作。 通过未修改的比较运算符引入且必
9、须返回单个值。 通过 EXISTS 引入的存在测试。1. 带 in 的嵌套查询select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal in (select sal from scott.emp where ename=?WARD?); 上述语句完成的是查询薪水和WARD 相等的员工,也可以使用not in来进行查询。2. 带 any的嵌套查询通过比较运算符将一个表达式的值或列值与子查询返回的一列值中的每一个进行比较,只要有一次比较的结果为 TRUE ,则 ANY 测试返回 TRUE 。select emp.empn
10、o,emp.ename,emp.job,emp.sal from scott.emp where sal any(select sal from scott.emp where job=?MANAGER?); 等价于下边两步的执行过程:(1 )执行 “select sal from scott.emp where job=?MANAGER?”(2 )查询到 3 个薪水值 2975 、2850和 2450 ,父查询执行下列语句:select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal 2975 or sal2850 o
11、r sal2450; 3. 带 some的嵌套查询select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal =some(select sal from scott.emp where job=?MANAGER?);等价于下边两步的执行过程:(1 )子查询 ,执行 “select sal from scott.emp where job=?MANAGER?”。(2 )父查询执行下列语句。select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal
12、 =2975 or sal=2850 or sal=2450; 带【 any 】的嵌套查询和【som e 】的嵌套查询功能是一样的。早期的SQL 仅仅允许使用【 any 】,后来的版本为了和英语的【any 】相区分,引入了【som e】,同时还保留了【any 】关键词。4. 带 all 的嵌套查询通过比较运算符将一个表达式的值或列值与子查询返回的一列值中的每一个进行比较,只要有一次比较的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - -
13、 - 结果为 FALSE ,则 ALL 测试返回 FALSE 。select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal all(select sal from scott.emp where job=?MANAGER?); 等价于下边两步的执行过程:(1 )子查询 ,执行 “select sal from scott.emp where job=?MANAGER?”。(2 )父查询执行下列语句。select emp.empno,emp.ename,emp.job,emp.sal from scott.emp whe
14、re sal 2975 and sal2850 and sal2450; 5. 带 exists的嵌套查询select emp.empno,emp.ename,emp.job,emp.sal from scott.emp,scott.dept where exists (select * from scott.emp where scott.emp.deptno=scott.dept.deptno);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -