SQL联合查询(内联、左联、右联、全联)的语法
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 |
声明:书写博客不易,转载请注明出处,请支持原创,侵权将追究法律责任
个性签名:人的一切的痛苦,本质上都是对自己无能的愤怒
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!