購(gòu)買(mǎi)了域名之后怎么做網(wǎng)站創(chuàng)建一個(gè)網(wǎng)站需要什么
left join, right join 和inner join:這些都是SQL中用來(lái)連接兩個(gè)或多個(gè)表的操作。
union,union all:用于合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果。
但是有時(shí)候,對(duì)于Select出來(lái)的結(jié)果集不是很清楚。
假設(shè)我們有兩張表。person表是左邊的表。address是右邊的表。我們分別用inner join,left join和right join,去驗(yàn)證select的結(jié)果集到底有什么區(qū)別。
1.inner join,也稱(chēng)內(nèi)連接,我們寫(xiě)出來(lái)的sql如下:
select * from test.person p inner join test.address a on a.personID = p.personId
這條sql的查詢(xún)結(jié)果是:
由此可見(jiàn),返回的結(jié)果行是連接條件為真的行。如果連接條件沒(méi)有匹配行,那么返回的結(jié)果,就會(huì)是空的。
2.left join,也稱(chēng)左連接,給定下面sql語(yǔ)句:
select * from test.person p left join test.address a on a.personID = p.personId
這條sql的查詢(xún)結(jié)果是:
可以從結(jié)果中看到,返回了person表中所有的行,以及address表匹配的行,如果address表中沒(méi)有匹配的行,則返回NULL。可以總結(jié)為:select結(jié)果集是返回左邊表中的所有行,以及與右邊表匹配的行,如果右邊表中沒(méi)有匹配的行,則返回NULL。
3.right join,也稱(chēng)右連接,顧名思義,用法與左連接是相似的。依舊給定語(yǔ)句:
select * from test.person p right join test.address a on a.personID = p.personId
這條sql的查詢(xún)結(jié)果是:
可以從結(jié)果中看到,返回了address表中所有的行,以及person表匹配的行,如果person表中沒(méi)有匹配的行,則返回NULL??梢钥偨Y(jié)為:select結(jié)果集是返回右邊表中的所有行,以及與左邊表匹配的行,如果左邊表中沒(méi)有匹配的行,則返回NULL。
4.union和union all
與上面三個(gè)不同的是,union和 union all內(nèi)部的 select語(yǔ)句必須擁有相同數(shù)量的列,并且列的順序必須相同,同時(shí),列也必須擁有相似的數(shù)據(jù)類(lèi)型。
比如給定以下兩條sql:
select personID from test.person
select personID from test.address
使用union時(shí)的結(jié)果如下:
select personID from test.person
union
select personID from test.address
使用union all時(shí)的結(jié)果如下:
select personID from test.person
union all
select personID from test.address
由此可見(jiàn),union是選取不同值返回。union all是返回所有的值。