안녕하세요 ORACLE 쿼리를 MSSQL 쿼리로 변환 중인 1인입니다.
MSSQL 쿼리를 처음 접하다 보니 간단한 것도 모르는게 많네요,,
ORACLE에 JOIN문은 (+)로 사용하는데요 그걸 변환 중에 궁금한게 있어서 질문드립니다.
1. 예를 들어, ORACLE에서
SELECT A.TT,
B. QQQ
FROM TEST1 AS A, TEST2 B <---------- TEST1 A LEFT OUTER JOIN TEST2 B
WHERE A.CODE = B.CODE(+) <---------- ON A.CODE = B.CODE 이렇게 변경하면 될거 같은데
AND B.CODE(+) = 'am_code' <---------- 이건 어떻게 해야할지 모르겠네요..
2. 그리고 두개이상의 테이블을 조인할 경우
Toad For SQL Server 에서 QUERY BUILDER를 사용해서 다이어그램에서 해당 테이블을 선택하고 조인할 컬럼들을 연결
선택해서 쿼리탭을 보면 첫번째 조인에 대해서만 괄호로 묶여져있던데.. 여기에서의 괄호의 의미를 정확하게 모르겠습니다.
아시는 분이 계신다면 설명 좀 부탁드립니다. 감사합니다.
Comment 5
-
아지라엘
2014.07.10 10:15
빠른 답변 감사드립니다. 1번은 이해가 되는데요. 그렇다면 2번은 mssql에서는 어떻게 수정을 해야하는 여전히 모르겠네요. mssql에서 (+) 를 사용하면 에러가 나고 그렇다고 빼는건 기존의 의미와 부합되지 않는 거같고..
-
(+)는 MSSQL에서는 사용할 수 없습니다. OUTER JOIN으로 대체해야합니다.
-
이성필
2014.07.10 13:02
SELECT A.TT, B.QQQFROM TEST1 ALEFT OUTER JOIN TEST2 B ON A.CODE = B.CODE AND B.CODE = 'am_code'이렇게 하면 될 거 같은데... 결과가 다른가요? -
아... (+)가 두개 있었군요.. ㅎㅎ
1. (+) 는 outer 연산자이군요.
t-sql에서는 *=, =* (이모티콘 아님) 등으로 사용했습니다만 ANSI 표준이 아닙니다.
WHERE 절에서 JOIN하는것 역시 ANSI 표준이 아닙니다.
FROM TEST1 AS A, TEST2 B
WHERE A.CODE = B.CODE(+) 을 ANSI 표준 JOIN으로 바꾸면
FROM TEST1 AS A LEFT OUTER JOIN TEST2 AS B ON A.CODE = B.CODE 가 되겠네요.
2. JOIN할때 괄호는 연산자 우선순위를 높이는거 외엔 의미가 없습니다.