database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 623 게시물 읽기
No. 623
outer join의 결과가 왜 inner join과 같지?
작성자
이도영
작성일
2002-11-23 13:33
조회수
6,364

제가 생각하기론 A left outer join B를 하면 기본적으로 A의 row는 모두 검색되고 B의 데이터는 있는 것은 나오고 없는것은 null로 나오는 것이 정상인거 같은데요.. 결과가 마치 inner join인 것과 동일하게 나오네요.

 

select A.a, A.b, A.c, B.x

from A left outer jon B

where A.a = B.a --> 조건1

and B.x = 'xxx' --> 조건2

 

이런 쿼리인데, 맨 아래 있는 B에 대한 조건 (조건2)을 주지 않으면 A의 Row가 모두 나오고 B의 없는 값은 null로 나오는데 반해서, B에 대한 조건(조건2)을 주는 순간 결과값이 마치 inner join인 것처럼 나오네요. 그러니까 A.a의 값중 B.a에 없는 값은 row 자체가 읽혀지지 않는거지요.

 

더 웃긴건 조건2를 로 줘도 마찬가지라는거죠.

조건2가 (B.x = B.x) 면 조건2는 있으나 없으나 결과가 같아야 하는거 아닌가요?

그런데 조건2가 없으면 제가 원하는 outer join의 결과가 나오고,

조건2가 있으면 마치 inner join을 한것과 같은 결과가 나오네요..

게다가 이경우 left outer join, right outer join, full outer join, inner join의 결과가 모두 같네요.

 

누구 아시는분 없으세요? 도대체 왜 이런거죠?

이 글에 대한 댓글이 총 1건 있습니다.

조인 조건은 FROM 절과 WHERE 절에서 줄 수 있습니다.

 

조인을 수행하면서 모든 조건을 검사하기 위해서는 FROM 절 혹은 WHERE 절에 몰아 넣어야 합니다.

이를 혼합하여 사용할 경우, WHERE 절에서 조인 후 속성(Attribute) 평가시 NULL 값을 가진 행이 제거됩니다.

 

따라서, SQL 문을

1. FROM 절에서의 조인 조건

SELECT a.a, a.b, a.c, b.x

FROM a LEFT OUTER JOIN B ON a.a=b.a AND b.x='xxx'

 

또는

2. WHERE 절에서의 조인 조건(Left Outer Join(*=), Right Outer Join(=*))

SELECT a.a, a.b, a.c, b.x

FROM a, b

WHERE a.a*=b.a AND b.x='xxx'

 

MS-SQL 메뉴얼에 따르면 가급적 WHERE 절에서의 조인 조건을 표시하는 방법을 사용하지 말 것을 권유하고 있습니다.

김동아(love89)님이 2002-11-25 01:17에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
626dat 화일에 대한 문의 [1]
정재영
2002-11-25
4760
627┕>Re: dat 화일에 대한 문의
정재영
2002-11-25 17:08:07
4873
625freetds 사용시 문제가...
최혁제
2002-11-25
4868
624mssql -> oracle 마이그레이션시 문제!! [1]
김영재
2002-11-23
5387
623outer join의 결과가 왜 inner join과 같지? [1]
이도영
2002-11-23
6364
622종속코드 추출 쿼리.. ㅠ.ㅠ [1]
쿠사나기
2002-11-20
4707
621저장프로시저에 관한 질문입니다... [1]
정연희
2002-11-20
5616
620다이어그램 파일로 저장이 안되나여???
민이
2002-11-19
4508
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.023초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다