查所有內(nèi)容:select a.*,b.* from 表名1 a,表名2 b where a.id = b.id;
創(chuàng)新互聯(lián)為客戶提供專業(yè)的網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開發(fā). 服務(wù)項目涵蓋了網(wǎng)頁設(shè)計、網(wǎng)站程序開發(fā)、WEB系統(tǒng)開發(fā)、微信二次開發(fā)、手機(jī)網(wǎng)站制作設(shè)計等網(wǎng)站方面業(yè)務(wù)。
查指定內(nèi)容:select a.要查的字段1,a.要查的字段2 from 表名1 a,表名2 b where a.id = b.id;
注意:a表跟b表 id是一樣的!
兩個表需要有共同的字段用來做對應(yīng)關(guān)系,假定表a 的ab字段和表b 的bc字段意義是一樣的:
新建兩張表:
表a:ab ac ad
1 1 2
2 3 4
3 5 6
表b: bc bd be
1 7 8
3 9 10
4 11 12
(此時這樣建表只是為了演示連接SQL語句,當(dāng)然實(shí)際開發(fā)中我們不會這樣建表,實(shí)際開發(fā)中這兩個表會有自己不同的主鍵。)
一、外連接
外連接可分為:左連接、右連接、完全外連接。
1、左連接 left join 或 left outer join
SQL語句:select 表a.ab,表a.ac,表a.ad,表b.bc,表b.bd,表b.be from 表a left join 表b on 表a.ab=表b.bd執(zhí)行結(jié)果以ab行為準(zhǔn):
表:ab ac ad bc bd be
1 1 2 1 7 8
2 3 4 0 0 0
3 5 6 3 9 10
其中b表bc第二行的值在ab中沒有對應(yīng)的所以左連無法找出來,同理右連會變成這樣:
SQL語句:select 表a.ab,表a.ac,表a.ad,表b.bc,表b.bd,表b.be from 表a left join 表b on 表a.ab=表b.bd執(zhí)行結(jié)果以bd行為準(zhǔn):
表:ab ac ad bc bd be
1 1 2 1 7 8
3 5 6 3 9 10
0 0 0 4 11 12
左外連接包含left join左表所有行,如果左表中某行在右表沒有匹配,則結(jié)果中對應(yīng)行右表的部分全部為0.
注:此時我們不能說結(jié)果的行數(shù)等于左表數(shù)據(jù)的行數(shù)。當(dāng)然此處查詢結(jié)果的行數(shù)等于左表數(shù)據(jù)的行數(shù),因?yàn)樽笥覂杀泶藭r為一對一關(guān)系。
右外連接包含right join右表所有行,如果左表中某行在右表沒有匹配,則結(jié)果中對應(yīng)左表的部分全部為0。
注:同樣此時我們不能說結(jié)果的行數(shù)等于右表的行數(shù)。當(dāng)然此處查詢結(jié)果的行數(shù)等于左表數(shù)據(jù)的行數(shù),因?yàn)樽笥覂杀泶藭r為一對一關(guān)系。
3、完全外連接 full join 或 full outer join
SQL語句:select 表a.ab,表a.ac,表a.ad,表b.bc,表b.bd,表b.be from 表a full join 表b on 表a.ab=表b.bd執(zhí)行結(jié)果:
表:ab ac ad bc bd be
1 1 2 1 7 8
2 3 4 0 0 0
3 5 6 3 9 10
0 0 0 4 11 12
完全外連接包含full join左右兩表中所有的行,如果右表中某行在左表中沒有匹配,則結(jié)果中對應(yīng)行右表的部分全部為0,如果左表中某行在右表中沒有匹配,則結(jié)果中對應(yīng)行左表的部分全部為0。
二、內(nèi)連接 join 或 inner join
SQL語句:select 表a.ab,表a.ac,表a.ad,表b.bc,表b.bd,表b.be from 表a inner join 表b on 表a.ab=表b.bdinner join 是比較運(yùn)算符,只返回符合條件的行。
表:ab ac ad bc bd be
1 1 2 1 7 8
3 5 6 3 9 10
三、交叉連接 cross join
1.概念:沒有 WHERE 子句的交叉聯(lián)接將產(chǎn)生連接所涉及的表的笛卡爾積。第一個表的行數(shù)乘以第二個表的行數(shù)等于笛卡爾積結(jié)果集的大小。
表a: ab
星期一
星期二
星期三
表b: cd
張三
李四
王五
SELECT a.ab,b.cd FROM 表a CROSS JOIN 表b
ab cd
星期一 張三
星期一 李四
星期一 王五
星期二 張三
星期二 李四
星期二 王五
星期三 張三
星期三 李四
星期三 王五
兩個表之間有相同的列嗎?列名不一定相同,但值一定要是一致的那種。
如果沒有,在兩個表中添加相同列,使用關(guān)聯(lián)進(jìn)行查詢,否則是達(dá)不到你的要求的。
查詢的SQL語句:
select
t1.title,
t2.content
from
table1
as
t1,
table2
as
t2
where
t1.col
=
t2.col;
其中col是添加的可以關(guān)聯(lián)的字段。
建議采用聯(lián)合查詢 join 而且使用全連接(FULL JOIN)方式
select *
from web_pian
FULL JOIN Orders
ON web_pian.mingcheng=web_shang.mingcheng
Order by web_pian.mingcheng
解釋下:FULL Join 全連接將會輸出所有的記錄,即使有些空缺,和Left Join 左連接有所不同