cross join 과 null<>nul 0 5 1,755

by inbeater [SQL Query] cross join null null 비교연산 [2019.03.07 12:53:53]


캡처1.PNG (56,988Bytes)

 

 

cross join에서 "<>" 비교 연산에 대해 위와 같이 정리 한다고 판단 하였습니다.

 

M:N 곱을 하기 전에 대한 조건을 적용 시키고 M:N 곱을 하는게 아니라

 

M:N 곱을 한 결과값에서 비교연산 결과를 한번만 제거 하였고

 

그다음 조건도 마찬가지로, 다음에 제거 하였습니다.

 

그리고 "<>" 비교연산 조건중에 하나라도 Null이 있으면 연산 결과에서 제외시켜 버리는 사실을 확인 하였습니다.

 

 

제가 테스트 해보고 내린 결론이 맞는지 확인 부탁드립니다.

by 마농 [2019.03.07 13:16:10]

결과는 동일하지만 과정을 꼭 그렇게 절차적으로 생각해서는 안됩니다.
 - 크로스 조인 후에 제외시키는 거라고 보는 것보다는
 - 조건을 만족하는 것만 조인한다고 보는게 맞을 듯 하네요.
SQL은 절차적인 언어가 아닙니다.
구조적, 집합적으로 생각하셔야 합니다.
NULL 관련도 결론은 동일하지만
 - 하나라도 널이면 제외시킨다라고 생각하는 것 보다는
 - NULL 은 비교 연산이 불가능하여 비교식에 널이 들어가면 참이 될 수 없다.
 라고 생각하는게 맞을 듯 합니다.


by inbeater [2019.03.07 15:37:19]

답변 감사합니다!

제가 아직.. 많이 부족해서.... 처음에..... 맞는진 모르겠지만 구조적이며 집합적으로 접근해 보려 했으나.. 도저히 안되어 절차적으로 정리 해 보았습니다.

 

의견 주셔서 다시한번 구조적, 집합적으로 접근해 보려 했지만...

 

아직 제가 부족해서... 바로 그런 접근이 힘든거나, 접근 방법을 모르는거 같습니다....

 

노력해 보겠습니다.. 감사합니다!


by inbeater [2019.03.08 10:09:50]

이야기 하신 조건을 만족하는 것만 조인한다는 개념에 대해 이해 하게 되었습니다.

'개별적으로 조건에 맞는걸 제외하고 나머지 안맞는걸 결과로 넣는 식으로 조인한다'

조언 감사합니다.


by 르매 [2019.03.07 14:34:50]

NULL 값의 성질을 이해해 보신다면 더 좋을 것 같습니다.

NULL은 정의할 수 없는 값, 존재하지 않음 등을 의미하기 때문에, NULL 값을 비교 연산자를 사용하여 비교한 결과는 항상 false가 됩니다. ^^


NULL <> 3

NULL = 3

NULL = NULL

모두 false 입니다.

CROSS 조인뿐 아니라 다른 조인도 조인의 결과 집합을 먼저 가져오고, 나머지 조건절의 내용을 적용하여 필터링한 후 결과를 반환하는 것은 동일합니다.


by inbeater [2019.03.07 15:38:03]

예시를 통한 상세한 답변 감사합니다!

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