JOIN用法
GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=2044
昨天搞培训老颉将了数据库和SQL的一些知识,大部分还是明白的,对SQL的连接部分不是很清楚,今天彻底搞明白它算了,学习ing...
1. INNER JOIN
内连接,返回多个表中符合条件的数据而舍弃不符合条件的数据。
Run:
SELECT *
FROM TABLE_POICATE1 C1 INNER JOIN TABLE_POICATE2 C2
ON C1.CATE1_CODE=C2.CATE1_CODE INNER JOIN 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 04 02 政策性银行 ZCXYH 04 02 03 中国农业发展银行 ZGNYFZYH
按我们需要的格式联接起来:
Run:
SELECT C1.CATE1_NAME || "/" || C2.CATE2_NAME || "/" || C3.CATE3_NAME AS CATENAME
FROM TABLE_POICATE1 C1 INNER JOIN TABLE_POICATE2 C2
ON C1.CATE1_CODE=C2.CATE1_CODE INNER JOIN 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 RIGHT JOIN TABLE_POICATE2 C2
ON C2.CATE1_CODE=C1.CATE1_CODE
Result:
02 政府机构 ZFJG 02 04 边检机关 BJJG
02 政府机构 ZFJG 02 05 涉外机构 SWJG
02 政府机构 ZFJG 02 06 驻地机构 ZDJG
02 政府机构 ZFJG 02 07 民主党派 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 LEFT JOIN TABLE_POICATE2
C2
ON C1.CATE1_CODE=C2.CATE1_CODE LEFT JOIN TABLE_POICATE3
C3
ON C2.CATE1_CODE=C3.CATE1_CODE AND C2.CATE2_CODE=C3.CATE2_CODE
Result:
07 05 99 工商企业 纺织服装 其它
07 06 01 工商企业 电子电器 电子电器
07 06 02 工商企业 电子电器 电工照明
07 06 99 工商企业 电子电器 其它
07 07 01 工商企业 仪表仪器 仪表仪器
07 07 99 工商企业 仪表仪器 其它
...
这个得出的列表就是正常情况下我们一般需要的结果了。。。
在一类表中插入17门址类,再连接。。。
99 其它 QT 99 99 其它 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 CROSS JOIN 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-
GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
https://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=2044
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?