오답
(DISTINCT 는 대문자로) 오답 유일한값=중복없음
1 select DISTINCT job_id, department_id
2 from employees
3 where department_id in(30,90)
4* order by job_id
-select last_name, department_name
2from employees, departments
3where employees.department_id=departments.department_id
3번째 줄처럼명시해야 조인이 발생한다.
카티시안 프로덕트(Cartesian produc)
did가 같았을때 무결성이 보장이된다.
where절에 쓰인다
등가조인(equ) - 같은 데이터가 존재할때 (=) 조건이 맞지않으면 걸러진다.
비등가조인(non-equ) - 데이터가 전혀다를때
포괄조인(outer) - 어느한쪽 테이블의 데이터가 더많을때
자체조인(self) - 한개의 테이블을 대상으로 수행
테이블이름이 접두어로 붙어있다.
-틀린 명령어
1 select last_name, department_name, department_id
2 from employees, departments
3 where employees.department_id=departments.department_id
SQL> /
select last_name, department_name, department_id
ERROR at line 1:
ORA-00918: column ambiguously defined 틀린곳-department_id
-(두개의 테이블에 존재하는 컬럼이라 어디서 가져올지 몰라서 오류가 난다.)
1.등가조인
2.아우터(outer)조인
더많은 데이터를 가지고있는 컬럼쪽에 붙여주면 반대쪽에 없는 데이터를 포함해서 들어간다.
select e.last_name, d.department_name, d.department_id
from employees e, departments d
where e.department_id=d.department_id(+) <--(+)아우터연산자
select e.last_name, d.department_name, d.department_id
2 from employees e, departments d
3* where e.department_id(+)=d.department_id
두개의 결과값이 다르다.
예제)20. 커미션을 받는 사원들의 이름과 부서명, 지역명, 도시명을 알아내시오
select e.last_name, d.department_name, l.location_id, l.city
from employees e, departments d, locations l
where e.department_id=d.department_id
and d.location_id=l.location_id
and e.commission_pct is not null