1. 程式人生 > >sql join的用法詳解

sql join的用法詳解

1. INNER JOIN 內連線,返回多個表中符合條件的資料而捨棄不符合條件的資料。 Run: SELECT*FROM TABLE_POICATE1 C1 INNERJOIN TABLE_POICATE2 C2 ON C1.CATE1_CODE=C2.CATE1_CODE INNERJOIN TABLE_POICATE3 C3 ON C2.CATE1_CODE=C3.CATE1_CODE AND C2.CATE2_CODE=C3.CATE2_CODE WHERE C3.CATE1_CODE="04" AND C3.CATE2_CODE="02" AND C3.CATE3_CODE="03"; <=> SELECT*FROM TABLE_POICATE1 C1, TABLE_POICATE2 C2, TABLE_POICATE3 C3
WHERE C3.CATE1_CODE=C2.CATE1_CODE AND C3.CATE2_CODE=C2.CATE2_CODE AND C2.CATE1_CODE=C1.CATE1_CODE AND (C3.CATE1_CODE="04" AND C3.CATE2_CODE="02" AND C3.CATE3_CODE="03"); Result: 04 金融機構 JRJG 0402 政策性銀行 ZCXYH 040203 中國農業發展銀行 ZGNYFZYH 按我們需要的格式聯接起來: Run: SELECT C1.CATE1_NAME || "/" || C2.CATE2_NAME ||
"/" || C3.CATE3_NAME AS CATENAME FROM TABLE_POICATE1 C1 INNERJOIN TABLE_POICATE2 C2 ON C1.CATE1_CODE=C2.CATE1_CODE INNERJOIN TABLE_POICATE3 C3 ON C2.CATE1_CODE=C3.CATE1_CODE AND C2.CATE2_CODE=C3.CATE2_CODE WHERE C3.CATE1_CODE="04" AND C3.CATE2_CODE="02" AND C3.CATE3_CODE="03"; Result: 金融機構/政策性銀行/中國農業發展銀行
2.OUTER JOIN 2.1. LEFT OUTER JOIN/LEFT JOIN 左連線,返回所有匹配行並從join左邊表中返回所有不匹配的行,右邊表用null填充 Run: SELECT*FROM TABLE_POICATE1 C1 RIGHTJOIN TABLE_POICATE2 C2 ON C2.CATE1_CODE=C1.CATE1_CODE Result: 02 政府機構 ZFJG 0204 邊檢機關 BJJG 02 政府機構 ZFJG 0205 涉外機構 SWJG 02 政府機構 ZFJG 0206 駐地機構 ZDJG 02 政府機構 ZFJG 0207 民主黨派 MZDP ... Run: 程式碼 SELECT C3.CATE1_CODE,C3.CATE2_CODE,C3.CATE3_CODE,C1.CATE1_NAME,C2.CATE2_NAME,C3.CATE3_NAME FROM TABLE_POICATE1 C1 LEFTJOIN TABLE_POICATE2 C2 ON C1.CATE1_CODE=C2.CATE1_CODE LEFTJOIN TABLE_POICATE3 C3 ON C2.CATE1_CODE=C3.CATE1_CODE AND C2.CATE2_CODE=C3.CATE2_CODE Result: 070599 工商企業 紡織服裝 其它 070601 工商企業 電子電器 電子電器 070602 工商企業 電子電器 電工照明 070699 工商企業 電子電器 其它 070701 工商企業 儀表儀器 儀表儀器 070799 工商企業 儀表儀器 其它 ... 這個得出的列表就是正常情況下我們一般需要的結果了。。。 在一類表中插入17門址類,再連線。。。 99 其它 QT 9999 其它 QT 17 門址 mz {null} {null} {null} {null} 2.2. RIGHT OUTER JOIN/RIGHT JOIN 右連線,返回所有匹配行並從join右邊表返回所有不匹配行,左邊表沒有的用null填充 其實它就是剛好和左連線對稱啦 2.3. FULL OUTER JOIN/FULL JOIN 全連線,返回所有匹配的行和不匹配的行。 SQLite不支援右連線和全連線 NND,就不測試了,反正結果已經知道了。 3. CROSS JOIN 交叉連線,返回笛卡爾積 SELECT*FROM TABLE_CATE1 CROSSJOIN TABLE_CATE2 <=> SELECT*FROM TABLE_CATE1, TABLE_CATE2 如果TABLE_CATE1有m行,TABLE_CATE2有n行,那返回的結果是m×n行的。 4. 自連線 自己練自己嘍,好像不叫self join。。。 下面是我現學現賣在霏凡上舉給別人的例子: 一家有三代人,這三代之間肯定是父子關係無疑吧?  1、三代人關係: 張爺爺 -> 張爸爸 -> 張兒子 2、做成表(test)來反映 名字  他爹  他兒子 -------------------------------- 張爺爺  null  張爸爸 張爸爸  張爺爺  張兒子 張兒子  張爸爸  null 3、用SQL查這家的樹形關係圖 SELECT A.名字 AS 老爸, B.名字 AS 兒子 FROM test A JOIN test B ON A.他兒子=B.他爹 結果: 老爸   兒子 -------------------- 張爺爺 張爸爸 張爸爸 張兒子 -END-

--------------------------

如果你對java、swing、各種框架、javascript、css、linux、資料庫程式設計等知識很感興趣,或者正在從事這些工作,

歡迎加入我的qq技術交流群:java不瘸腿(219345774)