当前位置: 首页 > 面试题库 >

SQL JOIN和不同类型的JOIN

微生令雪
2023-03-14
问题内容

什么是SQL JOIN?有哪些不同的类型?


问题答案:

SQL JOIN 是从两个或多个数据库表中检索数据的方法。

SQL JOINs有什么不同?

总共有5JOIN秒。他们是 :

  1. JOIN or INNER JOIN
  2. OUTER JOIN

     2.1 LEFT OUTER JOIN or LEFT JOIN
     2.2 RIGHT OUTER JOIN or RIGHT JOIN
     2.3 FULL OUTER JOIN or FULL JOIN

  3. NATURAL JOIN
  4. CROSS JOIN
  5. SELF JOIN

1. JOIN或INNER JOIN:

在这种情况下JOIN,我们获得了两个表中都符合条件的所有记录,并且两个表中不匹配的记录均未报告。

换句话说,INNER JOIN基于以下事实:仅应列出两个表中的匹配条目。

需要注意的是一个JOIN没有任何其他JOIN的关键字(如INNEROUTERLEFT,等)是INNER JOIN。换句话说,JOIN是的语法糖INNER JOIN

2.外连接:

OUTER JOIN 检索

一个表中的匹配行与另一表中的所有行匹配,或者所有表中的所有行匹配(是否匹配)。

共有三种外连接:

2.1左外联接或左联接

此联接返回左表中的所有行以及右表中的匹配行。如果右表中没有匹配的列,则返回NULL值。

2.2正确的外部联接或正确的联接

JOIN将返回右表中的所有行以及左表中的匹配行。如果左表中没有匹配的列,则返回NULL值。

2.3完全外部联接或完全联接

JOIN结合LEFT OUTER JOINRIGHT OUTER JOIN。当满足条件时,它从任一表返回行,而NULL在没有匹配项时返回值。

换句话说,OUTER JOIN基于以下事实:仅应列出表之一(右或左)或表两者(全)中的匹配条目。

Note that `OUTER JOIN` is a loosened form of `INNER JOIN`.

3.自然加入:

它基于两个条件:

  1. JOIN对所有与平等相同名称的列所做的。
  2. 从结果中删除重复的列。

这似乎本质上是理论上的,因此(可能)大多数DBMS甚至都不愿意为此提供支持。

4.交叉加入:

它是所涉及的两个表的笛卡尔乘积。CROSS JOIN在大多数情况下,a的结果都没有意义。而且,我们根本不需要(或者至少需要)。

5.自我加入:

这不是一个不同形式的JOIN,而它是一个JOININNEROUTER等)的表格的给自己。

基于运算符的JOIN

根据JOIN子句使用的运算符,可以有两种类型JOIN的。他们是

  1. 平等加入
  2. 塞塔·乔恩(Theta JOIN)

1. Equi JOIN:

对于任何JOIN类型(INNEROUTER等等),如果仅使用相等运算符(=),那么我们说theJOIN是一个EQUI JOIN

2. Theta JOIN:

与此相同,EQUI JOIN但是它允许所有其他运算符,例如>,<,> =等。

许多人认为EQUI JOIN和Theta都JOIN类似于INNEROUTER etc
JOIN。但是我坚信这是一个错误,并且使想法含糊不清。因为INNER JOINOUTER JOIN等等都与表及其数据,而连接EQUI JOINTHETA JOIN仅与我们前使用运营商连接。

同样,有许多人认为这NATURAL JOIN是某种“奇特的” EQUI JOIN。实际上,这是真的,因为我提到的第一个条件NATURAL JOIN。但是,我们不必将其仅局限于NATURAL JOINs。INNER JOINs,OUTER JOINs等也可以EQUI JOIN



 类似资料:
  • (Spring的@CachePut注释是否适用于void返回类型?) 我遇到了同样的问题 因为这个问题已经存在很长时间了,我不知道是否有解决办法 创建缓存: 使用@CachePut更新此缓存 输出: 我搜索了几天信息,但没有找到答案 除了使用@CacheEvict(cacheNames=userCache,allEntry=true) 有没有办法用@Cacheable和@CachePut解决? 非

  • 问题内容: 以下代码可以正常工作。在两个不同的结构上操作并打印该结构的字段的两种方法: 在控制台中显示所需的输出: 现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数: 我什至无法编译程序: 问 :为什么 当 方法具有相同的名称和Arity 时 ,我可以在接收器中互换结构类型,而不能在参数中互换结构类型? 问题答案: 因为Go不支持在其参数类型上重载用户定

  • 什么是SQL和什么是不同的类型?

  • 我需要编写一个java方法来从一个对象中获取特定的信息。但是,该对象可以是A类型的,也可以是B类型的。下面是我的代码的一部分: 当我这样写它时,它会引发一个错误,说“重复方法”。我怎么才能让这个起作用?

  • 想象一下下面的scanario:我有一个程序,它要求输入一个整数,然后是一个String输入。 根据aobe代码,我没有机会输入姓名。因此,通常我会声明2个扫描仪对象,如下所示: 我的问题是:有必要声明多个扫描仪对象来接受不同类型的输入吗??我这样做是正确的吗? 我已经考虑这个问题很多年了。(SO中的几个问题提到了多扫描仪,但他们的问题只使用了一个扫描仪对象,所以我今天问这个问题。)

  • 我应该像“老”方式那样做吗,还是应该用做些什么?我在想是否有人能给我指明正确的方向。因为我只能找到一种类型的例子。 我想要一张略有不同的牌的清单。或者我应该只使用和...不使用适配器和?