2012-08-01 4 views
4

조건을 지정하지 않고 내부 조인 또는 외부 조인을 작성할 수 있습니까? ON condition은 조인 조건 구문의 일부입니까? 당신은 암시 할 수ON은 구문의 일부입니다.

+1

달성하려는 목표는 무엇입니까? 내부 조인은 조건이 없으면 내부 조인이 아닙니다. – deutschZuid

+0

조건이없는 유일한 조인은'CROSS JOIN'입니다. –

+1

@JW.'NATURAL JOIN'은 명시적인 조건을 가지고 있지 않으므로 (그러므로'ON'도 없습니다). 그러나 SQL Server는 자연 조인을 구현하지 않았습니다. –

답변

2

는 조인에 구문을 사용하지 않고 가입 :

select a.fred, b.joe from tableApple as a, tableBread as b 
where a.key1 = b.key1 

을하지만 명시 적 조인에 필요한 꽤 확신합니다. 잘못된 구문 오류가 발생합니다. 명시 의미 가입 :

select a.fred, b.joe 
from tableApple as a 
left join tableBread as b 
on a.key1 = b.key1 
where a.key1 = 'sally' 
4

아니, 당신이 WHERE 그렇게 할 수는 ON을 지정할 필요가 없습니다 :

SELECT * 
FROM tableA, tableB 
WHERE tableA.Id = tableB.Id 

하지만이 끝날하기 (쉬운 오류가 발생하는 경향이다 CROSS JOIN s)이며 일반적으로 눈살을 찌푸리게됩니다. 인수에 대한 내용은 here을 참조하십시오.

편집이 : 더 정확하게하려면 할 수 있습니다 JOINON을 필요로하지 않습니다 위의 이전 스타일 구문을 사용하지만, 명시 적으로 참여하는 경우 등 INNER | LEFT | FULL를 사용하여 다음 예, ON은의 일부 입니다 신택스. 정확히 구문 요구 사항이있는 MSDN 페이지

12

ANSI SQL-92 구문을 사용하는 경우 ON 키워드는 관계에 대한 조건이 없기 때문에 cross join을 제외하고 조인의 일부입니다.

ex.

INNER

SELECT * 
FROM tableA INNER JOIN tableB 
     on tableA.ID = tableB.ID 

CROSS

SELECT * 
FROM tableA CROSS JOIN tableB 

ON가 결합 된 (조인 INNER 추천하고 OUTER) 표 다음에 따라야 가입 가입 그래서 당신은하지 않습니다 구문 오류가 있습니다. 그러나 ANSI SQL-89 구문을 사용하는 경우 ON 키워드는 생략되지만이 관계를 where clause

ex에 지정해야합니다.

INNER는 구문 오류를 생성하지 않습니다, 당신은 조건을 잊은 경우

SELECT * 
FROM tableA, tableB 
WHERE tableA.ID = tableB.ID 

CROSS이 때문에 오류가 발생하는 경향이다

SELECT * 
FROM tableA, tableB 

가입 가입하고 할 전망이다 cross join

+0

+1에 대한 멋진 설명 =) –