Oracle 之----青铜笔记

数据的查询:
多条语句的交并差:
UNION 和 EXCEPT 和 INTERSECT
两个表的查询:
cross jion 。。。where(交叉连接)
姓名       性别       学号             年龄 姓名       职业       婚否       性别
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
庄蝶       男         1310106            21 庄蝶       作家       是         男
庄蝶       男         1310106            21 夏洁       艺术家     是         女
庄蝶       男         1310106            21 牛月清     小作家     是         女
庄蝶       男         1310106            21 刘敏       主编       是         男
庄蝶       男         1310106            21 柳月       保姆       否         女
庄蝶       男         1310106            21 唐宛儿     诗人       是          女
庄蝶       男         1310106            21 周敏       小说家     是         男
庄蝶       男         1310106            21 夏洁       画家       是         女
夏洁       女         1310107            21 庄蝶       作家       是         男
夏洁       女         1310107            21 夏洁       艺术家     是         女
夏洁       女         1310107            21 牛月清     小作家     是         女
夏洁       女         1310107            21 刘敏       主编       是         男
夏洁       女         1310107            21 柳月       保姆       否         女
夏洁       女         1310107            21 唐宛儿     诗人       是          女
夏洁       女         1310107            21 周敏       小说家     是         男
夏洁       女         1310107            21 夏洁       画家       是         女
牛月清     女         1310102            19 庄蝶       作家       是         男
牛月清     女         1310102            19 夏洁       艺术家     是         女
牛月清     女         1310102            19 牛月清     小作家     是         女
牛月清     女         1310102            19 刘敏       主编       是         男
牛月清     女         1310102            19 柳月       保姆       否         女
牛月清     女         1310102            19 唐宛儿     诗人       是          女
牛月清     女         1310102            19 周敏       小说家     是         男
牛月清     女         1310102            19 夏洁       画家       是         女
刘敏       女         1310103            21 庄蝶       作家       是         男
刘敏       女         1310103            21 夏洁       艺术家     是         女
刘敏       女         1310103            21 牛月清     小作家     是         女
刘敏       女         1310103            21 刘敏       主编       是         男
刘敏       女         1310103            21 柳月       保姆       否         女
刘敏       女         1310103            21 唐宛儿     诗人       是          女
刘敏       女         1310103            21 周敏       小说家     是         男
刘敏       女         1310103            21 夏洁       画家       是         女
唐婉儿     女         1310104            20 庄蝶       作家       是         男
唐婉儿     女         1310104            20 夏洁       艺术家     是         女
唐婉儿     女         1310104            20 牛月清     小作家     是         女
唐婉儿     女         1310104            20 刘敏       主编       是         男
唐婉儿     女         1310104            20 柳月       保姆       否         女
唐婉儿     女         1310104            20 唐宛儿     诗人       是          女
唐婉儿     女         1310104            20 周敏       小说家     是         男
唐婉儿     女         1310104            20 夏洁       画家       是         女
柳月       女         1310105            19 庄蝶       作家       是         男
柳月       女         1310105            19 夏洁       艺术家     是         女
柳月       女         1310105            19 牛月清     小作家     是         女
柳月       女         1310105            19 刘敏       主编       是         男
柳月       女         1310105            19 柳月       保姆       否         女
柳月       女         1310105            19 唐宛儿     诗人       是          女
柳月       女         1310105            19 周敏       小说家     是         男
柳月       女         1310105            19 夏洁       画家       是         女
夏洁       女         1310108            21 庄蝶       作家       是         男
夏洁       女         1310108            21 夏洁       艺术家     是         女
夏洁       女         1310108            21 牛月清     小作家     是         女
夏洁       女         1310108            21 刘敏       主编       是         男
夏洁       女         1310108            21 柳月       保姆       否         女
夏洁       女         1310108            21 唐宛儿     诗人       是          女
夏洁       女         1310108            21 周敏       小说家     是         男
夏洁       女         1310108            21 夏洁       画家       是         女


已选择56行。
select *from LTL.TABLE1 cross  join LTL.TABLE2
select *from LTL.TABLE1 cross  join LTL.TABLE2 where LTL.TABLE1.姓名=LTL.TABLE2.姓名
inner join 。。。on(内链接)


SELECT * FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表5 ON Member.字段号=表5.字段号
left outer join ...on(左外连接)
庄蝶       男         1310106            21 庄蝶       作家       是         男
夏洁       女         1310108            21 夏洁       艺术家     是         女
夏洁       女         1310107            21 夏洁       艺术家     是         女
牛月清     女         1310102            19 牛月清     小作家     是         女
刘敏       女         1310103            21 刘敏       主编       是         男
柳月       女         1310105            19 柳月       保姆       否         女
夏洁       女         1310108            21 夏洁       画家       是         女
夏洁       女         1310107            21 夏洁       画家       是         女
唐婉儿     女         1310104            20
select *from LTL.TABLE1 right join LTL.TABLE2 on LTL.TABLE1.姓名=LTL.TABLE2.姓名
right outer join ...on(右外连接)
姓名       性别       学号             年龄 姓名       职业       婚否       性别
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
庄蝶       男         1310106            21 庄蝶       作家       是         男
夏洁       女         1310107            21 夏洁       画家       是         女
夏洁       女         1310107            21 夏洁       艺术家     是         女
牛月清     女         1310102            19 牛月清     小作家     是         女
刘敏       女         1310103            21 刘敏       主编       是         男
柳月       女         1310105            19 柳月       保姆       否         女
夏洁       女         1310108            21 夏洁       画家       是         女
夏洁       女         1310108            21 夏洁       艺术家     是         女
                                            唐宛儿     诗人       是          女
                                            周敏       小说家     是         男
select *from LTL.TABLE1 right join LTL.TABLE2 on LTL.TABLE1.姓名=LTL.TABLE2.姓名
full outer join ...on(全外连接)
姓名       性别       学号             年龄 姓名       职业       婚否       性别
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
庄蝶       男         1310106            21 庄蝶       作家       是         男
夏洁       女         1310108            21 夏洁       艺术家     是         女
夏洁       女         1310107            21 夏洁       艺术家     是         女
牛月清     女         1310102            19 牛月清     小作家     是         女
刘敏       女         1310103            21 刘敏       主编       是         男
柳月       女         1310105            19 柳月       保姆       否         女
夏洁       女         1310108            21 夏洁       画家       是         女
夏洁       女         1310107            21 夏洁       画家       是         女
唐婉儿     女         1310104            20
                                            唐宛儿     诗人       是          女
                                            周敏       小说家     是         男


已选择11行。
数据的完整性:
有三种数据完整性类型:
一是:域完整性,二是:实体完整性,三是:引用完整性
check(列的限制为逻辑表达式) priority(最多只有一个且不能为NUll主键的约束具有唯一性) unique foreign(列由其它的限制) default(域完整性)约束;
视图和触发器,用户自定义函数
CREATE VIEW
DML (insert update delete) DDL(insert update delete)
示例:
CREATE TRIGGER triggername on tablename where(insert update delete)




简单的查询:
IN(具体的值)
select *from LTL.TABLE1 where 姓名 IN('夏洁','唐宛') 


select max(年龄) from LTL.TABLE1


select *from LTL.TABLE1 where 年龄 between '20' and '21'
select * from 表名 where 条件 order by 列名;     (注:如number类型查出自动按升序排列,如要按降序排列,则select * from 表名 where 条件 order by 列名 desc;) 


LIKE
运算符里使用的通配符  
通配符 含义   
? 任何一个单一的字符  
* 任意长度的字符   
# 0~9之间的单一数字
% 任意通配符
select *from LTL.TABLE1 where 姓名 like '%夏%'


select 姓名,学号,性别,年龄 from LTL.TABLE1 where 年龄 between '20' and '21' order by 年龄 ASC


select sum(年龄) from LTL.TABLE1
分组查询:
如果被 SELECT 的只有函数栏, 那就不需要 GROUP BY 子句。
select 姓名,sum(年龄) from LTL.TABLE1 group by 姓名 


having对函数进行约束条件限制:
select 姓名,sum(年龄) from LTL.TABLE1 group by 姓名 having sum(年龄) > 20


select 姓名 Name,sum(年龄) as TotalAge from LTL.TABLE1 group by 姓名 having sum(年龄) > 20
delete from LTL.TABLE1 where 姓名 = '李磊'
update LTL.TABLE1 set 姓名 = '牛月清' where 姓名 = '邓琦'
update LTL.TABLE1 set 性别 = '女',姓名 = '邓琦' where 姓名 = '牛月清'




交并差

select 姓名 from LTL.TABLE1
union all
select 职业 from LTL.TABLE2

select 姓名 from LTL.TABLE1
intersect
select 姓名 from LTL.TABLE2



select 姓名 from LTL.TABLE1
minus
select 姓名 from LTL.TABLE2


子查询


select sum(年龄) AGE from LTL.TABLE1 where 性别 in(select 性别 from LTL.TABLE2 where 性别='女' )




select sum(年龄) TotalAge from LTL.TABLE1 where 姓名 in(select 姓名 from LTL.TABLE2 where LTL.TABLE2.姓名=LTL.TABLE1.姓名)


EXITS:


EXISTS 是用来测试内查询有没有产生任何结果。如果有的话,系统就会执行外查询中的 SQL。若是没有的话,那整个 SQL 语句就不会产生任何结果。




字符数据的类型包括 Char,Varchar 和 Tex


Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储


Unicode 数据类型包括 Nchar,Nvarchar 和Ntext 






char  定长非Unicode的字符型数据,最大长度为8000  
varchar  变长非Unicode的字符型数据,最大长度为8000   
text  变长非Unicode的字符型数据,最大长度为2^31-1(2G)        
nchar  定长Unicode的字符型数据,最大长度为8000   
nvarchar  变长Unicode的字符型数据,最大长度为8000   
ntext  变长Unicode的字符型数据,最大长度为2^31-1(2G)       
binary  定长二进制数据,最大长度为8000   
varbinary  变长二进制数据,最大长度为8000  
image  变长二进制数据,最大长度为2^31-1(2G)


增加一个列:Alter table tabname add column col type


alter Table LTL.TABLE1 add primary key(学号)


alter Table LTL.TABLE1 drop primary key(学号)


插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围


查找:select * from table1 where field1 like ?%value1%? ---like的语法很精妙,查资料! 


排序:select * from table1 order by field1,field2 [desc] 


总数:select count * as totalcount from table1   
求和:select sum(field1) as sumvalue from table1   
平均:select avg(field1) as avgvalue from table1   
最大:select max(field1) as maxvalue from table1   
最小:select min(field1) as minvalue from table1 


局部变量  declare @id char(10) 
--set @id = '10010001' 
select @id = '10010001'    
---全局变量 ---必须以@@开


OLE DB:
OLE-DB(对象链接和嵌入数据库),是一种数据技术标准接口,目的是提供一种统一的数据访问接口,这里所说的数据,除了标准的关系型数据库中的数据之外,还包括邮件数据、Web上的文本或图形、目录服务,以及主机系统中的IMS和VSAM数据。OLE-DB标准的核心内容就是要求以上这些各种各样的数据存储(DataStore)都提供一种相同的访问接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。


OLE DB客户模版中所包含的类根据其功能的不同可以分为7种:会话类,存取器类,行集类,命令类,属性类,书签类和错误类。






会话类:
1.CDataSource类
该类对应于数据源对象,代表服务器与数据源的连接,在单个连接上可以拥有多个数据库会话。
成员函数:
a.Close();关闭到数据源的连接。
b.GetProperties(); 获取当前为服务器连接的多个属性值。
c.Open();指定的CLSID,PrgID来创建到数剧院的连接。
2.CEnumerator类
对应一个枚举器对象,能够检索到可用的数据源和枚举器信息。
a.Open();打开一个枚举器。
b.Find();寻找具有指定名称的数据源。
3.CSession类
单个数据库访问会话;还提供事务处理函数。
a.Open();打开一个新的会话。
b.Close();关闭一个会话。
c.StartTransaction();在会话中开始一个新事务。
d.Abort();取消事务。
e.Commit();提交一个事务。
f.GetTransactionInfo();返回事务的信息。
4.CEnumeratorAccessor类
可以被CEnumerator用来访问来自枚举器行集的数据。
该类没有收录成员函数。






存取器类:
1.CAccessorBase类
该类为所有存取器类的基类。
a.Close();关闭存取器。
b.GetNumAccessor();获取该类中存取器的数目。
c.GetHAccessor();得到存取器的句柄。
2.CAccessor类
用于静态绑定到数据源记录,必须知道数据源的结构。






行集类:
1.CRowset类
用于处理建立和检索行集数据。
a.CRowset();构造函数。
b.Close();释放行和当前IRowset接口。
c.AddRefRows();增加与当前行相联系的引用数。
d.ReleaseRows();释放当前行的句柄。
e.IsSameRow();指定行与当前行进行比较。
f.Compare();比较两个书签。
g.MovePrev(),MoveNext(),MoveFirst(),MoveLast();分别移动到指定的位置记录。
h.MoveBookMask();获取指定书签所代表的行。
i.insert(),delete();插入删除一行数据;
j.GetData(),GetOriginaData();获取行集中的行数据;
k.SetData();设置行中一列或多列的值;
l.GetRowStatus();得到所有行的状态;
2.CBulkRowset类
用于批量读取和处理行。
同CRowset类成员函数类似。
3.CArrayRowset类中定义了一个操作符;operator[]用于访问行集中的数据元素。






命令类:
1.CCommand类
用于执行一个基于参数的OLE DB命令。
a.Open();用于执行命令。
b.GetNextResult();当用多个结果集时用于读取下一个结果集。
c.CreateCommand();用于创建一条新的命令。
d.Prepare(),Unprepare();优化当前的命令并执行此命令;废弃当前命令的执行计划。
2.CTable类
用于访问一个不带参数的简单行集。






属性类:
1.CDBPropIDSet类:
该类用于传递一个含有客户请求的属性信息的属性ID数组。
2.CDBPropSEt类:
设置服务器的属性。






书签类:
1.CBookmark()
2.GetBuffer();检索缓冲器的指针;virtual BYTE* GetBuffer() const。
3.GetSize();检索书签缓冲器的字节数大小。
4.SetBookmark();设置书签值。






错误类:
1.GetErrorRecords() 得到指定对象的出错记录。
2.GetAllErrorInfo() 返回包含一个错误记录中的所有错误信息。
3.GetBasicErrorInfo() 返回有关错误的基本信息。
4.GetErrorInfo() 返回指定记录的接口指针。 




9.3 选择存取器


OLE DB客户模版为用户提供了四种主要的存取器:
1.静态存取器。
2.动态存取器。《无法确定列时》
3.动态参数存取器。
4.手动存取器。


select *from LTL.TABLEB CROSS JOIN LTL.TABLEA where LTL.TABLEA.A1 IN(LTL.TABLEB.B1) OR LTL.TABLEA.A1 LIKE '%LTL.TABLEB.B1%'






select *from LTL.TABLEB CROSS JOIN LTL.TABLEA where LTL.TABLEA.A1 IN(LTL.TABLEB.B1) 


通配符 含义
% 包含零个或更多字符的任意字符串。
_(下划线) 任何单个字符。
[ ] 指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符。
[^] 不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符。
 
请将通配符和字符串用单引号引起来,例如:
LIKE '赵%' 将搜索姓赵的人名或者说以汉字‘赵’ 开头的字符串(如 赵刚、赵小刚等)。
LIKE '%刚' 将搜索以汉字‘刚’结尾的所有字符串(如 刘刚、李小刚等)。
LIKE '%小%' 将搜索在任何位置包含汉字‘小’的所有字符串(如赵小刚、李小刚、山本小郎等)。
LIKE '_小刚' 将搜索以汉字“小刚”结尾的所有三个汉字的名称(如 李小刚、赵小刚)。
针对英文,情形更多,如
LIKE '[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
LIKE '[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如 MacFeather)。
比如数据库pubs中有一个表author,它的电话号码一列即phone这一项,那么查找所有区号为 010 的电话号码命令为:
SELECT phone
FROM pubs.dbo.authors
WHERE phone LIKE '010%'
可以用同样的通配符使用 NOT LIKE。若要在 authors 表中查找区号不是 010 的所有电话号码,请使用下列等价查询中的任意一个:
SELECT phone
FROM pubs.dbo.authors
WHERE phone NOT LIKE '010%'
-- 或者
SELECT phone
FROM pubs.dbo.authors
WHERE NOT phone LIKE '010%'
IS NOT NULL 子句可与通配符和 LIKE 子句结合使用。例如,下列查询从 authors 表中检索以 010 开头且 IS NOT NULL 的所有电话号码:
USE pubs
SELECT phone
FROM authors
WHERE phone LIKE '010%' and phone IS NOT NULL


SELECT *FROM LTL.TABLEB CROSS JOIN LTL.TABLEA WHERE LTL.TABLEA.A1 = LTL.TABLEB.B1 OR 
Select E.*,F.* From LTL.TableA E,LTL.TableB F Where F.B1 Like '%,'||E.A1 OR F.B1 Like E.A1||',%' OR
 F.B1 Like '%,'||E.A1||',%' OR F.B1=E.A1;


SELECT *FROM LTL.TABLEB CROSS JOIN LTL.TABLEA WHERE  LTL.TABLEB.B1 LIKE '%,'||LTL.TABLEA.A1 OR LTL.TABLEB.B1 LIKE LTL.TABLEA.A1||',%' OR LTL.TABLEB.B1 LIKE  '%,'||LTL.TABLEA.A1||',%' OR LTL.TABLEA.A1 = LTL.TABLEB.B1;


|| 是可以字符串连接的,不过好像oracle支持,sql server不支持样
下面的连接方法可能对你会有用
MySQL: CONCAT() 
Oracle: CONCAT(),|| 
SQL Server: +


SELECT *FROM LTL.TABLEB CROSS JOIN LTL.TABLEA WHERE  LTL.TABLEB.B1 LIKE '%,'||LTL.TABLEA.A1 OR LTL.TABLEB.B1 LIKE LTL.TABLEA.A1||',%' OR LTL.TABLEB.B1 LIKE  '%,'||LTL.TABLEA.A1||',%' OR LTL.TABLEA.A1 = LTL.TABLEB.B1;
SELECT A.*,B.* FROM LTL.TABLEA A,LTL.TABLEB B WHERE B.B1 LIKE '%,'||A.A1 OR B.B1 LIKE A.A1||',%' OR B.B1 LIKE '%,'||A.A1||',%' OR B.B1=A.A1;




SELECT *FROM LTL.TABLEB CROSS JOIN LTL.TABLEA WHERE  LTL.TABLEB.B1 LIKE '%,'||LTL.TABLEA.A1 OR LTL.TABLEB.B1 LIKE LTL.TABLEA.A1||',%' OR LTL.TABLEB.B1 LIKE  '%,'||LTL.TABLEA.A1||',%' OR LTL.TABLEA.A1 = LTL.TABLEB.B1;
SELECT A.*,B.* FROM LTL.TABLEA A,LTL.TABLEB B WHERE B.B1 LIKE '%,'||A.A1 OR B.B1 LIKE A.A1||',%' OR B.B1 LIKE '%,'||A.A1||',%' OR B.B1=A.A1;
SELECT LTL.TABLEA.* FROM LTL.TABLEA  WHERE LTL.TABLEA.CSCORE LIKE '[92,95]';


查询最高工资员工的名字,工作岗位   SELECT ename, job, sal FROM emp e where sal = (SELECT MAX(sal) FROM emp);  显示工资高于平均工资的员工信息   SELECT * FROM emp e where sal > (SELECT AVG(sal) FROM emp);
问题:显示每个部门的每种岗位的平均工资和最低工资?   SELECT min(sal), AVG(sal), deptno, job FROM emp GROUP by deptno, job;    问题:显示平均工资低于2000的部门号和它的平均工资?   SELECT AVG(sal), MAX(sal), deptno FROM emp GROUP by deptno having AVG(sal) < 2000;  




对数据分组的总结   1 分组函数只能出现在选择列表、having、order by子句中(不能出现在where中)   2 如果在select语句中同时包含有group by, having, order by 那么它们的顺序是group by, having, order by   3 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错。   如SELECT deptno, AVG(sal), MAX(sal) FROM emp GROUP by deptno HAVING AVG(sal) < 2000;   这里deptno就一定要出现在group by 中


问题:显示部门号为10的部门名、员工名和工资?   SELECT d.dname, e.ename, e.sal FROM emp e, dept d WHERE e.deptno = d.deptno and e.deptno = 10;




问题:显示雇员名,雇员工资及所在部门的名字,并按部门排序?   SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno = d.deptno ORDER by e.deptno;   (注意:如果用group by,一定要把e.deptno放到查询列里面)




在多行子查询中使用all操作符  问题:如何显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号?  SELECT ename, sal, deptno FROM emp WHERE sal > all (SELECT sal FROM emp WHERE deptno = 30);  扩展要求:   大家想想还有没有别的查询方法。   SELECT ename, sal, deptno FROM emp WHERE sal > (SELECT MAX(sal) FROM emp WHERE deptno = 30);   执行效率上, 函数高得多


如何衡量一个程序员的水平?   网络处理能力, 数据库, 程序代码的优化程序的效率要很高






字符函数  介绍   字符函数是oracle中最常用的函数,我们来看看有哪些字符函数:






SELECT *FROM LTL.TABLEB CROSS JOIN LTL.TABLEA WHERE  LTL.TABLEB.B1 LIKE '%,'||LTL.TABLEA.A1 OR LTL.TABLEB.B1 LIKE LTL.TABLEA.A1||',%' OR LTL.TABLEB.B1 LIKE  '%,'||LTL.TABLEA.A1||',%' OR LTL.TABLEA.A1 = LTL.TABLEB.B1;


SET TIMING ON
SELECT A.*,B.* FROM LTL.TABLEA A,LTL.TABLEB B WHERE B.B1 LIKE '%,'||A.A1 OR B.B1 LIKE A.A1||',%' OR B.B1 LIKE '%,'||A.A1||',%' OR B.B1=A.A1;
SELECT LTL.TABLEB.* FROM LTL.TABLEB  WHERE LTL.TABLEB.CWORK LIKE 'C%O';
SELECT COUNT(*) FROM LTL.TABLEA;
SELECT *FROM LTL.TABLEB WHERE CAGE IN(20,21,19);
SELECT *FROM LTL.TABLEB ORDER BY CAGE DESC;
SELECT *FROM LTL.TABLEB WHERE CAGE=(SELECT MAX(CAGE) FROM LTL.TABLEB);
SELECT *FROM LTL.TABLEB WHERE CAGE>(SELECT AVG(CAGE) FROM LTL.TABLEB);
select *FROM LTL.TABLEB WHERE CWORK LIKE '%[F-T]%'






create table tb(ID int,tempture int,time varchar(7))
insert into tb 
select 1,117,'05:52.6' union all
select 2,118,'05:52.6' union all
select 3,119,'05:52.7' union all
select 4,120,'05:52.7' union all
select 5,121,'05:52.8' union all
select 6,122,'05:52.8' union all
select 7,123,'05:52.8' union all
select 8,124,'05:52.9' union all
select 9,125,'05:52.9' union all
select 10,126,'05:53.0' union all
select 11,127,'05:53.0' union all
select 12,128,'05:53.0' union all
select 13,129,'05:53.1' union all
select 14,130,'05:53.1' union all
select 15,131,'05:53.2' union all
select 16,132,'05:53.2' union all
select 17,133,'05:53.2' union all
select 18,134,'05:53.3' union all
select 19,135,'05:53.3' union all
select 20,136,'05:53.4' union all
select 21,137,'05:53.4' union all
select 22,138,'05:53.4' union all
select 23,139,'05:53.5' union all
select 24,140,'05:53.5' union all
select 25,141,'05:53.6' union all
select 26,142,'05:53.6' union all
select 27,143,'05:53.6' union all
select 28,144,'05:53.7' union all
select 29,145,'05:53.7' union all
select 30,146,'05:53.8' union all
select 31,147,'05:53.8' union all
select 32,148,'05:53.8' union all
select 33,149,'05:53.9' union all
select 34,150,'05:53.9' union all
select 35,151,'05:54.0' union all
select 36,152,'05:54.0' union all
select 37,153,'05:54.0' union all
select 38,154,'05:54.1' union all
select 39,155,'05:54.1' union all
select 40,156,'05:54.2' union all
select 41,0,'05:54.2' union all
select 42,158,'05:54.2' union all
select 43,159,'05:54.3' union all
select 44,160,'05:54.3' union all
select 45,161,'05:54.4' union all
select 46,162,'05:54.4' union all
select 47,163,'05:54.4' union all
select 48,164,'05:54.5' union all
select 49,165,'05:54.5' union all
select 50,166,'05:54.6' union all
select 51,167,'05:54.6' union all
select 52,168,'05:54.6' union all
select 53,169,'05:54.7' union all
select 54,170,'05:54.7' union all
select 55,171,'05:54.8' union all
select 56,172,'05:54.8' union all
select 57,173,'05:54.8' union all
select 58,174,'05:54.9' union all
select 59,231,'05:54.9' union all
select 60,232,'05:55.0' union all
select 61,233,'05:55.0' union all
select 62,234,'05:55.0' union all
select 63,235,'05:55.1' union all
select 64,236,'05:55.1' union all
select 65,237,'05:55.2' union all
select 66,238,'05:55.2' union all
select 67,239,'05:55.2' union all
select 68,240,'05:55.3' union all
select 69,241,'05:55.3' union all
select 70,242,'05:55.4' union all
select 71,243,'05:55.4' union all
select 72,244,'05:55.4' union all
select 73,245,'05:55.5' union all
select 74,246,'05:55.5' union all
select 75,247,'05:55.6' union all
select 76,248,'05:55.6' union all
select 77,249,'05:55.6' union all
select 78,250,'05:55.7' union all
select 79,251,'05:55.7' union all
select 80,252,'05:55.8' union all
select 81,253,'05:55.8' union all
select 82,254,'05:55.8' union all
select 83,255,'05:55.9' union all
select 84,0,'05:55.9' union all
select 85,1,'05:56.0' union all
select 86,2,'05:56.0' union all
select 87,3,'05:56.0' union all
select 88,4,'05:56.1' union all
select 89,5,'05:56.1' union all
select 90,6,'05:56.2' union all
select 91,7,'05:56.2' union all
select 92,8,'05:56.2' union all
select 93,9,'05:56.3' union all
select 94,10,'05:56.3' union all
select 95,11,'05:56.4' union all
select 96,12,'05:56.4' union all
select 97,13,'05:56.4' union all
select 98,14,'05:56.5' union all
select 99,15,'05:56.5' union all
select 100,16,'05:56.6' union all
select 101,17,'05:56.6' union all
select 102,18,'05:56.6' union all
select 103,19,'05:56.7' union all
select 104,20,'05:56.7'
go
select (ID-1)/10+1 组号,AVG(tempture*1.)温度平均值,MIN(time)起始时间,MAX(time)截止时间
from tb
group by (ID-1)/10+1 
/*
组号          温度平均值                                   起始时间    截止时间
----------- --------------------------------------- ------- -------
1           121.500000                              05:52.6 05:53.0
2           131.500000                              05:53.0 05:53.4
3           141.500000                              05:53.4 05:53.8
4           151.500000                              05:53.8 05:54.2
5           145.800000                              05:54.2 05:54.6
6           182.700000                              05:54.6 05:55.0
7           237.500000                              05:55.0 05:55.4
8           247.500000                              05:55.4 05:55.8
9           78.300000                               05:55.8 05:56.2
10          11.500000                               05:56.2 05:56.6
11          18.500000                               05:56.6 05:56.7
 
(11 行受影响)
 
*/
go
drop table tb




问题解决 谢谢2位大大的指导。我发下我要求得到:
--指定年份.每月平均值
select year(timeid),DATEPART(month, timeid) ,AVG(v001)as v001, AVG(v002)as v002, AVG(v003)as v003, AVG(v004)as v004
from sample_m5_000 where convert(varchar,timeid,120) like '2010%'
group by  year(timeid),DATEPART(month, timeid)


--指定月份.每天平均值
select DATEPART(day, timeid)as timeid,AVG(v001)as v001, AVG(v002)as v002, AVG(v003)as v003, AVG(v004)as v004
from sample_m5_000 where convert(varchar,timeid,120) like '2008-08%'
group by year(timeid), MONTH(timeid),  DATEPART(day, timeid)




--指定天数.每小时平均值
select DATEPART(hour, timeid)as timeid,AVG(v001)as v001, AVG(v002)as v002, AVG(v003)as v003, AVG(v004)as v004
from sample_m5_000 where convert(varchar,timeid,120) like '2008-08-02 %'
group by year(timeid), MONTH(timeid), DAY(timeid), DATEPART(hour, timeid)


















SQL查询每小时,每天,每月的平均值:
有这么一个Table表:
timeid                v001   v002  v003  v004
2008-01-01 01:05:00     1     2     3      4
2008-01-01 01:25:00     1     2     3      4
2008-01-01 01:55:00     1     2     3      4
2008-01-01 02:05:00     1     2     3      4
2008-01-01 02:25:00     1     2     3      4
2008-01-01 02:55:00     1     2     3      4
..
..
..
2008-01-01 23:55:00     1     2     3      4
2008-01-02 01:05:00     1     2     3      4
..
..
2008-01-02 23:55:00     1     2     3      4
...
...
...
2008-01-31 23:55:00     1     2     3      4
每小时平均值查询指的是:如2008-01-01 01:05:00-----2008-01-01 01:55:00之间的值的平均
每天平均值查询指的是:如2008-01-01 01:05:00-----2008-01-01 23:55:00之间的值的平均
每月平均值查询指的是:如2008-01-01 01:05:00-----2008-01-31 23:55:00之间的值的平均
timeid 是samlltimedate


SELECT TO_CHAR(SYSDATE,'yyyy-MM-DD HH24:MI:SS') FROM LTL.R_TEST;


SELECT TO_CHAR(LTL.R_TEST.V_TIME,'HH24'),AVG(LTL.R_TEST.V_VAL) FROM  LTL.R_TEST GROUP BY TO_CHAR(LTL.R_TEST.V_TIME,'HH24');




select to_char(sysdate) s1,
        to_char(sysdate,'yyyy-mm-dd') s2,
        to_char(sysdate,'yyyy') s3,
        to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') s4,
        to_char(sysdate, 'hh24:mi:ss') s5,
        to_char(sysdate,'DAY') s6 
    from LTL.R_TEST;




create table tb(人 varchar(20), 时间 datetime, 地点 varchar(20))
insert into tb values ('张三', '2012-06-26 20:36:10','63419-13952')
insert into tb values ('李四', '2012-06-26 20:36:10','63419-13900')
insert into tb values ('王五', '2012-06-26 20:36:10','63419-13900')
insert into tb values ('赵六', '2012-06-26 20:36:10','63419-13988')
insert into tb values ('张三', '2012-06-26 20:55:10','63419-13952')
insert into tb values ('李四', '2012-06-26 20:57:10','63419-13900')
insert into tb values ('王五', '2012-06-26 21:56:10','63419-13952')
insert into tb values ('赵六', '2012-06-26 22:00:55','63419-13951')
insert into tb values ('张三', '2012-06-26 23:02:10','63419-13911')
insert into tb values ('李四', '2012-06-26 23:05:10','63419-13952')
insert into tb values ('王五', '2012-06-26 23:10:10','63419-13877')
insert into tb values ('赵六', '2012-06-26 23:08:10','63419-13951')
go
 
--条件一
select * from tb where 时间 < '2012-06-26 20:40:10' and 地点 not in ('63419-13952','63419-13951')
select * from tb where 时间 < '2012-06-26 20:40:10' and 地点 <> '63419-13952'  and 地点 <> '63419-13951'
/*
人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
李四                   2012-06-26 20:36:10.000                                63419-13900
王五                   2012-06-26 20:36:10.000                                63419-13900
赵六                   2012-06-26 20:36:10.000                                63419-13988
 
(所影响的行数为 3 行)
 
人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
李四                   2012-06-26 20:36:10.000                                63419-13900
王五                   2012-06-26 20:36:10.000                                63419-13900
赵六                   2012-06-26 20:36:10.000                                63419-13988
 
(所影响的行数为 3 行)
*/
 
--条件二
select * from tb where 时间 > '2012-06-26 20:50:10' and 时间 < '2012-06-26 22:30:00' and  地点 in ('63419-13952','63419-13951')
select * from tb where 时间 > '2012-06-26 20:50:10' and 时间 < '2012-06-26 22:30:00' and (地点 ='63419-13952' or 地点 = '63419-13951')
/*
人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
张三                   2012-06-26 20:55:10.000                                63419-13952
王五                   2012-06-26 21:56:10.000                                63419-13952
赵六                   2012-06-26 22:00:55.000                                63419-13951
 
(所影响的行数为 3 行)
 
人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
张三                   2012-06-26 20:55:10.000                                63419-13952
王五                   2012-06-26 21:56:10.000                                63419-13952
赵六                   2012-06-26 22:00:55.000                                63419-13951
 
(所影响的行数为 3 行)
*/
 
--条件三 :地点不等于63419-13952或63419-13951的人 应该是:地点等于63419-13952或63419-13951的人
select * from tb where 时间 > '2012-06-26 22:30:00' and 地点 in ('63419-13952','63419-13951')
select * from tb where 时间 > '2012-06-26 22:30:00' and (地点 = '63419-13952' or 地点 = '63419-13951')
/*
人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
李四                   2012-06-26 23:05:10.000                                63419-13952
赵六                   2012-06-26 23:08:10.000                                63419-13951
 
(所影响的行数为 2 行)
 
人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
李四                   2012-06-26 23:05:10.000                                63419-13952
赵六                   2012-06-26 23:08:10.000                                63419-13951
 
(所影响的行数为 2 行)
 
*/
 
--找出同时符合上述三个条件的人
select t1.人 
from 
(select * from tb where 时间 < '2012-06-26 20:40:10' and 地点 not in ('63419-13952','63419-13951')) t1,
(select * from tb where 时间 > '2012-06-26 20:50:10' and 时间 < '2012-06-26 22:30:00' and  地点 in ('63419-13952','63419-13951')) t2,
(select * from tb where 时间 > '2012-06-26 22:30:00' and 地点 in ('63419-13952','63419-13951')) t3
where t1.人 = t2.人 and t1.人 = t3.人
 
select 人 from 
(
select distinct 人 from tb where 时间 < '2012-06-26 20:40:10' and 地点 not in ('63419-13952','63419-13951') 
union all
select distinct 人 from tb where 时间 > '2012-06-26 20:50:10' and 时间 < '2012-06-26 22:30:00' and  地点 in ('63419-13952','63419-13951')
union all
select distinct 人 from tb where 时间 > '2012-06-26 22:30:00' and 地点 in ('63419-13952','63419-13951')
) t
group by 人 having count(1) = 3
 
select t1.人 from tb t1 , tb t2 , tb t3
where t1.人 = t2.人 and t1.人 = t3.人 and
(t1.时间 < '2012-06-26 20:40:10' and t1.地点 not in ('63419-13952','63419-13951')) and
(t2.时间 > '2012-06-26 20:50:10' and t2.时间 < '2012-06-26 22:30:00' and  t2.地点 in ('63419-13952','63419-13951')) and
(t3.时间 > '2012-06-26 22:30:00' and t3.地点 in ('63419-13952','63419-13951'))
/*
人                    
-------------------- 
赵六
 
(所影响的行数为 1 行)
 
人                    
-------------------- 
赵六
 
(所影响的行数为 1 行)
 
人                    
-------------------- 
赵六
 
(所影响的行数为 1 行)
 
*/
 
drop table tb




SELECT TO_CHAR(LTL.R_TEST.V_TIME,'YYYY') 年,TO_CHAR(LTL.R_TEST.V_TIME,'MM') 月,TO_CHAR(LTL.R_TEST.V_TIME,'HH24') 时,AVG(LTL.R_TEST.V_VAL) 平均值 FROM  LTL.R_TEST GROUP BY TO_CHAR(LTL.R_TEST.V_TIME,'YYYY'),TO_CHAR(LTL.R_TEST.V_TIME,'MM'),TO_CHAR(LTL.R_TEST.V_TIME,'HH24') ORDER BY TO_CHAR(LTL.R_TEST.V_TIME,'HH24');






SELECT TO_CHAR(LTL.R_TEST.V_TIME-15/24/60,'HH24') 时,AVG(LTL.R_TEST.V_VAL) 平均值 FROM LTL.R_TEST GROUP BY TO_CHAR(LTL.R_TEST.V_TIME-15/24/60,'HH24') ORDER BY TO_CHAR(LTL.R_TEST.V_TIME-15/24/60,'HH24');
SELECT FLOOR(TO_NUMBER(SYSDATE-to_date('2014-08-20 16:10:00','yyyy-mm-dd hh24:mi:ss'))*24*60) AS 时间差 FROM dual;
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss'),TO_CHAR(SYSDATE+15/24/60,'yyyy-mm-dd hh24:mi:ss') AS newTime FROM dual ;//获取时间差值






select (ID-1)/10+1 组号,AVG(tempture*1.)温度平均值,MIN(time)起始时间,MAX(time)截止时间
from LTL.TABLEC
group by (ID-1)/10+1 ORDER BY (ID-1)/10+1 DESC

猜你喜欢

转载自blog.csdn.net/u014162133/article/details/38898653