join on, 조건 차이점 개념 이해가 안갑니다. 0 5 673

by 55 [2021.03.19 15:14:13]


예를들어

 

SELECT *

FROM TEST1 A

         FROM TEST2 B

         ON A.FRUIT = B.FRUIT

WHERE A.FRUIT = 'APPLE'

SELECT *

FROM TEST1 A

         FROM TEST2 B

         ON A.FRUIT = B.FRUIT

         AND A.FRUIT = 'APPLE'

 

이 둘의 차이점이 뭔가요.. 개념 이해가 가질 않네요ㅜㅜ

by 박규림 [2021.03.19 15:36:39]

위의 쿼리가 1번쿼리 아래쿼리가 2번쿼리라고 가정을 하고 답변드릴께요

1번쿼리의 경우는 a와 b 테이블의 JOIN을 수행한 후에 A.프루트 = 애플인 데이터들을 추출하지만

2번 쿼리의 경우는 (a 와 b 테이블 중 A.프루트 = 애플인 경우)를 JOIN 한 결과를 추출합니다.

만약 출력을한다면

과일1(테이블)

번호  ||     과일이름

1               애플

2               배

과일2(테이블)

번호  ||     과일이름

1               딸기

2                파인애플

이렇게 있다면

1번쿼리는   1   애플       1  딸기만 가져오고

2번쿼리는   1    애플      1  딸기

                2    NULL     2  파인애플 또는 NULL 

이 나올겁니다.

결론적으로 조인을 한후 조건절을 찾아 조회하느냐  조인을 하는중 조건을만족하는녀석을찾고 조인을 완료하느냐의 차이라고말할수있겟네요. 말주변이 없어서 ㅠㅠ

 

                


by 마농 [2021.03.19 15:59:32]

논리적 의미로 본다면 위 설명이 맞을수도 있지만.
실제로 수행은 쿼리 최적화 과정을 거친 후에 수행되기 때문에 동일하게 수행됩니다. <- inner join 의 경우
검색조건(appele)의 위치에 상관 없이 검색조건이 조인조건보다 먼저 수행될 것입니다. <- inner join 의 경우
다만 Outer Join 의 경우엔 조건 위치에 따라 결과 자체가 달라집니다. <- outer join 의 경우


by 마농 [2021.03.19 15:51:03]

ON 절에는 조인조건을 적어 주고
WHERE 절에는 검색조건을 적어 줍니다.
위의 INNER JOIN 예에서는 결과가 동일하지만
OUTER JOIN 에서는 조건절의 위치에 따라 결과가 달라집니다.
따라서 원칙을 지켜서 조건을 주는 것이 좋습니다.


by 마농 [2021.03.19 16:14:01]

다시 보니. 질문 자체 쿼리가 이상했었네요. FROM 이 두번 나옴.
- 변경전 : FROM test1 a FROM test2 b
- 변경후 : FROM test1 a JOIN test2 b


by 박규림 [2021.03.19 16:32:37]

저도 FROM 2번을 못봣네요 ㅋ 현재 제가 아우터조인을 자주써서 아우터조인으로 질문자님께 조언을 해드렸네요 첨언 감사드립니다 마농님.^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입