nop*_*ole 9 mysql sql union join intersection
我一直认为加入SQL是两个表之间的某种联系.
例如,
select e.name, d.name from employees e, departments d
where employees.deptID = departments.deptID
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它链接两个表,以向每个员工显示部门名称而不是部门ID.有点像"联动"或"联盟"侧面".
但是,在了解了内连接与外连接之后,它表明连接(内连接)实际上是一个交集.
例如,当一个表具有ID 1,2,7,8时,而另一个表仅具有ID 7和8,我们获得交集的方式是:
select * from t1, t2 where t1.ID = t2.ID
Run Code Online (Sandbox Code Playgroud)
获得"7和8"的两个记录.所以它实际上是一个交集.
所以我们有2个表的"交集".将其与2个表上的"Union"操作进行比较.Join可以被认为是"交叉点"吗?但是它的"连接"或"侧向联合"方面呢?
你走在正确的轨道上; a返回的行INNER JOIN是满足连接条件的行.但这只是一个交集,因为你在连接条件中使用相等,应用于每个表的列.
还要注意,INTERSECTION它已经是一个SQL操作,它有另一个含义 - 它与它不一样JOIN.
SQL JOIN可以生成一种新类型的行,它包含两个连接表中的所有列.例如:表A中不存在col4,col5和col6,但它们与表B的连接结果中确实存在:
SELECT a.col1, a.col2, a.col3, b.col4, b.col5, b.col6
FROM A INNER JOIN B ON a.col2=b.col5;
Run Code Online (Sandbox Code Playgroud)
SQL INTERSECTION返回两个独立表共有的行,这些表必须已经具有相同的列.
SELECT col1, col2, col3 FROM A
INTERSECT
SELECT col1, col2, col3 FROM B;
Run Code Online (Sandbox Code Playgroud)
这恰好产生与以下连接相同的结果:
SELECT a.col1, a.col2, a.col3
FROM A INNER JOIN B ON a.col1=b.col1 AND a.col2=b.col2 AND a.col3=b.col3;
Run Code Online (Sandbox Code Playgroud)
并非每个品牌的数据库都支持INTERSECTION运营商.
连接“链接”或 erm... 连接两个表中的行。我认为这就是你所说的“横向联盟”的意思,尽管我个人认为这是一种糟糕的表达方式。但不同类型的连接执行的操作略有不同:
Jeff Atwood 博客上的此页面描述了其他可能性。
| 归档时间: |
|
| 查看次数: |
14831 次 |
| 最近记录: |