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