SQL 复杂查询
一、子查询
.相关子查询
相关子查询是指需要引用主查询列表的子查询语句,相关子查询是通过EXISTS谓词来实现的。下面以显示工作在"new york"的所有雇员为例,说明相关子查询的使用方法,示例如下:
SQL> select ename,job,sal,deptno from emp where exists
(select from dept where dept.deptno=emp.deptno and dept.loc='new york');
如上所示,当使用exists谓词时,如果子查询存在返回结果,则条件为true;如果子查询没用返回结果,则条件为false。
.在from子句中使用子查询时,该子查询会被作为视图对待,因此也被称为内嵌视图。注意,当在from
子句中使用子查询时,必须要给子查询指定别名。下面以显示高于部门平均工资的雇员为例,说明在from子句中使用子查询的方法。示例如下:
SQL> select ename,job,sal from emp,
(select deptno,avg(sal) avgsal from emp
group by deptno) dept
where emp.deptno=dept.deptno and emp.sal>dept.avgsal;
二、复杂查询
.具有父子关系的层次查询
start with:用于指定层次查询的根行。
connect By:用于指定父行和子行之间的关系(connect by condition),在condition中必须使用prior引用父行。
SQL> select LPAD(' ',*(level-))||ename ename,
LPAD(' ',*(level-)||job job from emp
where job<>'CLERK' start with mgr is null
connect by mgr=prior empno;
.使用case表达式
SQL> select ename,sal,CASE WHEN sal> THEN
WHEN sal> THEN ELSE END grade
from emp where deptno=;
.倒叙查询
查看历史数据(倒叙查询只能查询5分钟之前变化的数据,而不能查询5分钟之内变化的数据)
SQL> select ename,sal from emp AS OF timestamp to_timestamp
('2003-05-18 19:59:00','YYYY-MM-DD HH24:MI:SS')
where ename='CLERK';
.WITH创建临时表
SQL> WITH tempname AS ( SELECT ...)
三、字符函数
.initcap(char):该函数用于将字符串中的每个单词的首字符大写,其他字符小写,单词之间用空格和非字母字符分隔。示例如下:
SQL> initcap('my world') 输出:My World
四、数字函数
五、日期函数
六、转换函数
七、使用记录(单行多列数据的处理用记录方式比较好)
定义记录的两种方式
declare
type testRecode id record(
rname number(,),
rpassword emp.empPassword%type)
exampleRecord testRecode;
begin
....
exampleRecord.rname:='hhh';
end
declare
testRecord emp%rowtype;
begin
.....
emp.name:='jjj';
end
八、单列多行(索引、嵌套、VARRAY)
九、多行多列(记录表)
把行数据变成列数据的SQL查询
GROUP BY 子句
指定用来放置输出行的组,并且如果 SELECT 子句 中包含聚合函数,则计算每组的汇总值。指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。
即select选择的列要么在聚合函数中,要么在Group by 中进行分组。
如果你想按下面的方式显示数据
而你的数据库中实际的存储方式是如下的。即是以行的形式存储的数据,现在要变成上面的列来存储
SQL可以如下:
select s.ClassProCode,s.YearMonth,
max(case s.SurveyCode when 'SC001' then s.Score else end) as '报名报道',
max(case s.SurveyCode when 'SC002' then s.Score else end) as '后勤接待',
max(case s.SurveyCode when 'SC003' then s.Score else end) as '副班主任'
from SerSurvey s
group by s.ClassProCode,s.YearMonth
--备注:按照SurveyCode这个条件来转换数据,如果条件成立,则转换Score这一行的数据成列显示,否则为0
或者
select A.*,
(select top Score from SerSurvey
where ClassProCode = A.ClassProCode and YearMonth = A.YearMonth and SurveyCode = 'SC001') as '报名报道',
(select top Score from SerSurvey
where ClassProCode = A.ClassProCode and YearMonth = A.YearMonth and SurveyCode = 'SC002') as '后勤接待',
(select top Score from SerSurvey
where ClassProCode = A.ClassProCode and YearMonth = A.YearMonth and SurveyCode = 'SC003') as '副班主任'
from
(
select s.ClassProCode,s.YearMonth
from SerSurvey s
group by s.ClassProCode,s.YearMonth
) A
可以分页的:
begin WITH list AS ( SELECT ROW_NUMBER() OVER (ORDER BY s.YearMonth DESC)AS Row,
s.ClassProCode,s.YearMonth,
max(case s.SurveyCode when 'SC001' then s.Score else end) as 'ApplyReport',
max(case s.SurveyCode when 'SC002' then s.Score else end) as 'LogisticsReception',
max(case s.SurveyCode when 'SC003' then s.Score else end) as 'ViceHeadTeacher',
max(case s.SurveyCode when 'SC001' then s.flag else end) as 'ApplyReportFlag',
max(case s.SurveyCode when 'SC002' then s.flag else end) as 'LogisticsReceptionFlag',
max(case s.SurveyCode when 'SC003' then s.flag else end) as 'ViceHeadTeacherFlag'
from SerSurvey s
where = --And s.ClassProCode like '%ss%' And s.YearMonth='2010-05'
group by s.ClassProCode,s.YearMonth)
SELECT * FROM list WHERE Row between and
end
SQL 复杂查询的更多相关文章
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- SQL联合查询:子表任一记录与主表联合查询
今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as ...
- SQL 提高查询效率
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...
- sql语句查询
1. sql语句查询某位数字或者某几位数字开头的数据,字段类型为数字类: %’: 2. sql搜索以4开头和含有李字的数据: select * from wlzbpre_user where real ...
- SQL联合查询(内联、左联、右联、全联)的语法(转)
最近在做一个比较复杂的业务,涉及的表较多,于是在网上找了一些sql联合查询的例子进行研究使用. 概述: 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer j ...
- phpcmsv9自定义sql语句查询模型实现
在phpcmsv9中,自定义sql语句查询可不太好实现,传入sql语句查询很容易被内部转入生成一系列莫名其妙的sql语句,比如最佳前缀等等,直接造成sql语句查询错误,在此也提供两种解决办法,1修改底 ...
- [转]一个用户SQL慢查询分析,原因及优化
来源:http://blog.rds.aliyun.com/2014/05/23/%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7sql%E6%85%A2%E6%9F%A5%E ...
- 怎样用SQL语句查询一个数据库中的所有表?
怎样用SQL语句查询一个数据库中的所有表? --读取库中的所有表名 select name from sysobjects where xtype='u'--读取指定表的所有列名select nam ...
- SQL组合查询的存储过程写法
最进一个项目 里面有个查询的功能,它是进行组合查询的, 而且用的是存储过程写.写这样的存储过程,需要注意单引号的使用,请看本人下面的例子,假如你以后写的话 记得注意写就行: create proc s ...
- 通过Spark SQL关联查询两个HDFS上的文件操作
order_created.txt 订单编号 订单创建时间 -- :: -- :: -- :: -- :: -- :: order_picked.txt 订单编号 订单提取时间 -- :: ...
随机推荐
- linux连接静态库
在项目中发现,使用 -l连接某个库时,如果存在同名的静态库(.a)和动态库(.so),默认会连接.so 那么如何指定连接静态库呢?如果有多个库,有些要连接静态库.有些要连接动态库,连接选项该如何指定呢 ...
- Comparing Your Heros拓扑序列的数量
给出N行英雄的比较,每一行包含两个英雄的名字,代表第一个英雄比第二个英雄更受欢迎. 英雄的数目不超过16个.问有多少种可能的受欢迎程度的序列满足N行英雄的比较. 由于只有英雄数目不超过16个,可以用二 ...
- 关于在Struts2框架下实现文件的上传功能
struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 <?xml version="1.0" encoding=" ...
- batchExportPNG.py不是我的代码
#coding=gbk#@author lifc,20140806#批量制作输出专题图import arcpy,os,time,math #testpath=raw_input("testp ...
- leetcode 题解:Binary Tree Inorder Traversal (二叉树的中序遍历)
题目: Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary ...
- No saved view state could be found for the view identifier
解决方法: javax.faces.application.ViewExpiredException:No saved view state could be found for the view i ...
- 重构18-Replace exception with conditional(条件替代异常)
重构没有什么出处,是我平时经常使用而总结出来的.欢迎您发表任何改进意见或建议.我相信一定还有其他比较好的重构可以解决类似的问题. 我曾无数次面对的一个代码坏味道就是,使用异常来控制程序流程.您可能会 ...
- linux_过程问题记录
常见问题1:-bash: rz: command not found 解决: 安装lrzsz: 解决命令:yum -y install lrzsz 常见问题2:linux 解压乱码 解决11.到htt ...
- 关于TransactionScope出错:“与基础事务管理器的通信失败”的解决方法总结
遇到此问题先需确认几个问题: 1)MS DTC是否设置正确? 2)是否启用了防火墙?是否对DTC做了例外? 3)是否做了hosts映射?是否跨网域通信? 开发分布式事务,碰到一个错误“与基础事务管理器 ...
- IIS 7.5站点配置
控制面板——程序——打开或关闭windows功能——Internet信息服务——万维网服务——应用程序开发功能——把ASP.NET打钩(如果已经打钩忽略).—— 运行->%windir%\Mic ...