SQL常用的几种连接(JOIN)小结 SQL常用的几种连接查询

sql\u4e2djoin\u7684\u51e0\u79cd\u5e38\u89c1\u7528\u6cd5\u603b\u7ed3

JOIN\u8fde\u63a5\u7ec4\u5408\u4e24\u4e2a\u8868\u4e2d\u7684\u5b57\u6bb5\u8bb0\u5f55\uff0c\u5305\u62ec\u4e09\u79cd\uff1a INNER JOIN\u8fd0\u7b97\u5f0f\uff1a\u8fde\u63a5\u7ec4\u5408\u4e24\u4e2a\u8868\u4e2d\u7684\u5b57\u6bb5\u8bb0\u5f55\u3002 LEFT JOIN\u8fd0\u7b97\u5f0f\uff1a\u8fde\u63a5\u7ec4\u5408\u4e24\u4e2a\u8868\u4e2d\u7684\u5b57\u6bb5\u8bb0\u5f55\uff0c\u5e76\u5c06\u5305\u542b\u4e86LEFT JOIN\u5de6\u8fb9\u8868\u4e2d\u7684\u5168\u90e8\u8bb0\u5f55\u3002 RIGHT JOIN\u8fd0\u7b97\u5f0f\uff1a\u8fde\u63a5\u7ec4\u5408\u4e24\u4e2a\u8868\u4e2d\u7684\u5b57\u6bb5\u8bb0\u5f55\uff0c\u5e76\u5c06\u5305\u542b\u4e86RIGHT JOIN\u53f3\u8fb9\u8868\u4e2d\u7684\u5168\u90e8\u8bb0\u5f55\u3002 INNER JOIN\u8bbe\u5b9a\u4e24\u4e2a\u8868\u76f8\u5173\u8fde\u7684\u8fd0\u7b97\u5f0f\uff0c\u4ee5\u8fde\u63a5\u7ec4\u5408\u4e24\u4e2a\u8868\u4e2d\u7684\u5b57\u6bb5\u8bb0\u5f55\u3002 INNER JOIN\u8bed\u6cd5\u5982\u4e0b\uff1a FROM \u88681 INNER JOIN \u88682 ON \u88681.\u5b57\u6bb51 \u6bd4\u8f83\u8fd0\u7b97\u5b50 \u88682.\u5b57\u6bb52 \u4e24\u4e2a\u8868\u8fde\u63a5\u7684\u5b57\u6bb5\uff0c\u8b6c\u5982 [\u88681.\u5b57\u6bb51=\u88682.\u5b57\u6bb52]\uff0c\u5fc5\u987b\u5177\u6709\u76f8\u540c\u7684\u5b57\u6bb5\u7c7b\u578b\uff0c\u4f46\u662f\u5b57\u6bb5\u540d\u79f0\u4e0d\u9700\u8981\u76f8\u540c\u3002 \u4f8b\u5982\uff0c\u81ea\u52a8\u7f16\u53f7\u5b57\u6bb5\u7c7b\u578b\u53ef\u4ee5\u8fde\u63a5Long \u7684\u5b57\u6bb5\u7c7b\u578b\uff0c\u4f46\u662f\u5355\u7cbe\u6574\u6570\u5b57\u6bb5\u7c7b\u578b\u4e0d\u80fd\u8fde\u63a5\u53cc\u7cbe\u6574\u6570\u7684\u5b57\u6bb5\u7c7b\u578b\u3002 \u6bd4\u8f83\u8fd0\u7b97\u5b50\u53ef\u4e3a=\u3001\u3001=\u3001\u6216\u3002 JOIN\u8fde\u63a5\u7684\u5b57\u6bb5\uff0c\u4e0d\u53ef\u4ee5\u5305\u542bMEMO\u5b57\u6bb5\u7c7b\u578b\u6216OLE\u5bf9\u8c61\u7c7b\u578b\uff0c\u5426\u5219\u4f1a\u53d1\u751f\u9519\u8bef\u3002 \u5728\u4e00\u4e2aJOIN\u8868\u8fbe\u5f0f\u4e2d\uff0c\u53ef\u4ee5\u8fde\u7ed3\u591a\u4e2aON\u5b50\u53e5\uff1a SELECT fields FROM \u88681 INNER JOIN \u88682 ON \u88681.\u5b57\u6bb51 \u6bd4\u8f83\u8fd0\u7b97\u5b50 \u88682.\u5b57\u6bb51 AND ON \u88681.\u5b57\u6bb52 \u6bd4\u8f83\u8fd0\u7b97\u5b50 \u88682.\u5b57\u6bb52) OR ON \u88681.\u5b57\u6bb53 \u6bd4\u8f83\u8fd0\u7b97\u5b50 \u88682.\u5b57\u6bb53) JOIN\u8868\u8fbe\u5f0f\u4e2d\uff0c\u53ef\u4ee5\u4e3a\u5de2\u72b6\u5f0f\uff1a SELECT fields FROM \u88681 INNER JOIN (\u88682 INNER JOIN [( ]\u88683 [INNER JOIN [( ] \u8868x [INNER JOIN ...)] ON \u88683.\u5b57\u6bb53 \u6bd4\u8f83\u8fd0\u7b97\u5b50 \u8868x.\u5b57\u6bb5x)] ON \u88682.\u5b57\u6bb52 \u6bd4\u8f83\u8fd0\u7b97\u5b50 \u88683.\u5b57\u6bb53) ON \u88681.\u5b57\u6bb51 \u6bd4\u8f83\u8fd0\u7b97\u5b50 \u88682.\u5b57\u6bb52 \u5728\u4e00\u4e2aINNER JOIN\u4e2d\uff0c\u53ef\u4ee5\u5305\u62ec\u5de2\u72b6\u5f0f\u7684LEFT JOIN\u6216RIGHT JOIN\uff0c\u4f46\u662f\u5728\u4e00\u4e2aLEFT JOIN\u6216RIGHT JOIN\u4e2d\u4e0d\u80fd\u5305\u62ec\u5de2\u72b6\u5f0f\u7684INNER JOIN\u3002

\u4e00\u3001\u5185\u8fde\u63a5\uff08Inner Join\uff09
select * from a inner join b on a.name=b.name;\u6b64\u8bed\u53e5\u7684\u7ed3\u679c\u4e3a\u540c\u65f6\u5339\u914d\u8868a\u548c\u8868b\u7684\u8bb0\u5f55\u96c6\u3002\u5373\u5185\u8fde\u63a5\u53d6\u7684\u662f\u4e24\u4e2a\u8868\u7684\u4ea4\u96c6\u3002
\u4e8c\u3001\u5168\u5916\u8fde\u63a5\uff08full outer join\uff09
select * from a full outer join b on a.name=b.name;\u6b64\u8bed\u53e5\u7684\u7ed3\u679c\u4e3a\u8868a\u4e0e\u8868b\u7684\u5e76\u96c6\uff0c\u5373\u4efb\u610f\u4e00\u4e2a\u8868\u7684\u5185\u5bb9\u90fd\u5c06\u88ab\u67e5\u8be2\u51fa\u6765\uff0c\u5982\u679c\u53e6\u4e00\u4e2a\u8868\u65e0\u5bf9\u5e94\u7684\u9879\uff0c\u5219\u663e\u793a\u4e3anull
select * from a full outer join b on a.name=b.name where a.name is null or b.name is null;\u6b64\u8bed\u53e5\u7684\u7ed3\u679c\u4e3a\u8868a\u4e0e\u8868b\u7684\u5e76\u96c6\u9664\u53bb\u4e24\u8868\u7684\u4ea4\u96c6\u3002\u5373\u9664\u53bb\u4e86\u4e24\u8868\u90fd\u6709\u7684\u90e8\u5206\uff0c\u5269\u4f59\u7684\u662f\u4e24\u8868\u5404\u81ea\u4e0d\u540c\u7684\u90e8\u5206
\u4e09\u3001\u5de6\u5916\u8fde\u63a5\uff08left outer join\uff09
select * from a left outer join b on a.name=b.name;\u6b64\u8bed\u53e5\u7684\u7ed3\u679c\u4e3a\u8868a\u7684\u6240\u6709\u9879\u52a0\u8868b\u4e0ea\u76f8\u5339\u914d\u7684\u9879\uff0cb\u4e2d\u6ca1\u6709\u4e0ea\u5339\u914d\u7684\u9879\u65f6\u663e\u793a\u4e3anull
select * from a left outer join b on a.name=b.name where b.name is null;\u6b64\u8bed\u53e5\u7684\u7ed3\u679c\u4e3a\u8868a\u7684\u6240\u6709\u9879\u9664\u53bb\u4e24\u8868\u7684\u4ea4\u96c6
\u56db\u3001\u53f3\u5916\u8fde\u63a5\uff08right outer join)
select * from a right outer join b on a.name=b.name;\u6b64\u8bed\u53e5\u7684\u7ed3\u679c\u4e3a\u8868a\u4e0e\u8868b\u5339\u914d\u7684\u9879\u52a0\u8868b\u7684\u6240\u6709\u9879\uff0ca\u4e2d\u6ca1\u6709\u4e0eb\u5339\u914d\u7684\u9879\u65f6\u663e\u793a\u4e3anull
select * from a right outer join b on a.name=b.name where a.name is null;\u6b64\u8bed\u53e5\u7684\u7ed3\u679c\u4e3a\u8868b\u7684\u6240\u6709\u9664\u53bb\u4e24\u8868\u7684\u4ea4\u96c6

连接运算是8种关系运算中的一种。

五种JOIN方式:

1.INNER JOIN or JOIN2.OUTER JOIN
2.1LEFT OUTER JOIN or LEFT JOIN
2.2RIGHT OUTER JOIN or RIGHT JOIN
2.3FULL OUTER JOIN or FULL JOIN3.NATURAL JOIN4.CROSS JOIN5.SELF JOINPS:JOIN中的简写为语法糖,实际中写出来方便读一点而已12345678910

两种连接条件:

1.Equi JOIN    1.1NATURAL    1.2USING(a,b)    1.3=    ...2.Theta JOIN    2.1>=    2.2<=    2.3>    ...PS:USING(...)指定需要哪些列相等。ON则可以指定任意的连接条件(=,>=,<=,!=,>,<...)123456789101112

JOIN or INNER JOIN

返回两个表中同时满足条件的元组对,不满足的将被丢弃。

OUTER JOIN

LEFT OUTER JOIN

返回左表所有行以及右表满足条件的行,左表有值右表无值填充为null

RIGHT OUTER JOIN

返回右表所有行以及左表满足条件的行,右表有值左表无值填充为null

FULL OUTER JOIN

返回所有表的所有行,在满足条件的行之外,左表满足右表不满足或者相反,均填充null

NATURAL JOIN

1、来自两个关系的元组对在共同属性上的值相同。(不限于一个共同属性,也可以是多个共同属性)
2、去掉重复的属性(列)。
3、列出属性的顺序:先是共同属性,然后是第一个关系的属性,最后是第二个关系的属性。

为了防止两个表有多个共同属性时natural join 会忽略部分需要的元组对,应使用join…using(…),以指定需要哪些列相等
join…using(…)连接只能局限在指定的属性上

CROSS JOIN

返回笛卡儿积

SELF JOIN

相当于A JOIN A

最后放一张图:



SQL join 用于把来自两个或多个表的行结合起来。

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。

实例:

from 树懒学堂

以上即“Websites”表中的“id”列指向“access_log”表中的字段“site_id”。上面这两个表是通过“site_id”列联系起来的。

不同的 SQL JOIN

您可以使用的不同的 SQL JOIN 类型:

INNER JOIN:如果表中有至少一个匹配,则返回行

LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行

FULL JOIN:只要其中一个表中存在匹配,则返回行



  • sql join鏄粈涔堟剰鎬
    绛旓細sql join涓昏鍒嗕负鍥涚绫诲瀷锛氬唴杩炴帴锛坕nner join锛夈佸乏杩炴帴锛坙eft join锛夈佸彸杩炴帴锛坮ight join锛夊拰鍏ㄨ繛鎺ワ紙full join锛銆傚叾涓紝鍐呰繛鎺ュ彲浠ュ府鍔╂垜浠煡璇袱涓〃涓叡鍚屽瓨鍦ㄧ殑鏁版嵁锛屽乏杩炴帴鍒欏彲浠ュ皢宸﹁〃鐨勫叏閮ㄦ暟鎹拰鍙宠〃涓鍚堝叧鑱旀潯浠剁殑閮ㄥ垎鏁版嵁杩涜鏌ヨ锛屽彸杩炴帴鍒欑被浼煎乏杩炴帴锛屽彧涓嶈繃鏄彸琛ㄧ殑鍏ㄩ儴鏁版嵁鍜屽乏琛...
  • SQL JOIN 鐨勫洓绉嶈繛鎺鏂瑰紡
    绛旓細SQL Join 鍏辨湁鍥涚杩炴帴鏂瑰紡锛欽OIN锛孡EFT JOIN锛孯IGHT JOIN锛孎ULL JOIN銆傚師濮嬬殑琛 (鐢ㄥ湪渚嬪瓙涓殑)锛歅ersons 琛細Id_PLastNameFirstNameAddressCity1AdamsJohnOxford StreetLondon2BushGeorgeFifth AvenueNew York3CarterThomasChangan StreetBeijingOrders 琛細Id_OOrderNoId_P177895324467833224561424562153476465鍐...
  • 甯歌鐨澶氳〃杩炴帴鏌ヨ鏈夊摢浜
    绛旓細甯歌鐨勫琛ㄨ繛鎺ユ煡璇富瑕佹湁鍥涚锛氬唴杩炴帴锛圛NNER JOIN锛夈佸乏杩炴帴锛圠EFT JOIN锛夈佸彸杩炴帴锛圧IGHT JOIN锛夊拰鍏ㄨ繛鎺ワ紙FULL JOIN锛夈1. 鍐呰繛鎺ワ紙INNER JOIN锛夛細鍐呰繛鎺ユ槸鏈甯哥敤鐨勪竴绉嶈繛鎺ョ被鍨嬨傚畠鍙繑鍥炰袱涓〃涓尮閰嶇殑琛屻傚鏋滄煇琛屽湪鍏朵腑涓涓〃涓病鏈夊尮閰嶏紝鍒欒琛屼笉浼氬嚭鐜板湪缁撴灉涓備緥瀛愶細鍋囪鎴戜滑鏈変袱涓〃...
  • SQL甯哥敤鐨勫嚑绉嶈繛鎺(JOIN)灏忕粨
    绛旓細1.Equi JOIN 1.1NATURAL 1.2USING(a,b) 1.3= ...2.Theta JOIN 2.1>= 2.2<= 2.3> ...PS:USING(...)鎸囧畾闇瑕佸摢浜涘垪鐩哥瓑銆侽N鍒欏彲浠ユ寚瀹氫换鎰鐨勮繛鎺鏉′欢(=,>=,<=,!=,>,<...)123456789101112 JOIN or INNER JOIN 杩斿洖涓や釜琛ㄤ腑鍚屾椂婊¤冻鏉′欢鐨勫厓缁勫锛屼笉婊...
  • 鏁版嵁搴join鐨勭敤娉
    绛旓細JOIN鎿嶄綔涓昏鏈変互涓嬪嚑绉嶇被鍨嬶細INNER JOIN锛堝唴杩炴帴锛夛紝瀹冭繑鍥炰袱涓〃涓尮閰嶇殑琛岋紱LEFT JOIN锛堝乏杩炴帴锛夋垨LEFT OUTER JOIN锛岃繑鍥炲乏琛ㄧ殑鎵鏈夎锛屽鏋滃彸琛ㄤ腑瀛樺湪鍖归厤锛屽垯杩斿洖杩欎簺琛岀殑鍖归厤椤癸紝鍚﹀垯杩斿洖NULL锛汻IGHT JOIN锛堝彸杩炴帴锛夋垨RIGHT OUTER JOIN锛屼笌LEFT JOIN鐩稿弽锛岃繑鍥炲彸琛ㄧ殑鎵鏈夎鍙婂尮閰嶇殑宸﹁〃琛岋紱FULL...
  • sql琛ㄤ笌琛ㄤ箣闂鐨勮繛鎺鏈夊摢鍑犵褰㈠紡?鐩稿簲鐨勫叧閿瓧鏄粈涔?
    绛旓細鍐杩炴帴鐨勮繛鎺鏌ヨ缁撴灉闆嗕腑浠呭寘鍚弧瓒虫潯浠剁殑琛岋紝鍐呰繛鎺ユ槸SQL Server缂虹渷鐨勮繛鎺ユ柟寮忥紝鍙互鎶奍NNERJOIN绠鍐欐垚JOIN锛屾牴鎹墍浣跨敤鐨勬瘮杈冩柟寮忎笉鍚岋紝鍐呰繛鎺ュ張鍒嗕负绛夊艰繛鎺ャ佽嚜鐒惰繛鎺ュ拰涓嶇瓑杩炴帴涓夌锛涗氦鍙夎繛鎺ョ殑杩炴帴鏌ヨ缁撴灉闆嗕腑鍖呭惈涓や釜琛ㄤ腑鎵鏈夎鐨勭粍鍚.澶栬繛鎺ョ殑杩炴帴鏌ヨ缁撴灉闆嗕腑鏃㈠寘鍚偅浜涙弧瓒虫潯浠剁殑琛岋紝杩樺寘鍚叾涓...
  • 璇烽棶SQL涓殑鍑犵join鐨勬柟娉曟湁浠涔堝尯鍒?鎵ц鏁堢巼濡備綍?
    绛旓細(1)杩炴帴 select * from table1,table2 绛変环浜 select * from table1 cross join table2 select * from table1,table2 where table1.row=table2.row (2)鑷繛鎺 select * from emploly e1 ,emploly e2 select e1.name,e2.name from employ e1,employ e2 where e1.name=e2.name (3)鍐...
  • SQL 鍑犵鑱旇〃鏌ヨ鏂瑰紡
    绛旓細鐩稿綋浜庢櫘閫氱殑杩炴帴銆 涓夈両NNER JOIN锛堝唴杩炴帴锛 鍐呰繛鎺ュ氨鐩稿綋浜庢櫘閫氱殑CROSS JOIN锛屽彧鏄牸寮忎笉涓鏍凤紝INNER JOIN鍦ㄥ悗闈㈡湁涓涓狾N瀛愬彞锛堢浉褰撲簬WHERE锛夌殑鎼滅储鏉′欢锛岀敤浜庤繃婊よ繑鍥炵殑琛屻 鍥涖丱UTER JOIN 锛堝杩炴帴锛 select * from ta outer join tb on (ta.c1=tb.c1) outer join鍛婅瘔DBMS鐢熸垚缁撴灉琛紝鍦...
  • sql涓璲oin鐨勫嚑绉嶅父瑙鐢ㄦ硶鎬荤粨
    绛旓細渚嬪锛岃嚜鍔ㄧ紪鍙峰瓧娈电被鍨嬪彲浠ヨ繛鎺ong 鐨勫瓧娈电被鍨嬶紝浣嗘槸鍗曠簿鏁存暟瀛楁绫诲瀷涓嶈兘杩炴帴鍙岀簿鏁存暟鐨勫瓧娈电被鍨嬨 姣旇緝杩愮畻瀛愬彲涓=銆<銆>銆<=銆>=銆佹垨<>銆 JOIN杩炴帴鐨勫瓧娈碉紝涓嶅彲浠ュ寘鍚玀EMO瀛楁绫诲瀷鎴朞LE瀵硅薄绫诲瀷锛屽惁鍒欎細鍙戠敓閿欒銆 鍦ㄤ竴涓狫OIN琛ㄨ揪寮忎腑锛屽彲浠ヨ繛缁撳涓狾N瀛愬彞锛 SELECT fields FROM 琛1 INNER...
  • sql琛杩炴帴鐨勫嚑绉鏂瑰紡
    绛旓細sql琛杩炴帴鍒嗘垚澶栬繛鎺ャ佸唴杩炴帴鍜屼氦鍙夎繛鎺ャ備竴.澶栬繛鎺ユ杩帮細澶栬繛鎺ュ寘鎷涓夌,鍒嗗埆鏄乏澶栬繛鎺ャ佸彸澶栬繛鎺ャ佸叏澶栬繛鎺ャ傚搴旂殑sql鍏抽敭瀛:LEFT/RIGHT/FULL OUTER JOIN,閫氬父鎴戜滑閮界渷鐣UTER鍏抽敭瀛,鍐欐垚LEFT/RIGHT/FULL JOIN銆傚湪宸︺佸彸澶栬繛鎺ヤ腑閮戒細浠ヤ竴绉嶈〃涓哄熀琛紝鍩鸿〃鐨勬墍鏈夎銆佸垪閮戒細鏄剧ず锛屽琛ㄥ鏋滃拰鏉′欢涓...
  • 扩展阅读:cnc编程快速自学 ... python基础代码大全 ... 如何自己编程做游戏 ... sql的四种连接方式 ... sql编程入门自学 ... sql和python哪个难学 ... c++和python先学哪个 ... sql调优的几种方式 ... sql常用命令大全 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网