Oracle数据库里面的SQL语句查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle数据库里面的SQL语句查询相关的知识,希望对你有一定的参考价值。
@ select count(*) from DAT_HisEvent t where rownum<500 and ((t.ymd=20091013 and t.hmsms>=0) or (t.ymd=20091230 and t.hmsms<=155500000) or (t.ymd>20091013 and t.ymd<20091230)) and (t.eventobjgrp in ('cgzz ') ) order by t.ymd,t.hmsms
1.select count(*) from DAT_HisEvent t where rownum<2001 and ((t.ymd=20091013 and t.hmsms>=155500000)) and (t.eventobjgrp in ('cgzz ')) and t.eventtype in (1002)
2.select count(*) from DAT_HisEvent t where rownum<2001 and ((t.ymd>=20091013 and t.ymd<=20091030) ) and (t.eventobjgrp in ('cgzz ')) and t.eventtype in (1002)
3
最上面的sql是下面 1、2、3条语句的组合成的语句,对吗?当我查询 select count(*) from DAT_HisEvent t where rownum<2000 and ((t.ymd=20091013 and t.hmsms>=0) or (t.ymd=20091230 and t.hmsms<=155500000) or (t.ymd>20091013 and t.ymd<20091230)) and (t.eventobjgrp in ('cgzz ') ) order by t.ymd,t.hmsms
当真正数据量少的时候加上 rownum<2001就查的很慢,当不加rownum<2001就很快出来了,当数据过大时,加上rownum<2001这个数据能很快查出来。。我不知道是什么原因,请大家能帮帮我。。。
(1)只有一项的,不要用in,用等号就行. t.eventtype in (1002)改成t.eventtype=1002
(2)>= and <=可以写成between的形式. t.ymd>=20091013 and t.ymd<=20091030改成t.ymd between 20091013 and 20091030
(3)不到万不得已不要用or.带or的查询,一个索引也用不上,会变很慢.
(4)你的order by完全没作用.因为是查数据的条数,所以排序只会让速度变慢.
上述四条都可以使查询加速.
最后,很奇怪,你要的是count(*),又有设置rownum<2001,这样如果多于2000条,不是只会有count(*)=2000吗?只有少于2000条的时候,count(*)才会是查询本身查到的条数.也许就是为什么数据量少反而慢的原因,在多于2000条记录的情况下,oracle已经意识到,这个查询的结果只可能是2000... 参考技术A 这个问题这么严重,只给0分太少了
oracle 视图sql语句怎么写
现有表1
列a 列b
1 a
2 b
1 c
2 d
创建视图成
列a 列b 列c
1 a c
2 b d
sql怎么写啊
多谢
图片
方法和详细的操作步骤如下:
1、第一步,通过pl
/ sql登录到oracle数据库,见下图,转到下面的步骤。
2、第二步,完成上述步骤后,输入sql以查询该库的所有视图,elect * from all_views t,并要求所有者在结果中代表不同的用户,见下图,转到下面的步骤。
3、第三步,完成上述步骤后,如果查看用户的所有视图,执行sql,select * from user_views t,可以看到用户尚未创建视图,见下图,转到下面的步骤。
4、第四步,完成上述步骤后,如果要查看库,则执行sql,代码见下图。这样,就解决了这个问题了。
参考技术Aoracle中,创建视图的基本方式是:
create or replace view 视图名称 as + 查询语句
举例如下:
--1.新建dept表的视图create or replace force view test_view as
select * from dept;
--2.查看视图
select * from test_view; 参考技术B 在MSSQL 中可以,在oracle里面需要核对语法,希望有参考价值
假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82
declare @sql varchar(4000)
set @sql = 'create view [viewname] as select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from CJ group by name'
select @sql
exec(@sql)追问
mysql 没学过啊,你能说说大概的意思吗?
create view ss as select name, 后面的就看不懂了
后面select distinct Subject from CJ 就是选出不同课程,而case ...when ....then....end 就是不同课程中选择成绩,其中字段名称 就是'+Subject+
你可以建好cj表 ,然后用print @sql 来追踪理解。
select * from t_name where deptno=101;
以上是关于Oracle数据库里面的SQL语句查询的主要内容,如果未能解决你的问题,请参考以下文章