各行各業(yè)網(wǎng)站建設(shè)獨(dú)立手機(jī)卡頓優(yōu)化軟件
目錄
1. inner join:
2. left join:
3. right join:
4.自連接
5.交叉連接:
6、聯(lián)合查詢(xún)
7、子查詢(xún)
1. inner join:
????????代表選擇的是兩個(gè)表的交差部分。
內(nèi)連接就是表間的主鍵與外鍵相連,只取得鍵值一致的,可以獲取雙方表中的數(shù)據(jù)連接方式。語(yǔ)法如下:
SELECT 列名1,列名2... FROM 表1 INNER JOIN 表2 ON 表1.外鍵=表2.主鍵 WhERE 條件語(yǔ)句;
2. left join:
????????代表選擇的是前面一個(gè)表的全部。
左連接是以左表為標(biāo)準(zhǔn),只查詢(xún)?cè)谧筮叡碇写嬖诘臄?shù)據(jù),當(dāng)然需要兩個(gè)表中的鍵值一致。語(yǔ)法如下:
SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外鍵=表2.主鍵 WhERE 條件語(yǔ)句;
3. right join:
????????代表選擇的是后面一個(gè)表的全部
同理,右連接將會(huì)以右邊作為基準(zhǔn),進(jìn)行檢索。語(yǔ)法如下:
SELECT 列名1 FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.外鍵=表2.主鍵 WhERE 條件語(yǔ)句;
4.自連接
自連接顧名思義就是自己跟自己連接,參與連接的表都是同一張表。(通過(guò)給表取別名虛擬出)
?自連接例子:
一張zone表,查詢(xún) 國(guó)家-省份-城市 在一張表上
select t1.name as 國(guó)家,t2.name as 省份,t3.name as 城市 from zone as t1 inner join zone as t2 inner join zone? as t3 on t1.id=t2.parent_id and t1.parent_id is null and t2.id=t3.parent_id;
select t1.name as 國(guó)家,t2.name as 省份,t3.name as 城市 from zone as t1 inner join zone as t2 on t1.id=t2.parent_id and t1.parent_id is null inner join zone as t3 on t2.id=t3.parent_id;
5.交叉連接:
不適用任何匹配條件。生成笛卡爾積
6、聯(lián)合查詢(xún)
說(shuō)明:一般情況下,我們會(huì)將 IN 或者 OR 語(yǔ)句 改寫(xiě)成 UNION ALL,來(lái)提高性能
UNION ??去重復(fù)
UNION ALL 不去重復(fù)
?
7、子查詢(xún)
子查詢(xún)是將一個(gè)查詢(xún)語(yǔ)句嵌套在另一個(gè)查詢(xún)語(yǔ)句中。
內(nèi)部嵌套其他select語(yǔ)句的查詢(xún),稱(chēng)為外查詢(xún)或主查詢(xún)
內(nèi)層查詢(xún)語(yǔ)句的查詢(xún)結(jié)果,可以為外層查詢(xún)語(yǔ)句提供查詢(xún)條件。
子查詢(xún)中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關(guān)鍵字
還可以包含比較運(yùn)算符:= 、 !=、> 、<等
注意:
1、子查詢(xún)要包含在括號(hào)內(nèi)。
2、將子查詢(xún)放在比較條件的右側(cè)。
3、單行操作符對(duì)應(yīng)單行子查詢(xún),多行操作符對(duì)應(yīng)多行子查詢(xún)
子查詢(xún)例子:
僅查詢(xún)省份
select t2.name 省份 from zone as t2 where t2.parent_id in (select t1.id from zone as t1 where t1.parent_id is null);
查詢(xún)國(guó)家與省份:
select (select t3.name from zone as t3 where t3.id=t2.parent_id) as 國(guó)家,t2.name as 省份 from zone as t2 where t2.parent_id in (select t1.id from zone as t1 where t1.parent_id is null);
?
?