오라클 SQL 구문 : Select문 : 조인 및 서브 쿼리
Select
From
Join
On
Where
Group By
Having
Order By
hr 사용자로 접속
sqlplus hr/hr
테이블 목록
Select * From tab;
특정 테이블의 구조를 보고자한다면…
Desc 테이블명;
성이 'King' 사용자의 정보 출력
Select * From employees Where last_name = 'King';
부서가 80, 90인 사용자의 부서 정보 추력
Select * From departments Where department_id in (90, 80);
■ 한 개 이상의 테이블(부서(부서명)/사원(사번))에서 데이터 조회 : 조인/서브쿼리
예제) 성이 'King' 사용자의 부서명 출력
--[가] 첫 번째 모양
Select departments.department_name,
employees.employee_id
From employees -- 첫번째 테이블
Join departments -- 두번째 테이블
On -- 조건절
employees.department_id = departments.department_id
AND -- where 절을 사용해도 된다.
last_name = 'King';
--[나] 두 번째 모양
Select departments.department_name, employees.employee_id
From employees, -- 첫번째 테이블
departments -- 두번째 테이블
Where -- 조건절
employees.department_id = departments.department_id
And
last_name = 'King';
예제) 성이 'King'인 사용자의 사번(employees), 부서명(departments), 직무(job)를 출력
--[가] 첫 번째 방식
Select
employees.employee_id,
departments.department_name,
jobs.job_title
From
employees -- 첫 번째 테이블
Join -- 세 번째 테이블
jobs
On -- 두 번째 테이블과 세 번째 테이블의 조건
employees.job_id = jobs.job_id
Join
departments -- 두 번째 테이블
On -- 첫 번째 테이블과 두 번째 테이블의 조건
employees.department_id = departments.department_id
And last_name = 'King';
--[나] 두 번째 방식
Select
employees.employee_id,
departments.department_name,
jobs.job_title
From
employees, jobs, departments
Where
employees.job_id = jobs.job_id
And
employees.department_id = departments.department_id
And
last_name = 'King'
;
** 테이블명을 줄여서 표기
Select d.department_name, e.employee_id
From employees e, -- 첫번째 테이블
departments d -- 두번째 테이블
Where -- 조건절
e.department_id = d.department_id
And
last_name = 'King'
;
■ 서브쿼리
예제)사원 중 평균 급여보다 큰 급여를 받는 사원리스트
Select *
From employees
Where
salary > (Select Avg(salary) From employees) -- 평균 급여
;
예제) 직무별 가장 많은 급여를 받는 사원 정보 출력
Select employee_id, last_name, job_id, salary
From employees
Where (job_id, salary) In
(
Select job_id, Max(salary) -- 직업별 최대 급여
From employees
Group By job_id
)
;