SELECT employee_id
, first_name
, job_title
FROM employees e JOIN jobs j
ON e.job_id = j.job_id
WHERE e.job_id LIKE 'SA%';
이건 35명 나온다
문제 2)
영업 부서에 소속한 사원들의 목록을 얻어보자.
결과> 사원번호, 사원이름, 부서이름
SELECT employee_id
, first_name
, department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE department_name = 'Sales';
이건 34명 나온다.
그럼 위에꺼랑 비슷한데 한명은 어디갔냐..??1번 문제랑 비교해서 한 것이다.
여기서 178번이 안나왔는데..
왜 안나왔냐면..
직무는 영업이지만..부서가 null이기 때문에..부서로 검색하면 안나온다~~
부서가 null인 것 까지 가지고 올려면
OUTER JOIN을 쓰면 된다~ 그리고 그 NULL값을 가진 목록이 왼쪽에 있으면 LEFT라고 써준다~
SELECT employee_id
, first_name
, department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id = d.department_id
WHERE e.job_id LIKE 'SA%'
여기서 주의 할점은 WHERE 절에서 부서이름으로 검색하면 안되고
job_id로 해줘야 한다.
문제 3)
사원번호 178번 사원 정보를 아래와 같이얻어보자.
결과> 사원번호, 사원이름, 직무이름, 부서이름
SELECT employee_id, first_name, job_title, department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id = d.department_id
JOIN jobs j
ON e.job_id = j.job_id
WHERE employee_id = 178;
또는
SELECT employee_id
, first_name
, job_title
, department_name
FROM employees e JOIN jobs j
ON e.job_id = j.job_id
LEFT JOIN departments d
ON e.department_id = d.department_id
WHERE employee_id = 178;
또는
SELECT employee_id
, first_name
, job_title
, department_name
FROM employees e , jobs j, departments d
WHERE e.job_id =j.job_id
AND e.department_id = d.department_id (+)
AND employee_id =178
(+)표시는 OUTER JOIN의 또다른표시
문제 4)
도시별로 현재 근무하는 사원의 수를 얻어보자.
단, 부서발령을 받지 않은 사원도 포함한다.
근무인원이 많은 순서대로 정렬한다.
결과>도시이름, 근무인원
SELECT city AS 도시, COUNT(*) AS 근무인원
FROM departments d JOIN locations l
ON l.location_id = d.location_id
RIGHT OUTER JOIN employees e
ON d.department_id = e.department_id
GROUP BY city
ORDER BY 도시
SELF JOIN 예
SELECT 사원.first_name, 관리.first_name
FROM employees 사원 JOIN employees 관리
ON 사원.manager_id = 관리.employee_id
WHERE 사원.last_name LIKE 'R%';
나는 사원이고 관리자 아이디만 갖지고 있고
그래서 그 사람의 관리자를 알고 싶으면..이렇게 셀프조인 한다..