最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Oracle中Leftjoin的on和where的效率差别

来源:动视网 责编:小采 时间:2020-11-09 10:27:59
文档

Oracle中Leftjoin的on和where的效率差别

Oracle中Leftjoin的on和where的效率差别:Oracle中Left join的on和where的效率差别,在linq中使用into rightRow from rw in rightRow.DefaultIfEmpty()可以保证查询类型le 假设有两个表a、b 使用on Select * from a left join b on b.col = a.col and
推荐度:
导读Oracle中Leftjoin的on和where的效率差别:Oracle中Left join的on和where的效率差别,在linq中使用into rightRow from rw in rightRow.DefaultIfEmpty()可以保证查询类型le 假设有两个表a、b 使用on Select * from a left join b on b.col = a.col and


Oracle中Left join的on和where的效率差别,在linq中使用into rightRow from rw in rightRow.DefaultIfEmpty()可以保证查询类型le

假设有两个表a、b

使用on

Select * from a left join b on b.col = a.col and b.col2 = ‘aa’

使用 where

Select * from a left join b on b.col = a.col where b.col2 = ‘aa’ and b.col2 is null

// b.col2 is null作用是防止因b表中没有匹配数据,照成a表原有记录无法返回的问题

分析

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

语句测试

set serveroutput on ; -- 必须运行,否则打印结果无法显示

declare

I Number;

Starttime Timestamp;

Endtime Timestamp;

Begin

select current_timestamp(5) into starttime from Dual;

I := 1;

While I<=10000 Loop

dbms_output.put_line(i);

Execute Immediate ' '; --此处放入sql语句

i := i+1;

End Loop;

Select Current_Timestamp(5) Into Endtime From Dual;

dbms_output.put_line('10000条语句运行时间为(毫秒):' || (endtime - starttime)); --打印一个Interval类型数据,显示时间差

end;

测试结果

On语句, 10000条语句运行时间为(毫秒):+000000000 00:00:01.032850000

Where 语句 10000条语句运行时间为(毫秒):+000000000 00:00:01.013420000

结论

Where语句的性能优于on语句

其实sql语句的运行效率也可以通过查询Oracle的系统视图来查看,,但时间关系今后再研究了。

在C#中使用linq进行查询

// 写得比较仓促,见谅了

var reList = from DataRow a in dtA.Rows

join DataRow b in dtB.Rows on

new {t = a["col"], l=’aa’}

equals

new {t = b["col"], l = b["col2"] }

into rightRow from rw in rightRow.DefaultIfEmpty()

select new

{

Col1 = a["col"],

Col2 = rw["col2"]

};

在linq中使用into rightRow from rw in rightRow.DefaultIfEmpty()可以保证查询类型left outer join的效果,如果left join中有多个查询条件,使用new两个对象进行比较即可。

文档

Oracle中Leftjoin的on和where的效率差别

Oracle中Leftjoin的on和where的效率差别:Oracle中Left join的on和where的效率差别,在linq中使用into rightRow from rw in rightRow.DefaultIfEmpty()可以保证查询类型le 假设有两个表a、b 使用on Select * from a left join b on b.col = a.col and
推荐度:
标签: on oracle where
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top