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":{}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章