✨ ORDER BY
⭐ 데이터 정렬하기
- ORDER BY 컬럼명 : 문자, 숫자, 날짜를 정렬할 수 있다.
- 오름차순: ASC (default)
- 내림차순: DESC
- ORDER BY는 비용(cost)이 많이드는 작업이다 (CPU와 memory를 많이 쓴다.
- 순서
- select 절 3
- from 절 1
- where 절 2
- order by 절 4
⭐ 정렬 방법 여러가지 사용 가능
- ORDER BY 컬럼명 ASC, 컬럼명 DESC, 컬럼명 ASC...
- 답변형 게시판을 만들 때 필수로 사용된다.
- Grouping의 원리이다.
select job, deptno
from emp order by job asc, deptno desc;
✨ JOIN
- RDBMS(Relational DataBase Management System) : 한개 이상의 테이블들이 서로 관계를 가지고있는 구조
- 데이터를 가져오는 방법 → JOIN!!
⭐ 종류
1. 등가조인(equi join): 원테이블과 대응되는 테이블에 있는 컬럼의 데이터를 1:1로 매핑
select *
from m inner join s
on m.m1 = s.s1;
select m.m1, m.m2, s.s2
from m join s -- inner 일반적으로 생략
on m.m1 = s.s1;
--join시 테이블의 이름을 줄여서 사용한다 (별칭 붙이기)
select e.empno, e.ename, e.deptno, d.dname
from emp e join dept d
on e.deptno = d.deptno;
--## 테이블이 여러개일 경우##
--> a(a1), b(b1), c(c1), d(d1) 4개의 테이블 조인
from a join b on a.a1 = b.b1
join c on b.b1 = c.c1
join d on c.c1 = d.d1
--사번, 이름(last_name), 부서번호, 부서이름 출력
select e.employee_id, e.last_name, e.department_id, d.department_name
from employees e join departments d
on e.department_id = d.department_id;
--문제점
--실제 사원수 107 , 데이터는 106건 출력 -> 부서번호가 null인 경우 누락된 것
--select * from employees where employee_ID=178;
--##등가조인은 null 처리불가 >> null값을 가진 데이터는 누락된다##
--사번, 이름(last_name), 부서번호, 부서이름 출력
select e.employee_id, e.last_name, e.department_id, d.department_name
from employees e join departments d
on e.department_id = d.department_id;
--문제점
--실제 사원수 107 , 데이터는 106건 출력 -> 부서번호가 null인 경우 누락된 것
--select * from employees where employee_ID=178;
--##등가조인은 null 처리불가 >> null값을 가진 데이터는 누락된다##
2. 비등가조인(non-equi join): 1대1로 비교할 컬럼이 없다
- 의미만 존재한다(자기 문법이 없음, equi join 문법을 사용한다)
select e.empno, e.ename, e.sal, s.grade
from emp e join salgrade s
on e.sal between s.losal and s.hisal;
3. outer join (equi join + null(나머지)) : equi join을 선행하고, 남은 데이터를 가져올 것인지 의사결정
- join테이블의 주종관계를 파악하는 것이 중요하다
- 주인이 되는 테이블의 남은 데이터를 가져올 수 있다.
- 문법
- left (outer) join : 왼쪽 테이블이 주인
- right (outer) join : 오른쪽 테이블이 주인
- full (outer) join : left + right (=union과 비슷한 개념 (차이점: 위아래/옆))
select *
from m left join s
on m.m1 = s.s1;
-- m 테의블의 null값도 출력
select *
from m right join s
on m.m1 = s.s1;
-- s 테이블의 null값도 출력
select *
from m full outer join s --outer 생략 가능
on m.m1 = s.s1;
-- m, s 테이블 모두의 null값도 출력
4. 자기참조(self join): 테이블의 컬럼이 자신의 테이블에 있는 다른 컬럼을 참조하는 경우
- 의미만 존재한다(자기 문법이 없음, equi join 문법을 사용한다)
- 같은 테이블을 복제하여 가명칭 붙여서 사용하는 것으로 이해하자
--self join과 outer join 사용
select e.empno, e.ename, m.empno, m.ename
from emp e left join emp m
on e.mgr = m.empno;
'Back > DATABASE' 카테고리의 다른 글
Oracle / Inner, Outer Join (0) | 2021.08.18 |
---|---|
Oracle 기본 (1) (0) | 2021.07.19 |