SELECT * FROM emp_cp100;
INSERT INTO EMP_CP100 (ename) values(null);
INSERT INTO EMP_CP100 (ename) values(''); --DB에서는 null로 처리된다.
INSERT INTO EMP_CP100 (ename) values(' ');
SELECT sal, comm, sal+comm 합산, sal+nvl(comm,0) nvl처리합산
FROM emp;
SELECT *
FROM emp; -- comm가 null인 데이터를 검색
SELECT empno, comm
FROM EMP e
WHERE comm IS NULL; -- comm = NULL; 안됨
SELECT empno, comm
FROM EMP e
WHERE comm IS NOT NULL; -- NULL 아닌 데이터 검색
ex1) 관리자 번호가 null인 사원과 같은 부서에 있는 사원을 출력하세요
SELECT *
FROM EMP e2
WHERE deptno in(
SELECT deptno FROM emp WHERE mgr IS null);
ex2) 보너스가 있는 사원의 사원명과 급여와 보너스의 합산을 출력하세요
SELECT ename, sal, comm, sal+comm "합산"
FROM EMP e
WHERE nvl(comm,0)>0; -- null과 0을 함께 제외
-- 📌 데이터가 0인 경우와 null인 경우를 둘다 제외시켜야 되는 경우가 많이 발생한다.
-- 📌 이런 경우, 함수(nvl)을 활용하여 처리한다.
select empno
from emp;
1000
1001
1002
select empno
from emp2;
1001
1002
1003
select empno, ename
from emp3;
1001 '홍길동'
1002 '김길동' 1003 '신길동' select empno, ename
from emp4;
1001 '홍길동' 1003 '마길동' 1006 '오길동' select empno, ename
from emp4;
1001 5555
1003 4444
1006 3333
위와 같이 emp에 있는 empno와 emp2에 있는 empno를 두개의 집합개념으로
union, union all, intersect, minus로 집합 연산자에 의해서 처리하는 것을 말한다.
두개의 집합이 동일한 유형의 데이터type이어야 하고, 동일한 컬럼의 갯수가 같아야 한다.
SELECT 명령문1
UNION, UNION ALL, INTERSECT, MINUS
SELECT 명령문2
-- emp_cp100 테이블 생성
CREATE TABLE emp_cp100
AS SELECT * FROM emp
WHERE deptno = 10;
-- emp_cp100 테이블에 데이터 삽입
INSERT INTO emp_cp100 values(7999, '홍길동', '사원', 7839, sysdate, 3000, NULL,40);
-- 중복데이터를 제거한 데이터 : union
SELECT empno, ename
FROM emp
UNION
SELECT empno, ename
FROM emp_cp100;
-- 중복데이터를 포함한 데이터 : union all
SELECT empno, ename FROM emp
UNION ALL
SELECT empno, ename FROM emp_cp100;
-- 차집합처리 : minus
SELECT empno, ename, deptno FROM emp
MINUS
SELECT empno, ename, deptno FROM emp_cp100;
-- 교집합처리 : intersect
SELECT empno, ename, deptno FROM emp
INTERSECT
SELECT empno, ename, deptno FROM emp_cp100;
a05_ordering
ORDER BY hiredate ASC, sal DESC
SELECT *
FROM 테이블
WHERE..
GROUP BY 그룹함수
ORDER BY 컬럼 [ASC/DESC]
ASC : default로 오름차순 정렬
DESC : 내림차순 정렬
-- ex1) 입사일을 기준으로 최근부터 과거로 정렬처리하여 출력
SELECT *
FROM EMP e
ORDER BY hiredate DESC;
-- ex2) 직책을 기준으로 A~Z로 정렬
SELECT *
FROM emp
ORDER BY job;
-- ex2) 직책을 기준으로 A~Z로 정렬, 두번째 정렬기준인 급여 오름차순으로 처리
SELECT ename, job, sal
FROM emp
ORDER BY job, sal; -- asc는 default로 생략이 가능하다.
--ex3) 부서번호 오름차순, 연봉 내림차순으로 정렬처리.
SELECT *
FROM EMP e
ORDER BY deptno ASC, sal DESC;