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

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


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

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

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

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

1
2
3
4
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 등의 예약어 사용은 지양해야 합니다.
 

1
2
3
4
5
6
7
8
9
10
11
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() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입