mysql
MYSQL - JOIN 문법
MySQL은 SELECT 구문들 그리고 여러 테이블 DELETE 와 UPDATE 구문들의 테이블 참조 부분에 대해 아래 JOIN 문법을 지원합니다.
하나의 table reference 는 join 표현으로 알려져 있습니다.
table_factor 문법은 SQL 표준에 비해 확장적입니다.
MySQL에서, CROSS JOIN은 문법적으로 INNER JOIN과 동일합니다.(CROSS JOIN은 각각을 대신할 수 있음).
table_references:
table_reference [, table_reference] ...
table_reference:
table_factor I join_table
table_factor:
tbl_name [[AS] alias] [index_hint_list]
| table_subquery [AS] alias
l ( 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)
index_hint_list:
index_hint [, index_hint] ...
index_hint_list:
USE {INDEX | KEY}
[{FOR {JOIN | ORDER BY | GROUP BY}] ([index_list])
| IGNORE {INDEX | KEY}
[{FOR {JOIN | ORDER BY | GROUP BY}] (index list)
| FORCE {INDEX | KEY}
[{FOR {JOIN | ORDER BY | GROUP BY}] (index_list)
index_list:
index_name [, index_name] ...
SQL 표준은 단지 table_reference 만 허용합니다.
괄호 안에 table_reference 목록을 허용하지 않습니다. inner join 과 동일하게 table_reference 항목 목록에 각각 컴마를 사용한다면 이것은 보수적인 확장입니다.
SELECT * FROM t1 LEFT JOIN (t2, t3, t4)
| ON (t2.a=t1.a AND t3.b=t1.6 AND t4.c=t1.c)
= SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)
| ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)
표준 SQL에서 이것은 동일하지 않습니다. INNDER JOIN은 ON 절과 함께 사용합니다. 하지만 CROSS JOIN은 그렇지 않습니다.
일반적으로 괄호는 단지 inner join 연산만 가지는 join 표현에서는 무시될 수 있습니다. MySQL은 또한 nested join을 지원합니다.
인덱스 힌트는 MySQL 옵티마이저가 인덱스 사용 방식에 영향을 주도록 지정할 수 있습니다.
SELECT left_tbl.*
FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id
= right_tbl.id WHERE right_tbl.id IS NULL;
0 댓글