SQL數據庫集合運算

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,新建兩個表格並插入一些數據創建測試數據集:","attrs":{}}]},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"-- 創建tableA測試數據集\nCREATE TABLE tableA(\n\tid INTEGER,\n\tname varchar(16)\n);\nINSERT INTO tableA VALUES (1, 'Pirate');\nINSERT INTO tableA VALUES (2, 'Monkey');\nINSERT INTO tableA VALUES (3, 'Ninja');\nINSERT INTO tableA VALUES (4, 'Spaghetti');\n\n-- 創建tableB測試數據集\nCREATE TABLE tableB(\n\tid INTEGER,\n\tname varchar(16)\n);\nINSERT INTO tableB VALUES (1, 'Rutabaga');\nINSERT INTO tableB VALUES (2, 'Pirate');\nINSERT INTO tableB VALUES (3, 'Darth Vade');\nINSERT INTO tableB VALUES (4, 'Ninja');\n\n-- 創建tableC測試數據集\nCREATE TABLE tableC(\n\tid INTEGER,\n\tname varchar(16)\n);\nINSERT INTO tableC VALUES (1, 'Rutabaga');\nINSERT INTO tableC VALUES (2, 'Pirate');\nINSERT INTO tableC VALUES (3, 'Jack');\nINSERT INTO tableC VALUES (4, 'Nike');","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"表的加減法","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"並集(UNION)","attrs":{}}]},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"-- 取並集且去重\nSELECT name FROM tableA\n\tUNION\n\t\tSELECT name FROM tableB;\n-- 取並集且不去重\nSELECT name FROM tableA\n\tUNION ALL\n\t\tSELECT name FROM tableB;","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"交集(INTERSECT)","attrs":{}}]},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"-- 取交集\nSELECT name FROM tableA\n\tINTERSECT\n\t\tSELECT name FROM tableB;","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"差集(EXCEPT)","attrs":{}}]},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"-- 取差集\nSELECT name FROM tableA\n\tEXCEPT\n\t\tSELECT name FROM tableB;","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"聯結","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"內聯結","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"返回兩個表中符合條件的交集。","attrs":{}}]},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"SELECT * FROM tableA\n\tINNER JOIN tableB ON tableA.name = tableB.name;","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"外聯結","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"FULL OUTER JOIN","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"生成兩個表的並集,對於沒有匹配到的記錄填充","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"null","attrs":{}}],"attrs":{}},{"type":"text","text":"。","attrs":{}}]},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"SELECT * FROM tableA\n\tFULL OUTER JOIN tableB ON tableA.name = tableB.name;","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"LEFT OUTER JOIN","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"生成左側表得全集,對於右側表沒有匹配到的記錄填充","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"null","attrs":{}}],"attrs":{}},{"type":"text","text":"。","attrs":{}}]},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"SELECT * FROM tableA\n\tLEFT OUTER JOIN tableB ON tableA.name = tableB.name;","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"RIGHT OUTER JOIN","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"生成右側表得全集,對於左側表沒有匹配到的記錄填充","attrs":{}},{"type":"codeinline","content":[{"type":"text","text":"null","attrs":{}}],"attrs":{}},{"type":"text","text":"。","attrs":{}}]},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"SELECT * FROM tableA\n\tRIGHT OUTER JOIN tableB ON tableA.name = tableB.name;","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"交叉聯結(CROSS JOIN)","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對兩張表中的全部記錄進行交叉組合,因此結果中的記錄數通常是兩張表中行數的乘積。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"SELECT * FROM tableA\n\tCROSS JOIN tableB;","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"假設查找tableC中name,既不存在與tableA又不存在於tableB。","attrs":{}}]},{"type":"codeblock","attrs":{"lang":"sql"},"content":[{"type":"text","text":"SELECT name FROM tableC\n\tWHERE name NOT IN(\n\t\tSELECT name FROM tableA\n\t\t\tUNION\n\t\t\t\tSELECT name FROM tableB);","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"參考資料","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https://zhuanlan.zhihu.com/p/59656673","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"書籍《SQL基礎教程(第2版)》","attrs":{}}]}],"attrs":{}}],"attrs":{}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章