oracle 数据库查询语句。。。。。。。

oracle 数据库查询语句。。。。。。。,第1张

假设设备表名为device_table, 电量表名为snum_table, 可以这样查询:

with s as (

select sum(bsnum) as sum_num, aclientid

from device_table a

inner join snum_table b on adeviceid = bdeviceid

group by aclientid

)

select s0

from (

select sclientid, ssum_num, rownum as row_number

from s

order by ssum_num desc

) s0

where s0row_number <= 3;

其实这本来就很简单。第一个语句写复杂了。

先说第一个语句:

数据集合 c: 获取两个字段,都存在于表goods中,其中字段customno要存在于表Gsheetitem a,gsheet b中联合查询后customno中。 与三个表联合后,查询效果一样。

数据集合 b仍然是表Gsheetitem a,gsheet b联合,并且条件与集合c中相同。因此,没有再 left join 的必要,只要从3表联合取值即可。

第2个语句就是三表联合后查询,当然效果一样。

select goodsid,customno

from goods

where customno in(

select acustomno

from Gsheetitem a, gsheet b

where asheetid = bsheetid

and bflag = 100

and bmoduletype = 3))

等价于:

select ggoodsid, gcustomerno

from Gsheetitem a, gsheet b, goods g

where asheetid = bsheetid

and bflag = 100

and bmoduletype = 3

and acustomno = gcustomno

其它值都可以在这个集合中取到,还有必要再写个集合,再联合到一起吗?

CREATE TABLE test (

username VARCHAR(20),

starttime VARCHAR(14),

endtime VARCHAR(14)

);

INSERT INTO test

SELECT 'zhangsan', '20130305080000', '20130305100000' FROM dual UNION ALL

SELECT 'zhangsan', '20130305070000', '20130305090000' FROM dual UNION ALL

SELECT 'lisi', '20130305060000', '20130305110000' FROM dual UNION ALL

SELECT 'lisi', '20130305070000', '20130305090000' FROM dual UNION ALL

SELECT '王五1', '20130305070000', '20130305090000' FROM dual UNION ALL

SELECT '王五1', '20130305060000', '20130305080000' FROM dual UNION ALL

SELECT '王五2', '20130305070000', '20130305090000' FROM dual UNION ALL

SELECT '王五2', '20130305070000', '20130305080000' FROM dual UNION ALL

SELECT '王五3', '20130305070000', '20130305090000' FROM dual UNION ALL

SELECT '王五3', '20130305060000', '20130305100000' FROM dual UNION ALL

SELECT '王五4', '20130305070000', '20130305090000' FROM dual UNION ALL

SELECT '王五4', '20130305070000', '20130305100000' FROM dual UNION ALL

SELECT '赵六1', '20130305060000', '20130305100000' FROM dual UNION ALL

SELECT '赵六1', '20130305070000', '20130305080000' FROM dual UNION ALL

SELECT '赵六2', '20130305060000', '20130305100000' FROM dual UNION ALL

SELECT '赵六2', '20130305060000', '20130305080000' FROM dual UNION ALL

SELECT '赵六3', '20130305060000', '20130305100000' FROM dual UNION ALL

SELECT '赵六3', '20130305070000', '20130305110000' FROM dual UNION ALL

SELECT '赵六4', '20130305060000', '20130305100000' FROM dual UNION ALL

SELECT '赵六4', '20130305060000', '20130305110000' FROM dual;

COLUMN "USERNAME" FORMAT A8

COLUMN "STARTTIME" FORMAT A15

COLUMN "ENDTIME" FORMAT A15

SELECT

FROM

test Main

WHERE

EXISTS (

SELECT 1

FROM

test Sub

WHERE

Mainusername = Subusername

AND NOT ( MainSTARTTIME = SubSTARTTIME AND MainENDTIME = SubENDTIME)

AND (

-- 首先判断 第一种情况

-- 时间段1:----------+=====+-----

-- 时间段2:--------+====+--------

-- 或者

-- 时间段1:----------+=====+-----

-- 时间段2:----------+====+--------

-- 或者

-- 时间段1:----------+=====+-----

-- 时间段2:--------+==========+--

-- 或者

-- 时间段1:----------+=====+-----

-- 时间段2:----------+==========+--

(

SubStartTime <= MainStartTime

AND SubEndTime > MainStartTime

)

OR

-- 然后判断第二种情况

-- 时间段1:------+=========+-----

-- 时间段2:--------+====+--------

-- 或者

-- 时间段1:------+=========+-----

-- 时间段2:------+====+--------

-- 或者

-- 时间段1:------+=========+-----

-- 时间段2:--------+==========+--

-- 或者

-- 时间段1:------+=========+-----

-- 时间段2:------+==========+--

(SubStartTime >= MainStartTime

AND SubStartTime < MainEndTime

)

)

);

方法和详细的 *** 作步骤如下:

1、第一步,查询该库中的所有表,测试sql,代码见下图,转到下面的步骤。

2、第二步,执行完上面的 *** 作之后,查询有多少个数据表,见下图,转到下面的步骤。

3、第三步,执行完上面的 *** 作之后,在TEST的开头编写一个查询表的脚本,每个表中的记录数,代码见下图,转到下面的步骤。

4、第四步,执行完上面的 *** 作之后,执行sql,在输出窗口中,可以看到每个表的输出,见下图。这样,就解决了这个问题了。

1

这里涉及到两个系统视图的应用dba_tab_cols和user_tab_cols;

2

dba_tab_cols包含所有用户下表字段信息;user_tab_cols包含当前用户下表信息;使用tba_tab_clos查询表字段类型需要指定owner(用户)

3

上述两个表中,table_name,column_name,data_type就可以满足需要查询表字段类型了,具体类型对应其他字段还有另外定义,比如varchar2,date,number还对应在data_length字段有值,说明类型其长度

4

user_tab_columns和user_tab_cols都可以满足问题要求,但是两张视图还是有区别的,主要是包含字段的区别等,具体区别可以度娘哈,这里就不赘述。

单条匹配,没有索引也不准备建索引。只能靠并发来加快检索速度,最快的语句应该是:select /+ full(A) parallel(A,10) / from A where b=c;理由有2:full table scan 时,oracle会一次读出多个block加快速度parallel指定并发10线程检索,当然如果允许,你指定20也可以。最好等于CPU个数。 不过还是建议在b列上建索引,这是最好的办法。

要查询oraclelangraw数据,您需要使用Oracle数据库的查询语言SQL(Structured Query Language)。您可以使用SELECT语句来检索数据。例如,以下是一个简单的SELECT语句,用于检索表中的所有数据:

```

SELECT FROM oraclelangraw;

```

这将检索表中的所有行,并返回所有列的数据。您也可以使用WHERE子句来过滤数据,例如:

```

SELECT FROM oraclelangraw WHERE id = 1;

```

这将只返回具有id = 1的行的数据。您需要确保您有访问该表的权限,并且已经正确连接到数据库。

为什么要查询oraclelangraw数据,这取决于您的需求和目的。查询数据通常是从数据库中检索和分析信息的必要步骤。例如,您可能需要检索特定日期范围内的销售数据,或者查找具有特定属性的产品。

以上就是关于oracle 数据库查询语句。。。。。。。全部的内容,包括:oracle 数据库查询语句。。。。。。。、oracle数据库查询语句求详解、ORACLE数据库查询语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9760692.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存