SQL&&LINQ:左(外)連接,右(外)連接,內連接,完全連接,交叉連接,多對多連接


SQL:

外連接和內連接:

左連接或左外連接:包含左邊的表的所有行,如果右邊表中的某行沒有匹配,該行內容為空(NULL)

--outer jion:left join or left outer join

select * from dbo.Project left join dbo.Voice on (dbo.Project.voiceID=dbo.Voice.ID)

 

 

右連接或右外連接:包含右邊表的所有行,如果左邊表中的某行沒有匹配,該行內容為空(NULL)

--outer jion:right join or right outer join

select * from dbo.Project right join dbo.Voice on(dbo.Project.voiceID=dbo.Voice.ID)

 

 

完全連接或完全外連接:涵蓋左連接與右連接,包含兩張表中的所有行,不匹配的內容為空(NULL)

--outer join:full join or full outer join

select * from dbo.Project full join dbo.Voice on (dbo.Project.voiceID=dbo.Voice.ID)

 

 

內連接:

--join or inner join

select * from dbo.Project inner join dbo.Voice on (dbo.Project.voiceID=dbo.Voice.ID)

select * from dbo.Project,dbo.Voice where (dbo.Project.voiceID=dbo.Voice.ID)

select p.ID,p.Name,p.bak,v.NAME from dbo.Project p join dbo.Voice v on(p.voiceID=v.ID)

 

 

交叉連接:(1)分為沒有where子句的交叉連接將產生連接所涉及的表的笛卡爾積。第一個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。

--cross join

select * from dbo.Project cross join dbo.Voice

select * from dbo.Project cross join dbo.Voice where (dbo.Project.voiceID=dbo.Voice.ID)

 

 

--兩表關系為一對多,多對一,多對多的連接語句

select p.Name,v.NAME from dbo.Project_Voice as pv left join dbo.Voice as v on v.ID=pv.voiceID left join dbo.Project as p on p.ID=pv.projectID

 

 

 

select p.Name,v.NAME from dbo.Project_Voice as pv left join dbo.Voice as v on v.ID=pv.voiceID left join dbo.Project as p on p.ID=pv.projectID

where p.voiceID=v.ID

 

 

 

LINQ:(概念和結果參考sql語句的)

左連接:

var userInfo = from s in db.Project

                           join c in db.Voice on s.voiceID equals c.ID into ProjectV

                           from pv in ProjectV.DefaultIfEmpty()

                           select new { s.Name,s.bak,pv.NAME,s.ID};

右連接:

var userInfo = from c in db.Voice

                           join s in db.Project on c.ID equals s.voiceID into PV

                           from pv in PV.DefaultIfEmpty()

                           select new { pv.Name,pv.bak,pv.ID,c.NAME};

內連接:

var userInfo = from s in db.Project

                           join c in db.Voice on s.voiceID equals c.ID

                           select new { s.Name, s.bak, c.NAME, s.ID };


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM