您可以在SQL中的联接中使用AND语句吗

您可以在SQL中的联接中使用AND语句吗,sql,Sql,假设您有两个表A和B,并且您正在尝试编写联接查询,是否可能: SELECT A.col1, B.col1 FROM A JOIN B on (A.col2 = B.col2 AND B.col3 = 'hello') 这是否会返回表a中的col1和表B中的col2表,其中表的第二列中有匹配项,而表B的第三列是“hello” 也就是说,它将只返回col2中匹配的行,这将进一步简化为表B中col3为“hello”的情况?可以 您可以在ON子句中指定任何类型的布尔条件 不强制要求条件中包含任何列,

假设您有两个表A和B,并且您正在尝试编写联接查询,是否可能:

SELECT A.col1, B.col1 
FROM A JOIN B on (A.col2 = B.col2 AND B.col3 = 'hello')
这是否会返回表a中的col1和表B中的col2表,其中表的第二列中有匹配项,而表B的第三列是“hello”

也就是说,它将只返回col2中匹配的行,这将进一步简化为表B中col3为“hello”的情况?

可以

您可以在
ON
子句中指定任何类型的布尔条件

不强制要求条件中包含任何列,因此以下所有内容均有效:

SELECT A.col1, B.col1 FROM A JOIN B on 1=1
SELECT A.col1, B.col1 FROM A JOIN B on B.col3 = 'hello'
SELECT A.col1, B.col1 FROM A JOIN B on (A.col2 = B.col2 AND B.col3 = 'hello')
SELECT A.col1, B.col1 FROM A JOIN B on (A.col2 = B.col2 AND B.col3 = C.col3)
SELECT A.col1, B.col1 FROM A LEFT JOIN B on (C.col3 = 'bye')
但是请注意,如果您仅将条件限制为关键字段,那么优化器引擎将极大地提高性能。

对于内部联接,这两个语句是等效的:

SELECT A.col1, B.col1 
FROM A JOIN
     B 
     ON A.col2 = B.col2 AND B.col3 = 'hello';
以及:

两者也应该有相同的执行计划

有些人喜欢在
WHERE
子句中放置过滤条件,这样查询就更清楚地了解“表之间的条件”和“结果集上的过滤器”。我倾向于同意这种观点,尽管我对此并不武断

外部联接
s不同。对于外部连接,它使条件发生了很大的变化。在这种情况下,您通常没有选择余地,因此可以使用
ON
WHERE
来获取所需的逻辑。

是。您可以使用:

  • 下面将用A连接B表(Col3='hello')中的记录:
  • 下面将用A连接B表中的所有记录,并在A和B的结果中执行:

  • 当没有其他表加入时,这两个表将给出相同的结果。

    。您还可以如何解释该查询?我想不出其他解释的方法,所以我不明白你的问题是从哪里来的。我只是想知道第二个条件是否应该放在where语句中。是的,对于内部连接,
    ON
    子句中的条件与
    where
    子句中的条件相同。当它只引用联接中涉及的一个表时,将其放在
    WHERE
    子句中更为清晰。i、 e.
    从A.col2=B.col2上的连接B中选择A.col1,B.col1,其中B.col3='hello'
    当涉及到外部连接时,在选择on或WHERE时必须更加小心。
    SELECT A.col1, B.col1 
    FROM A JOIN
         B 
         ON A.col2 = B.col2 
    WHERE B.col3 = 'hello';
    
    SELECT A.col1, B.col1 
    FROM A JOIN B on (A.col2 = B.col2 AND B.col3 = 'hello')
    
    SELECT A.col1, B.col1 
    FROM A JOIN B on A.col2 = B.col2
    WHERE B.col3 = 'hello'