5장 조인, WHERE조건문
SQL실행 순서
- from 절 : 테이블을 먼저 들고옮
- where 절: 그룹핑의 대상이 되는 레코드를 선택
- group by 절 : 그룹핑을 진행
- having 절 : 그룹을 선택하는 조건을 진행
- select 절 : 진행
WHERE
select [열 이름] from [테이블 이름] where [조건] ;
비교 연산자
- AND : 조건여러개 설정, 조건을 모두 만족하는 데이터만 반환
select ename 이름, deptno 부서번호, sal 연봉
from emp
where deptno = 10 and sal >= 1000;
- OR : 조건 여러개 설정, 조건중 하나이상 만족하는 행을 반환
select ename 이름, deptno 부서번호
from emp
where deptno = 10 or deptno = 20;
- IN : OR연산자와 같은 역할, 조건중 하나 이상 충족하는 행을 반환
select ename 이름, deptno 부서번호
from emp
where deptno in (10, 20);
- NOT : 조건과 반대되는 조건만 반환함
select ename 이름, deptno 부서번호
from emp
where deptno not in (10, 20);
범위 조건
- BETWEEN ... AND : A~B 까지의 범위안에 속한 데이터들을 반환
SELECT empno
, ename
, hiredate
FROM emp
WHERE empno BETWEEN 7000 AND 7600
SELECT empno
, ename
, hiredate
FROM emp
WHERE hiredate BETWEEN TO_DATE('1981-01-01', 'YYYY-MM-DD')
AND TO_DATE('1981-12-31', 'YYYY-MM-DD')
JOIN
조인이란?
- 각 테이블간에 공통된 컬럼으로 데이터를 합쳐서 표현하는 것
종류
- 내부 조인 ( Inner Join )
- 외부 조인 ( Outer Join )
- 셀프 조인 ( Self - Join )
- 안티 조인 ( Anti Join )
- 내부 조인 : 두 테이블에서 공통적인 컬럼의 값이 일치되는 행을 연결
SELECT E.EMPNO, E.ENAME, E.SAL, D.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND SAL >= 3000;
- 외부 조인( Outer Join ) : 조인 조건 데이터 중 어느 한쪽이 Null이어도 결과를 출력해야 하는 경우에 사용
- NULL값을 출력해야하는 쪽에 (+)를 붙임!
SELECT DISTINCT emp.deptno,dept.deptno AS 팀번호
FROM emp, dept
WHERE emp.deptno(+) = dept.deptno;
추가 조건절에도 (+)를 붙여줘야 한다!
SELECT DISTINCT emp.deptno,dept.deptno AS 팀번호 FROM emp, dept
WHERE emp.deptno(+) = dept.deptno;
AND emp.name(+) LIKE '김%';
- 셀프 조인( Self - Join ) : 동일한 테이블 사이의조인
SELECT A.EMPNO 사원번호, A.ENAME 사원명, B.ENAME 관리자명
FROM EMP A, EMP B
WHERE A.MGR = B.EMPNO
- 안티 조인( Anti Join ) : 조인의 대상이 되는 테이블과 일치하지 않는 데이터를 가져오는 조인방식
SELECT a.employee_id, a.first_name ,a.department_id, b.department_name
FROM employees a,
departments b
WHERE a.department_id = b.department_id
AND a.department_id NOT IN ( SELECT department_id
FROM departments
WHERE manager_id IS NULL) ;
- Cartesian Product : where 절에서 조인 조건을 넣지 않아서 가능한 모든 경우의 수가 출력되는 것
SELECT a.employee_id, a.first_name, a.email, b.department_name
FROM employees a, departments b;
반응형