Oracle SQL - Select 개발일지(5)

Nam-Soomin·2022년 8월 30일
0

Oracle SQL

목록 보기
5/7

📝 Oracle SQL


4장 여러 테이블의 데이터 표시 (4)

  • 조인(join)
    -실제로 분리된 테이블을 논리적으로 하나로 합쳐서 원하는 데이터를 찾는다.

오라클에는 4개의 조인이 있다. 등가조인, 비등가조인, 포괄조인, 자체조인

※(tip)1,2,3장은 본문에 나온 예제만 한번봐도 좋으나, 4장은 무조건 잘 봐둬야한다. 시험을 본다면 또는 프로젝트를 만든다면 가장 많이 사용하게 되는 장!
+연습을 안하면 실전에서 사용하기 힘들다. 그만큼 중요⚠

📌 등가 조인

📌 카티시안 곱(Cartesian Product)

  • 그냥 막 합치는 것. 잘못합쳐진다. 라는 것
  • 조인 조건을 생략한 경우
  • 조인 조건이 부적합

📌 비등가 조인


📌 포괄 조인


📌 자체 조인


📌 예제 풀이


연습4-1) 모든 사원의 이름, 부서 번호, 부서 이름을 표시하는 질의를 작성하시오.

select e.last_name, e.department_id, d.department_name
from employees e, departments d
where e.department_id = d.department_id;

*조인을 사용하는 것이다.

  • 사원의 이름, 부서번호 : employees
  • 부서 번호, 부서 이름 : departments
  • select 사원의 이름, 부서번호, 부서이름

연습4-2) 부서 80에 속하는 모든 업무의 고유 목록을 작성하고 출력 결과에 부서의 위치를 포함시켜라.

select (distinct) e.job_id, d.location_id
from employees e, departments d
where e.department_id = d.department_id 
and e.department_id = 80;
  • select 업무코드, 부서위치
  • 업무코드 : employees(job_id), 부서위치 : departments(location_id)
  • 부서번호가 같으니 일치시켜서 조인시키면 된다.
    테이블조회

    결과

    번외)중복된게 싫으면 distinct를 써주어라.

연습4-3) 커미션을 받는 모든 사원의 이름, 부서 이름, 위치 ID 및 도시를 표시하는 질의를 작성하시오.

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; 

*등가조인을 사용한다.

  • 사원 이름 : employees, 부서이름 : departments
  • 위치 번호 : departments, location, 도시이름 : location
  • select 사원의 이름, 부서이름, 위치번호, 도시이름

연습4-4) 이름에 a가 포함된 모든 사원의 이름과 부서 이름을 표시하시오.

select e.last_name, d.department_name
from employees e, departments d
where e.department_id = d.department_id
and e.last_name like '%a%';
  • select 사원이름, 부서이름
  • 사원이름 : employees, 부서이름 : departments
  • 추가조건 : 이름에 소문자 a가 포함 -> LIKE연산자 사용

연습4-5) toronto에서 근무하는 모든 사원의 이름, 업무, 부서 번호 및 부서 이름을 표시하는 질의를 작성하시오.

select e.last_name, e.job_id, d.department_id, d.department_name
from employees e, departments d, locations l
where e.department_id = d.department_id 
and d.location_id = l.location_id
and lower(l.city) = 'toronto';

*등가조인

  • select 사원이름, 업무코드, 부서번호, 부서이름
  • 사원이름, 업무코드, 부서번호 : employees
  • 업무코드, 부서이름 : departments
  • 도시이름 : locations

연습4-6) 사원의 이름 및 사원 번호를 관리자의 이름 및 관리자 번호와 함께 표시하고 각각의 열 레이블을 사원명, 사번, 관리자명, 사번으로 지정하시오.

select worker.last_name "사원명", worker.job_id "사번", manager.department_id "관리자명", manager.employee_id "사번"
from employees worker, employees manager
where worker.manager_id = manager.employee_id;

*self 자체 조인

  • 사원이름 부터 관리자 사번까지 : employees
  • select 사원이름, 사원번호, 관리자 이름, 관리자 사번

연습4-7) 6번문제를 수정하되, king을 포함하여 관리자가 없는 모든 사원을 표시하도록 하고 결과를 사원 번호를 기준으로 정렬하시오.

select worker.last_name "사원명", worker.employee_id "사번", manager.last_name "관리자명", manager.employee_id "사번"
from employees worker, employees manager
where worker.manager_id = manager.employee_id(+);

*포괄조인의 문법 = 등가조인+(+)
(+)를 어느쪽에 붙이는가?
없는 데이터를 출력하는 쪽에 붙인다.

  • 관리자가 없는 사원 : 사장
  • 사원이름 부터 관리자 사번까지 : employees
  • select 사원이름, 사원번호, 관리자 이름, 관리자 사번

연습4-8) 지정한 사원의 이름, 부서 번호 및 지정한 사원과 동일한 부서에서 근무하는 모든사원을 표시하도록 질의를 작성하고 각 열에 적합한 레이블을 지정하시오.

select worker.department_id "부서 번호", worker.last_name "사원 이름", nakama.last_name "동료 이름"
from employees worker, employees nakama
where worker.department_id = nakama.department_id
AND worker.employee_id <> nakama.employee_id
ORDER BY worker.department_id, worker.last_name, nakama.last_name;
  • 사원이름, 동료 직원 이름

연습4-10) Davies라는 사원보다 늦게 입사한 사원의 이름과 입사일을 표시하는 질의를 작성하시오.

select kouhai.last_name, kouhai.hire_date
from employees davies, employees kouhai
where davies.last_name = 'Davies' 
AND kouhai.hire_date > davies.hire_date;

*자체조인

  • Davies 사원의 정보 / Davies보다 늦게 입상한 사원 정보 ->employees

연습4-11) 관리자보다 먼저 입사한 모든 사원의 이름 치 입사일을 관리자의 이름 및 입사일과 함께 표시하고 열 레이블을 각각 ...로 지정하시오.

select worker.last_name, worker.hire_date, manager.last_name, manager.hire_date
from employees worker, employees manager
where worker.manager_id = manager.employee_id 
AND worker.hire_date < manager.hire_date;

*자체조인

  • 사원정보 / 관리자정보 : employees

    *37 rows selected.

✅本日の一言
4のぶんは後でじしゅうすることにしよう。
昨日はよく休めた!


profile
🇰🇷Dreaming Full-Stack WEB Developer

0개의 댓글

관련 채용 정보