<조인 (JOIN) - 리뷰 및 예제>
-
HR 계정 테이블 관계도
-
기본키 Primary Key (PK): 빨간색 칼럼(열)
-
NULL 또는 중복값 불가능
-
외래키 Foreign Key (FK): 기본키와 연결된 다른 테이블의 칼럼
-
항상 참조하는 기본키에 있는 데이터를 사용
-
NULL값 가능
-
되도록 기본키와 같은 열 이름으로 함
<조인 예제>
-
departments 테이블에 있는 manager_id와 employees 테이블의 employee_id를 조인하여 부서명, 매니저번호, 매니저 이름, 전화번호를 출력
1
2
3
4
5
6
7
|
SELECT d.department_name 부서명,
d.manager_id 매니저번호,
e.last_name ||' '|| e.first_name "매니저이름(직원이름)",
e.phone_number 전화번호
FROM departments d
JOIN employees e
ON d.manager_id=e.employee_id; --이름은 다르지만 참조하고 있음
|
cs |
-
조인을 이용하여 사원들의 직원번호 (employee_id), 고용일자(hire_date), 직종(job_id), 직책(job_title) 출력
1
2
3
4
5
6
7
|
SELECT e.employee_id 사원번호,
e.hire_date 고용일자,
j.job_id 직종,
j.job_title 직책
FROM employees e
JOIN jobs j
ON e.job_id=j.job_id;
|
cs |
-
직책(job_title)이 'Sales Manager'인 사원들의 입사년도 그룹 별 평균 급여를 출력. 입사년도를 기준으로 오름차순 정렬 (jobs 테이블과 조인, job_id를 이용, 입사년도: TO_CHAR(e.hire_date, 'YYYY')
1
2
3
4
5
6
7
8
|
SELECT TO_CHAR(e.hire_date,'YYYY') 입사년도,
ROUND(AVG(e.salary)) 평균급여
FROM employees e
JOIN jobs j
ON e.job_id=j.job_id
WHERE j.job_title='Sales Manager'
GROUP BY TO_CHAR(e.hire_date,'YYYY')
ORDER BY 1;
|
cs |
-
각각의 도시(city)에 있는 모든 부서 직원들의 평균급여를 조회. 평균급여가 가장 낮은 도시부터 도시명(city)과 평균연봉, 해당 도시의 직원 수를 출력. 단, 도시에 근무하는 직원이 10명 이상인 곳은 제외하고 조회.
1
2
3
4
5
6
7
|
SELECT lo.city, round(avg(e.salary)), count(*)
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN locations lo ON d.location_id = lo.location_id
GROUP BY lo.city
HAVING COUNT (*)<10
ORDER BY 2;
|
cs |
-
자신의 매니저보다 급여를 많이 받는 직원들의 성(last_name), 급여(salary)와 매니저의 last_name과 salary를 출력
1
2
3
4
5
|
SELECT e.employee_id, e.last_name, e.salary, m.last_name, m.salary
FROM employees e --자신
JOIN employees m --매니저
ON e.manager_id = m.employee_id
WHERE e.salary > m.salary;
|
cs |
'Learning > SQL' 카테고리의 다른 글
서브쿼리 - 다중행 (0) | 2020.06.18 |
---|---|
서브쿼리 - 단일행 (0) | 2020.06.18 |
조인 (JOIN) - 교차조인 (0) | 2020.06.18 |
조인 (JOIN) - 외부조인 (0) | 2020.06.18 |
조인 (JOIN) - 자체 조인 (Self Join) (0) | 2020.06.17 |