1.數據環境准備
CREATE TABLE CUST_INFO(CST_ID VARCHAR(40),CST_NM VARCHAR(100),PASSWORD VARCHAR(6)); INSERT INTO CUST_INFO VALUES('1','郭嘯天','123456'); INSERT INTO CUST_INFO VALUES('2','楊鐵心','123456'); CREATE TABLE CUST_INFO_DETAIL(CST_ID VARCHAR(40),SEX VARCHAR(4),AGE INT); INSERT INTO CUST_INFO_DETAIL VALUES('1','男',34); INSERT INTO CUST_INFO_DETAIL VALUES('3','女',38);
1.1 表CUST_INFO
CST_ID |
CST_NM |
PASSWORD |
1 |
郭嘯天 |
123456 |
2 | 楊鐵心 | 123456 |
1.2 表CUST_INFO_DETAIL
CST_ID | SEX | AGE |
1 | 男 | 34 |
3 | 女 | 38 |
2.各種連接
2.1 內聯(inner join)
如果想把用戶信息列寫出來,那么一般這么寫:
SELECT * FROM CUST_INFO T1 ,CUST_INFO_DETAIL T2 WHERE T1.CST_ID=T2.CST_ID
等同於
SELECT * FROM CUST_INFO T1 INNER JOIN CUST_INFO_DETAIL T2 ON T1.CST_ID=T2.CST_ID
把兩個表中都存在CST_ID的行拼成一行(即內聯),但后者的效率會比前者高很多,建議用后者(內聯)的寫法。
運行結果如下:
CST_ID |
CST_NM |
PASSWORD |
CST_ID |
SEX |
AGE |
1 |
郭嘯天 |
123456 |
1 |
男 |
34 |
2.2 左聯(left join)
顯示左表CUST_INFO中的所有行,並把右表CUST_INFO_DETAIL中符合條件加到左表CUST_INFO中;右表CUST_INFO_DETAIL中不符合條件,就不用加入結果表中,並且NULL表示
SQL:
CST_ID |
CST_NM |
PASSWORD |
CST_ID |
SEX |
AGE |
1 |
郭嘯天 |
123456 |
1 |
男 |
34 |
2 | 楊鐵心 | 123456 | NULL | NULL | NULL |
2.3 右連接(right join)
顯示右表CUST_INFO_DETAIL中的所有行,並把左表CUST_INFO中符合條件加到右表CUST_INFO_DETAIL中;左表CUST_INFO中不符合條件,就不用加入結果表中,並且NULL表示。
T_ID |
CST_NM |
PASSWORD |
CST_ID |
SEX |
AGE |
1 |
郭嘯天 |
123456 |
1 |
男 |
34 |
NULL | NULL | NULL | 3 | 女 | 38 |
2.4 全連接(full join)
顯示左表CUST_INFO、右表CUST_INFO_DETAIL兩邊中的所有行,即把左聯結果表+右聯結果表組合在一起,然后過濾掉重復的。
ID |
CST_NM |
PASSWORD |
CST_ID |
SEX |
AGE |
1 |
郭嘯天 |
123456 |
1 |
男 |
34 |
NULL | NULL | NULL | 3 | 女 | 38 |
楊鐵心 | 123456 | NULL | NULL | NULL |