union all 집합연산시 질문 1 5 864

by 살별 [Oracle 기초] union all 집합연산 [2021.08.02 15:28:21]


안녕하세요.

기본적으로 유니온이 아래와 같다고 하고요. 아래 두 조건을 만족시키는 쿼리를 만드려면 어찌해야 하나요.

select * from A

union all

select * from B

인경우

1. 만약 A 에 데이터가 없는 경우 B의 데이터만 나와야함

2. 만약 A 에 데이터가 있는 경우 A의 데이터만 나와야함(B의 데이터는 나오지 않아야함)

 

조건을 어떻게 줘야할지 정말 모르겠네요 ;;;

고수님들의 고견 부탁드립니다.

by pajama [2021.08.02 15:48:42]

not exists 쓰시면 되지 않을까요

 

select * from A

union all

select * from B where not exists (select 1 from A)  이런식으로?


by 살별 [2021.08.03 10:17:08]

감사합니다.

답변주신대로 했더니 의도한대로 잘 되네요.

역시 사람은 이해를 하고 머리를 써야지 되는걸 오늘도 깨달았습니다.

집합개념 이해도 안하고 이것저것 해보니 될리가 없었네요 ㅠ


by 동동동 [2021.08.02 16:25:12]
SELECT * FROM A

UNION ALL

SELECT * FROM B
WHERE 0 = (SELECT COUNT(1) FROM A WHERE ROWNUM <= 1)

 


by 마농 [2021.08.03 09:31:35]

각 쿼리의 결과가
- 여러건 일 수 있다면? Exists 구문 이용하시면 됩니다.
- 오직 1건 뿐이라면? ROWNUM 을 이용 할 수 있습니다.
 

SELECT *
  FROM (SELECT * FROM a
         UNION ALL
        SELECT * FROM b
        )
 WHERE ROWNUM <= 1
;

 


by 살별 [2021.08.03 10:16:14]

마농님 항상 감사하게 생각합니다.

저의 경우에는 다건이였는데 단건일경우까지 생각해서 해주시니 감사합니다.

단건인 경우도 잘 기억하고 메모해두어서 다음에 꼭 써먹도록 하겠습니다.

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