代码之家  ›  专栏  ›  技术社区  ›  Amir Masud Zare Bidaki

“从表1、表2中选择”意味着什么操作[[副本]

sql
  •  1
  • Amir Masud Zare Bidaki  · 技术社区  · 8 年前

    我知道不同的连接,但我想知道在我们运行这样的查询时使用的是哪种连接:

    select * from table1 t1, table2 t2
    

    例如,它是完全外连接还是自然连接?


    更新 where 条款?会一直这样吗 inner join ?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Gordon Linoff    8 年前

    from 子句本身等同于 cross join 在几乎所有的数据库中。所以:

    from table1 t1, table2 t2
    

    在功能上等同于:

    from table1 t1 cross join table2 t2
    

    他们不是 等价,因为 从

    from table1 t1, table2 t2 join
         table3 t3
         on t1.x = t3.x
    

    生成错误,而 交叉连接 作品。

    WHERE 子句将始终导致 INNER JOIN 哪里 条款。

    意思是 CROSS JOIN . Google的BigQuery最初使用逗号表示 UNION ALL . 但是,这只存在于遗留SQL中,他们已经在标准SQL中删除了它。

    中的逗号 FROM JOIN 语法更好。

    对我来说,它们还意味着一些人在几十年前学会了SQL,但拒绝学习外部连接,或者一些人从古老的材料中学会了SQL,但不知道SQL所做的很多其他事情。

        2
  •  3
  •   S-Man    8 年前

    demo: db<>fiddle

    这是一个 CROSS JOIN

    SELECT * FROM table1, table2              -- implicit CROSS JOIN
    SELECT * FROM table1 CROSS JOIN table1    -- explicit CROSS JOIN
    


    关于

    A WHERE 条款构成了一般条款 交叉连接 到一个 INNER JOIN 内部连接 可通过三种方式获得:

    SELECT * FROM table1, table2 WHERE table1.id = table2.id           -- implicit CROSS JOIN notation
    SELECT * FROM table1 CROSS JOIN table2 WHERE table1.id = table2.id -- really unusual!: explicit CROSS JOIN notation
    SELECT * FROM table1 INNER JOIN table2 ON (table1.id = table2.id)  -- explicit INNER JOIN NOTATION
    

    Further reading (wikipedia)