«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

장미의 개발일기

오라클 JOIN ,UNION ,UNION ALL (집합연산자), 연습문제 본문

개발일기/Oracle

오라클 JOIN ,UNION ,UNION ALL (집합연산자), 연습문제

민장미 2023. 5. 13. 16:42

연습문제. 참고로 SCOTT계정이 아닌 다른 계정에서 학원에서 생성한 연습용 테이블로 했다. 

위처럼 출력 되도록 UNION (집합연산자) 사용 , 테이블을 조인해보기 

특별히 어려운 문제는 아니지만 2번이 의아하다... 

UNION ALL을 써야만 딱 저런 순서로 출력이 된다. 데이터가 중복이 없으니 UNION ALL을 써도 되긴한데,

UNION을 사용하고 ORDER BY로 정렬해버리면 저 화면하고 좀 순서가 달라짐;

테이블 순서를 바꿔서 해봐도 TOTAL이 무조건 맨 위에 출력되서 ㅠ 

 

그리고 3번 ! 두 테이블 중 하나는 무조건 테이블 2개를 조인해야하지만

다른 한 테이블은 조인을 해도 되고, 안 해도 된다. 

두 가지 코드 다 올렸다. 

테이블 1개 조인 안한거에서, SUM(SAPAY)가 다른 테이블의 SUM(SAPAY)랑 다른거란 거에 주의 ~~

--문제 1번 화면
--1. 부서위치, 부서위치별 토탈월급을 출력하시오 (세로 출력)

--조인을 안하니 토탈: 값이 다 같다. / 조인을 왜 해야하는지 보여주기 위한 코드
SELECT LOC, SUM(SAPAY) AS TOTAL_SPAY
	FROM (SELECT LOC FROM DEPT) , SAWON
	 GROUP BY LOC; 

--1번 답 
SELECT LOC,SUM(SAPAY) AS TOTAL_SPAY
	FROM DEPT D NATURAL JOIN SAWON S
		GROUP BY LOC;




--2번 2. 맨 아래에 전체 토탈월급도 출력되게하시오 !

SELECT LOC , SUM(SAPAY) AS TOTAL_SAPAY
	FROM DEPT D JOIN SAWON S ON (D.DEPTNO = S.DEPTNO)
GROUP BY LOC
UNION ALL
SELECT 'total' AS LOC, SUM(SUM(SAPAY)) AS TOTAL_SAPAY
	FROM DEPT NATURAL JOIN SAWON
GROUP BY LOC;



--3번  3. 위의 결과를 다시 출력하는데 직업을 가나다라 순서데로 정렬해서 출력되게하시오

SELECT LOC, SUM(SAPAY) AS TOTAL_SPAY
	FROM DEPT D NATURAL JOIN SAWON S
GROUP BY LOC
UNION
SELECT '전체' AS LOC, SUM(SUM(SAPAY)) AS TOTAL_SPAY
	FROM DEPT D NATURAL JOIN SAWON S
GROUP BY LOC
ORDER BY LOC;


-----조금 다르게( 테이블 1개는 조인 사용하지 않고)
SELECT D.LOC, SUM(S.SAPAY) AS TOTAL_SPAY
 FROM DEPT D, SAWON S
WHERE D.DEPTNO = S.DEPTNO
 GROUP BY D.LOC

UNION
--위의 SUM(S.SAPAY)는 두 테이블이 합쳐진 상태에서 데이터를 뽑아와서 연산하는 거라,
-- 각 LOC별 SUM(S.SAPAY)로 계산이 되고
--아래에서의 SUM(S.SAPAY)는  순수 SAWON테이블의 모든 SAPAY를 합한 것을 뜻함
SELECT '전체' AS LOC, SUM(SAPAY) AS TOTAL_SPAY
	FROM SAWON
		ORDER BY LOC;