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의 데이터는 나오지 않아야함)
조건을 어떻게 줘야할지 정말 모르겠네요 ;;;
고수님들의 고견 부탁드립니다.
not exists 쓰시면 되지 않을까요
select * from B where not exists (select 1 from A) 이런식으로?
감사합니다.
답변주신대로 했더니 의도한대로 잘 되네요.
역시 사람은 이해를 하고 머리를 써야지 되는걸 오늘도 깨달았습니다.
집합개념 이해도 안하고 이것저것 해보니 될리가 없었네요 ㅠ
SELECT * FROM A UNION ALL SELECT * FROM B WHERE 0 = (SELECT COUNT(1) FROM A WHERE ROWNUM <= 1)
각 쿼리의 결과가 - 여러건 일 수 있다면? Exists 구문 이용하시면 됩니다. - 오직 1건 뿐이라면? ROWNUM 을 이용 할 수 있습니다.
SELECT * FROM (SELECT * FROM a UNION ALL SELECT * FROM b ) WHERE ROWNUM <= 1 ;
마농님 항상 감사하게 생각합니다.
저의 경우에는 다건이였는데 단건일경우까지 생각해서 해주시니 감사합니다.
단건인 경우도 잘 기억하고 메모해두어서 다음에 꼭 써먹도록 하겠습니다.