SELECT * FROM Table JOIN Other ON Table.id = Other.tableId
我正在构建一个 MySQL 包装器,并且想知道“ON”关键字是否仅与连接(如上)一起使用,还是在其他地方使用?
SELECT * FROM Table JOIN Other ON Table.id = Other.tableId
我正在构建一个 MySQL 包装器,并且想知道“ON”关键字是否仅与连接(如上)一起使用,还是在其他地方使用?
你不能在ON
某个地方单独使用。它仅与JOIN
s一起使用
但是你可以在没有 ON 的情况下使用它们的连接
JOIN ... USING //--according to SQL:2003
例子:
a LEFT JOIN b USING (c1,c2,c3)
a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3
编辑:
该ON
子句可以引用其右侧命名的表中的列。下面的示例ON
子句只能引用其操作数。
例子:
CREATE TABLE t1 (i1 INT);
CREATE TABLE t2 (i2 INT);
CREATE TABLE t3 (i3 INT);
SELECT * FROM t1 JOIN t2 ON (i1 = i3) JOIN t3;
该ON
关键字也用于
其中一些是特定于 MySQL 的。
它仅在使用时出现 ANSI SQL-92 JOIN
。没有别的。
该ON
关键字也可以在其他几个地方找到,例如CREATE TABLE
和ALTER TABLE
表语句(在FOREIGN KEY
定义中:) ON DELETE CASCADE
,在CREATE TRIGGER
语法(ON tbl_name FOR EACH ROW
)中,在CREATE INDEX
语句中,等等。
对于连接,MySQL 文档中的JOIN
语法包含所有内容:
MySQL 支持
JOIN
语句的 table_references 部分SELECT
和多表DELETE
和UPDATE
语句的以下语法:
table_references:
table_reference [, table_reference] ...
table_reference:
table_factor
| join_table
table_factor:
tbl_name [[AS] alias] [index_hint_list]
| table_subquery [AS] alias
| ( table_references )
| { OJ table_reference LEFT OUTER JOIN table_reference
ON conditional_expr }
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference STRAIGHT_JOIN table_factor
| table_reference STRAIGHT_JOIN table_factor ON conditional_expr
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor
join_condition:
ON conditional_expr
| USING (column_list)
所以,ON
可以用在SELECT
,UPDATE
和DELETE
语句中。它可以与JOIN
, LEFT JOIN
, RIGHT JOIN
(以及等效的INNER JOIN
, LEFT OUTER JOIN
, RIGHT OUTER JOIN
)一起使用。
要么ON
或USING
将被使用,而不是两者。
它不能与NATURAL JOIN
(当然)一起使用。
以及与 ANSI/ISO SQL 标准的一些区别:
你可以ON
使用CROSS JOIN
.
也(可选)与STRAIGHT_JOIN
(这是 MySQL 的补充)
您可以使用JOIN
和INNER JOIN
不 ON
使用.
UPDATE
并且DELETE
语法与标准也有一些差异。