日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle查询第二个字为a,Oracle多表查询 - osc_yqnlq679的个人空间 - OSCHINA - 中文开源技术交流社区...

發布時間:2024/8/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle查询第二个字为a,Oracle多表查询 - osc_yqnlq679的个人空间 - OSCHINA - 中文开源技术交流社区... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節剖析Oracle多表查詢中的相關內容。

本文所用到的表為oracle中scott用戶下的emp表,dept表,數據如下:

一、笛卡爾集:

概念:假設A,B是2個集合,A X B所形成的集合叫笛卡爾集。

實例1:A={a,b} B={c,d,e},那么A X B={(a,c),(a,d),(a,e),(b,c),(b,d),(b,e)}

圖形實例如下:

A:

? B:

那么A X B:

由此可看出笛卡爾集的結果為列數相加行數相乘,其中有很多重復項。

那么在多表查詢中如果查詢出來的結果有重復項,通常會對我們需要的結果造成干擾,為了避免這種笛卡爾集的出現,可以添加有效的連接條件,如果有n張表,那么連接條件最少為n-1個。

二、交叉連接:

在oracle中笛卡爾集也有對應的求解,稱為交叉連接cross join,示例如下:

Example:

select d.dname,e.ename,d.deptno,e.deptno from dept d cross join emp e;

emp表14條數據,dept表4條數據,14x4=56剛好等于笛卡爾集的結果。

三、自然連接:

概念:natural join是一種特殊的等值連接,將表中具有相同名稱的列進行自動匹配,不需要再加等值條件。

Example:

select ename,deptno,dname from emp natural join dept;

可以看到dname是dept表中的列,條件中并沒有加入emp.deptno=dept.deptno,但是結果仍然正確,這就是自然連接的作用,特別注意的是需要列名相同才可以。

四、內連接:

概念:inner join只返回滿足條件的相匹配的查詢結果,inner可省略。

(1)第一種用using子句建立連接

Example:

select ename,deptno,dname from emp join dept using(deptno);

(2)第二種:用on子句建立連接:

Example:

select ename,e.deptno,dname from emp e join dept d on e.deptno=d.deptno;

這2種都可以查詢到我們想要的結果,那么這2種語句的意義在哪里呢,剛才有講過自然連接會將列名相同作為條件,

如果此時2張表中有多個列值對應相等,那么oracle會自動將這些列都作為條件,而我們有可能只需要其中的一部分

作為條件,那么此時就用到了這2種語句,也是它們存在的價值。

五、外連接

概念:分為左外連接,右外連接,完全(外)連接,它們都返回滿足結果的連接,不同的是左外連接還返回不滿足左表的部分數據,

同樣的右外連接還返回不滿足右表的部分數據,完全連接則還返回不滿足條件的部分數據,也就是說,左外連接返回左表的全部數據

右表的滿足條件數據,右外連接返回右表的全部數據左表滿足條件的數據,完全連接返回左右表的全部數據。

Example:

select ename,d.deptno,dname from dept d left join emp e on d.deptno=e.deptno;

select ename,d.deptno,dname from emp e right join dept d on e.deptno=d.deptno;

右外連接可以看做是將左外連接的表換了個位置,查詢結果相同,所以此處只講左外連接,dept表中有deptno=40的部門,但是

在emp表中并沒有deptno=40的員工,如果此處沒有用左外連接,那么就不會顯示最后一行,如下圖:

select ename,d.deptno,dname from dept d join emp e on d.deptno=e.deptno;

可以看到并沒有deptno=40的那一行。

Example2:

select e.ename,d.dname from emp e full join dept d on e.deptno=d.deptno;

完全外連接可以看做是將左外連接和右外連接進行了一個“合體”,不滿足的結果也會顯示出來,可以看出來左外連接用到的情況最多。

另外,左外連接和右外連接還有另一種表達的方式,使用(+)操作符,

Expression:左外連接:select table1.column,table2.column from table t1,table2 t2 where t1.column = t2.column(+)

右外連接:select table1.column,table2.column from table1 t1,table2 t2 where t1.column(+) = t2.column

Example:

select e.ename,d.dname from dept d,emp e where e.deptno(+) = d.deptno;

select e.ename,d.dname from emp e ,dept d where e.deptno(+)=d.deptno;

所查結果一樣,這里我故意將條件的位置寫反,說明并不是(+)的位置固定,而是要根據條件中的表的名字的位置判斷,這也是外連接查詢的一種寫法,注意此處是where子句不再是on子句。

六、自連接:

概念:自連接很容易理解,就是同一張表,將它看做是2張一模一樣的表,其中一張表的列可以作為另一個表的查詢條件。

Example:在emp表中查詢員工自己的上司。

select e.ename,m.ename from emp e,emp m where e.mgr=m.empno;

分析:emp e表中的mgr是他的上司的empno,而他的上司的empno也在emp這張表中,這就將同一張表看成了2張表。

七、set運算符:

概念:專門用來合并多條select語句的結果,分為四種。

左圖表示2個查詢select1和select2,其中B是2個查詢的重復數據。

1、union操作符:用于取得2個查詢的并集,并且會將其中的重復數據去掉,最后按第一列的結果進行升序排序。

用圖來表示就是? ? ?select1 union select2 = A+B+C

2、union all操作符:同樣用于取得2個查詢的并集,但不會將重復的數據去掉,也不會進行排序。

用圖來表示就是? ?select1 union all select2 = A+B+B+C

3、intersect操作符:同于取得2個查詢的交集 ,并且會以第一列的結果升序排序

用圖表示就是:select1 intersect select2 =B

4、minus操作符:用于取得在第一個中的結果,但不在第二個中的結果,并且會以第一列的結果升序排序

用圖表示就是? ? select1 minus select2 = A

Example:

先根據emp表和dept表做2張新表,emp01取部門號為10和20的,emp02取部門號為20和30的:

create tableemp01as

select * from emp where deptno in(10,20);

create tableemp02as

select * from emp where deptno in(20,30);

數據如下:

union操作符的運用:

select deptno,empno,ename fromemp01union

select deptno,empno,ename from emp02;

emp表中只有10,20,30部門的數據,所以union以后應該剛好是emp表的數據。

union all操作符的運用:

select deptno,empno,ename fromemp01union all

select deptno,empno,ename from emp02;

union all以后會將重復的也顯示出來,所以部門號為20的員工會顯示2次

intersect操作符的運用:

select deptno,empno,ename fromemp01intersect

select deptno,empno,ename from emp02;

intersect以后會將重復數據顯示,所以只顯示部門號為20 的數據。

minus操作符的運用:

select deptno,empno,ename fromemp01

minusselect deptno,empno,ename from emp02;

minus只顯示第一個查詢的結果,把其中和第二部分查詢重復的刪除,所以只顯示10號部門不會顯示20號部門的信息。

到此為止,多表查詢全部總結完畢,有任何建議可以在下方評論。

2018-08-10? ? 16:57:07

總結

以上是生活随笔為你收集整理的oracle查询第二个字为a,Oracle多表查询 - osc_yqnlq679的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。