久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SQL連接(內(nèi)連接,左連接,右連接,自連接)詳解

 墨香居BOOK 2011-11-01

SQL連接(內(nèi)連接,左連接,右連接,自連接)詳解

    博客分類:
  • SQL
Sql代碼 復(fù)制代碼 收藏代碼
  1. create table department( id number primary keyname varchar2(30));   
  2.   
  3. create table employee(  id number primary key,  name varchar2(30) not null,  salary number(6,2),  title varchar2(30),  manager number,  deptid number);   
  4.      
  5. insert into department values(1,'人力資源');   
  6. insert into department values(2,'開發(fā)中心');   
  7. insert into department values(3,'總裁室');   
  8.   
  9. insert into employee values(4,'趙六',9000,'項(xiàng)目經(jīng)理',null,2);   
  10. insert into employee values(3,'王五',7000,'項(xiàng)目組長(zhǎng)',4,2);   
  11. insert into employee values(1,'張三',6000,'程序員',3,2);   
  12. insert into employee values(2,'李四',7000,'HR',4,1);  


不同的 SQL JOIN
    * JOIN: 如果表中有至少一個(gè)匹配,,則返回行
    * LEFT JOIN: 即使右表中沒有匹配,,也從左表返回所有的行
    * RIGHT JOIN: 即使左表中沒有匹配,,也從右表返回所有的行
    * FULL JOIN: 只要其中一個(gè)表中存在匹配,,就返回行

INNER JOIN 關(guān)鍵字在表中存在至少一個(gè)匹配時(shí)返回行,。如果 "employee" 中的行在 "department" 中沒有匹配,,就不會(huì)列出這些行,。

LEFT JOIN 關(guān)鍵字會(huì)從左表 (employee) 那里返回所有的行,即使在右表 (department) 中沒有匹配的行,。

RIGHT JOIN 關(guān)鍵字會(huì)從右表 (department) 那里返回所有的行,,即使在左表 (employee) 中沒有匹配的行。

FULL JOIN 關(guān)鍵字會(huì)從左表 (employee) 和右表 (department) 那里返回所有的行,。如果 "employee" 中的行在表 "department" 中沒有匹配,,或者如果 "department" 中的行在表 "employee" 中沒有匹配,這些行同樣會(huì)列出,。

注釋:INNER JOIN 與 JOIN 是相同的,。
注釋:在某些數(shù)據(jù)庫(kù)中, LEFT JOIN 稱為 LEFT OUTER JOIN,。
注釋:在某些數(shù)據(jù)庫(kù)中, RIGHT JOIN 稱為 RIGHT OUTER JOIN,。
注釋:在某些數(shù)據(jù)庫(kù)中,, FULL JOIN 稱為 FULL OUTER JOIN。


內(nèi)連接:是最常用的鏈接,也叫等值鏈接
不管限制條件在on中還是在where中,,內(nèi)連接都得到笛卡爾積中滿足所有條件的記錄,。對(duì)于inner join, on和where的效果是一樣的。

1)當(dāng)沒有限制條件,此時(shí)為笛卡爾積:
Sql代碼 復(fù)制代碼 收藏代碼
  1. select * from employee , department ;   
  2. select * from employee inner join department on 1=1;  

得到的效果是一樣的.



2)此時(shí)如果加上where限制條件,則對(duì)上面笛卡爾積的每一條記錄看它是否滿足限制條件,,如果滿足,,則它在結(jié)果集中。
Sql代碼 復(fù)制代碼 收藏代碼
  1. select * from employee emp , department dept where emp.deptid= dept.id;   
  2. select * from employee emp inner join department dept on emp.deptid= dept.id;  





外連接
  則分為"左外連接(左連接)","右外連接(右連接)"兩種情況: left join / right join

交叉連接(完全連接)cross join 不帶 where 條件的

左連接(left join):
1)當(dāng)沒加限制條件時(shí),得到笛卡爾積,,同內(nèi)連接沒加限制條件一樣
 
Sql代碼 復(fù)制代碼 收藏代碼
  1. select * from employee left join department on 1=1;  


2)當(dāng)添加特定條件時(shí):
  oracle數(shù)據(jù)庫(kù)中可以用(+)來(lái)實(shí)現(xiàn), 
Sql代碼 復(fù)制代碼 收藏代碼
  1. select * from employee emp , department dept where emp.deptid= dept.id(+);  

即“(+)”所在位置的另一側(cè)為連接的方向,,左連接說(shuō)明等號(hào)左側(cè)的所有記錄均會(huì)被顯示,無(wú)論其在右側(cè)是否得到匹配;
等同于:
Sql代碼 復(fù)制代碼 收藏代碼
  1. select * from employee emp left join department dept on emp.deptid= dept.id;  





右連接:
  oracle數(shù)據(jù)庫(kù)中可以用(+)來(lái)實(shí)現(xiàn), 
Sql代碼 復(fù)制代碼 收藏代碼
  1. select * from employee emp , department dept where emp.deptid(+)= dept.id;  

即“(+)”所在位置的另一側(cè)為連接的方向,,右連接說(shuō)明等號(hào)右側(cè)的所有記錄均會(huì)被顯示,,無(wú)論其在左側(cè)是否得到匹配;
等同于:
Sql代碼 復(fù)制代碼 收藏代碼
  1. select * from employee emp right join department dept on emp.deptid= dept.id;  




全連接:會(huì)從左表 (employee) 和右表 (department) 那里返回所有的行,。如果 "employee" 中的行在表 "department" 中沒有匹配,或者如果 "department" 中的行在表 "employee" 中沒有匹配,,這些行同樣會(huì)列出
 

連接分為三種:內(nèi)連接,、外連接、交叉連接  
 
1,、等值連接:在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列,。

2,、不等連接: 在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括>,、>=,、<=、<,、!>,、!<和<>。

3,、自然連接(僅僅是一種特的等值連接):在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,,但它使用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列,。
      
外連接:  
分為三種:左外連接(LEFT OUTER JOIN或LEFT JOIN),、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種  
 
交叉連接(CROSS JOIN)   
沒有WHERE 子句,它返回連接表中所有數(shù)據(jù)行的笛卡爾積 
先返回 左表所有行,,左表行在與右表行一一組合,,等于兩個(gè)表相乘

Sql代碼 復(fù)制代碼 收藏代碼
  1. select * from employee emp cross join department dept  




如果需要加條件,則使用where

Sql代碼 復(fù)制代碼 收藏代碼
  1. select * from employee emp cross join department dept where emp.deptid= dept.id;    
  2. --等同于   
  3. select * from employee emp inner join department dept on emp.deptid= dept.id;  





兩個(gè)主要的連接類型是內(nèi)連 接和外連 接。到目前為止,,所有示例中使用的都是內(nèi)連 接,。內(nèi)連 接只保留交叉積中滿足連接條件的那些行。如果某行在一個(gè)表中存在,,但在另一個(gè)表中不存在,,則結(jié)果表中不包括該信息。
外連 接是內(nèi)連 接和左表和/或右表中未包括內(nèi)連 接中的那些行的并置,。當(dāng)對(duì)兩個(gè)表執(zhí)行外連 接時(shí),,可任意將一個(gè)表指定為左表而將另一個(gè)表指定為右表。外連 接有三種類型:

左外連 接包括內(nèi)連 接和左表中未包括在內(nèi)連 接中的那些行,。

右外連 接包括內(nèi)連 接和右表中未包括在內(nèi)連 接中的那些行,。

全外連 接包括內(nèi)連 接以及左表和右表中未包括在內(nèi)連 接中的行。
內(nèi)連 接一般是檢索兩個(gè)表里連接字段都存在的數(shù)據(jù),。
左連接的意思是,,查詢左(語(yǔ)句前面)表里的所有內(nèi)容,,無(wú)論右邊表里有沒有。右邊表里沒有的內(nèi)容用NULL代替,。
右連接和左連接相反,。

數(shù)據(jù)表的連接有:
1、內(nèi)連 接(自然連接): 只有兩個(gè)表相匹配的行才能在結(jié)果集中出現(xiàn)
2,、外連 接: 包括
(1)左外連 接(左邊的表不加限制)
(2)右外連 接(右邊的表不加限制)
(3)全外連 接(左右兩表都不加限制)
3,、自連接(連接發(fā)生在一張基表內(nèi))

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多