数据的查询:
多条语句的交并差:
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
多条语句的交并差:
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