📜  SQL中JOIN、IN和EXISTS子句的区别

📅  最后修改于: 2021-09-14 02:45:16             🧑  作者: Mango

SEQUEL 广泛称为 SQL,结构化查询语言是最流行的数据库标准语言。我们可以使用 SQL 执行大量操作,包括创建数据库、以表的形式存储数据、修改、提取等等。有不同版本的 SQL,如 MYSQL、PostgreSQL、Oracle、SQL lite 等。 SQL 中有一些重要的命令,可以大致分为 DDL、DML、DCL、TCL、DQL。

在本文中,我们将区分 SQL 中三个最常用的命令:

  • 存在
  • 加入

1. 在操作员中: 主要与 WHERE 子句一起使用来测试给定的表达式或与一组值中的特定值匹配的记录。它的工作原理类似于多个 OR运算符。 IN运算符的否定不是 IN,它有助于执行与值集不匹配的行。

句法:

其中 col_name 是列的名称, val 是一组值

例子:

         Geeks Student
Stud_ID Name Location
1 Rohit Guwahati
2 Neha Patna
3 Ramesh Noida
4 Jignesh Ahmedabad
5 Raj Guwahati

要获取来自古瓦哈提和巴特那的学生的详细信息:

2. 存在运营商它是 主要用于嵌套查询(query inside a query)。它用于检查子查询中提供的记录是否存在。如果一个或多个记录匹配,则返回布尔值 TRUE,否则在没有行匹配时返回 FALSE。类似地,与 IN运算符,这里我们也可以使用 EXISTS 的否定,称为“NOT EXISTS”运算符。

句法:

where 条件:如果使用两个或多个表,条件还应包含具有公共属性的 column_matching 信息。

例子:

采购表:

客户表:

获取从电子商务网站购买手机的客户的姓名和电子邮件地址的详细信息。

3.加入 用于在某些匹配列的基础上连接两个或多个表的元组或行。如果两个表中的任何条目都不匹配,则返回 NULL 值。 SQL 中基本上有四种类型的 JOINS:

  1. INNER JOIN:返回两个表中匹配的值。
  2. LEFT JOIN:左表(Table1)中的所有记录和右表(Table2)中匹配的行。
  3. RIGHT JOIN:右表(Table2)中的所有记录和左表(Table1)中匹配的行。
  4. FULL OUTER JOIN:从表 1 或表 2 匹配的所有记录。

句法:

其中,JOIN_TYPE 是要执行的 JOIN 类型是 INNER、LEFT、RIGHT、FULL。 col_match 是两个表中的匹配列。

对于上面相同的表‘Purchase Information’‘Customer Information’让我们看看不同的 JOIN运算符执行了什么:

  • 使用内连接:

  • 使用左连接:

  • 使用右连接:

  • 使用完全连接:

SQL 中 JOIN、IN 和 EXISTS 子句的区别

IN 

EXISTS 

JOINS

It works like a multiple OR operator. So, it exempts us to write OR multiple times in a query. It returns TRUE value if matching is found. It is used to join two or more tables into a single table.
All the values inside IN operator will be scanned and then decision is made. If we get TRUE value for a single condition, it will stop its execution. It will first check whether matching takes place or not and then join the two tables on the basis of matching columns in both tables.
It returns TRUE, FALSE as well as NULL values. It returns either TRUE or FALSE. It returns NULL entry in joined table if matching is not present.
It can be used both in nested queries as well as with values as we have seen in the example above. It is only used on nested queries.  JOIN can also be used with nested queries.
It is less efficient when IN is used with subquery because the entire subquery will execute first by the relational database and then the final execution takes place on the basis of condition specified. However, for larger relational table IN might work faster than EXISTS and JOIN in subquery. In case of EXISTS we know that it will return either TRUE or FALSE on the basis of the condition specified by the user. So, for a small table entry in the subquery EXISTS work more efficient than IN. It is similar to EXISTS operator. If the subquery table has relatively lesser data then execution will be more efficient as compared to IN.