Oracle Union 관련 질문드립니다.. 0 2 3,609

by 윤신웅 [Oracle 기초] Oracle Union Join [2019.09.27 22:05:51]


table.PNG (26,151Bytes)
result.PNG (28,003Bytes)

안녕하세요, Oracle을 이제 막 배우기 시작한 학생입니다.

공부 중에 Union SQL문 관련해서 잘 되지 않는 부분이 있어 질문 드립니다ㅠ

해당 Table 두개를 다음의 코드로 Union 하였는데

SELECT Name, SSN, Dept, Advisor, NULL as Rank FROM STUDENT
UNION
SELECT Name, SSN, Dept, NULL as Advisor, Rank FROM INSTRUCTOR
order by name;

그 결과가 name : Park 인 튜플이 두 개로 나뉘어져 나옵니다

 

혹시 park 튜플을 하나로 나오게 할 순 없을까요?

group by 절로 해결해보려 했는데 잘 안되더군요ㅠㅠ

도움 부탁드립니다!

by jake3371 [2019.09.28 01:03:07]

park | 444 | b | lee | null

park | 444 | b | null | 5

 

두 개의 레코드는 동일하지 않습니다.

둘 중 어느 레코드가 제거 되는 것을 원하시는지요?

 

1) 두 레코드의 모든 값을 동일한 상태로 맞추면 UNION에 의해서 자동으로 중복 제거 될 것 입니다.

2) 만약 위 방법이 불가능하다면, group by name을 사용할 수 있겠습니다.


by 마농 [2019.09.30 08:34:20]

1. UNION 과 UNION ALL 의 차이를 알고 사용해야 합니다.
2. Rank 등의 예약어 사용은 지양해야 합니다.
 

SELECT Name, SSN, Dept
     , MIN(Advisor) Advisor
     , MIN(Rank) Rank
  FROM student
  FROM (SELECT Name, SSN, Dept, Advisor, NULL as Rank FROM student
         UNION ALL
        SELECT Name, SSN, Dept, NULL as Advisor, Rank FROM instructor
        )
 GROUP BY Name, SSN, Dept
 ORDER BY Name
;

 

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