
- 위 코드는 order by절에 case문구를 넣음으로써 조건에 따른 정렬을 수행할 수 있다.
- job 쿼리의 조건에 해당할 경우 먼저 comm으로 정렬을 하고, 해당하지 않을 경우 sal쿼리를 기준으로 정렬을 한다.
select column1, column2 from table where condition
order by case when condition then <결과> else <결과2>

- 이번에는 union (all) 조인 기능이다.
- union all은 중복을 허용하는 조인으로 두 table의 쿼리 수가 맞을 경우 정상적으로 작동한다.
- 두 개 이상도 가능하지만, 중요한 점은 열의 개수가 같아야한다는 것이다.

- union을 사용할 경우 중복값을 없애고, 고유값만 출력하게 된다.

- 다른 방법으로 distinc 기능을 사용하는 것이다.
- 인라인 뷰에 union all로 조인 후 select절에 distinct를 사용하면 된다.

- 다음은 내부(self) 조인기능인데, 위 코드는 오류가 발생했다.
- 내부조인 시 조심해야하는 부분은 p.ename이 10이라는 조건에 충족하는 모든 경우의 수가 출력된다는 것이다.
- emp table에서 조건에 충족하는 자료는 3개이고, dept table에 4개의 행이 존재하기 때문에 데카트르 곱으로 자료가 출력된다.

- 해당 문제를 해결하는 두 가지 방법이 있다.
select e.ename, d.loc
from emp e, dept d
where e.deptno = d.deptno and e.deptno = 10
- 위 코드와 같이 where절에 두 가지 조건을 줘서 서로 교집합의 정보를 추출하거나
select e.ename, d loc
from emp e inner join dept d on (e,deptno = d.deptno)
where e.deptno = 10
- 위 코드와 같이 inner join에 join조건을 추가하는 것이다.

- 이번에는 A라는 테이블에 존재하지 않는 값을 B테이블에서 뽑는 방법이다.
- 간단하게 where절에 not in을 사용하면 추출할 수 있는데,

- 이와 같이 만약 in 안에 null이 있을 경우 문제가 생긴다. 분명히 dept 테이블에 deptno에는 10 값이 존재하는데, 빈값이 출력된다. 이유는

- sql의 True, False, Null의 관계를 보면 알 수 있다.

- 해당 코드를 bool 관계로 보면

- 위와 같이 코드의 프로세스가 작동되고, 결과적으로 10만 출력된다.

- 이번에는 not in 사용하면 어떻게 될까?

- Null에 not을 해도 Null으로 출력되며,
- True or Null -> True
- False or Null -> Null
- 이 세 가지 규칙을 알아두면 좋다.
- 해당 문제를 해결하기 위해서 not exists를 사용한다.

- where절 안에 not exists코드를 넣음으로써 A테이블에 존재하지 않는 B테이블의 정보를 추출할 수 있다.

- 다음 기능은 left, right 조인을 활용한 두 테이블의 값 비교이다.
- 해당 코드는 emp의 deptno에 존재하지 않는 dept 테이블의 자료를 추출한 것이다.
- 해당 코드를 이해하기 전에 필요한 것은 left, rigth 조인의 이해이다.

- join을 기준으로 left일 경우 왼쪽값을 기준으로 데이터를 출력하며, 오른쪽 table에 왼쪽 데이터가 없는 경우 null값이 출력된다.
- 해당 기능을 통해 where절에 is null을 넣어서 한쪽 테이블에 존재하지 않는 데이터만 추출이 가능하다.