SQL - SET연산자

MIN.DI·2021년 5월 20일
0

SQL

목록 보기
11/17

UNION, UNION ALL : 합집합

UNION

양쪽 질의에 의해 선택된 모든 행을 포함하되, 중복값은 한번만 표시.
첫 번째 컬럼 기준 ASC 정렬.

UNION ALL

모든 중복 행을 포함하는 양쪽 질의에 의해 선택된 모든 행 표시.

MINUS : 차집합

두 번째 선택문장에서는 선택되지 않는 첫 번째 선택문장에 의해 선택된 모든 유일한 행.
(ORACLE에는 있으나, 다른 DBMS에는 없어서 따로 구현해야 함.)

INTERSECT : 교집합

INTERSECT는 두 개의 질의를 조합하고,첫 번째 선택문장에서
두 번째 선택문장과 일치하는 최소한 하나의 행을 리턴.

SET 연산자 사용 지침

  • SELECT 목록에 있는 표현식의 개수와 데이터 유형이 서로 일치해야 한다. (컬럼 명, 데이터 사이즈는 은 달라도 된다)
  • ORDER BY절은 명령문 끝에만 사용할 수 있다.
  • ORDER BY절에 사용된 열 이름 또는 별칭은 첫째 SELECT문 목록과 일치해야 한다.
  • SET연산자는 서브쿼리에 사용할 수 있다.

예제 1)

SELECT deptno, to_char(null) location, hiredate
  FROM emp 
UNION
SELECT deptno, dname, to_date(null)
  FROM dept;

TO_CHAR(NULL), TO_DATE(NULL) 은 DNAME, HIREDATE와 데이터타입을 일치시키기 위해 생성한 컬럼이다.

예제 2) 'FORD의 상사 => JONES' 의 형태로 조회하되, 상사가 없는 사원은 '상사없음'으로 조회.

----OUTER JOIN 사용
SELECT LPAD(E.ENAME || '의 상사 => ' || NVL(M.ENAME,'상사없음'), 30) 사원상사
FROM EMP E
LEFT OUTER JOIN EMP M ON E.MGR = M.EMPNO;

----⭐⭐UNION ALL 사용
SELECT LPAD(W.ENAME,10) ||'의 상사 => ' ||M.ENAME 사원상사
FROM EMP W, EMP M
WHERE W.MGR = M.EMPNO
UNION ALL
SELECT  LPAD(ENAME,10) ||'의 상사 => 상사없음'
FROM EMP
WHERE MGR IS NULL;
profile
내가 보려고 쓰는 블로그

0개의 댓글