IT개발/Oracle Database2010. 8. 31. 02:01

오라클 SQL 구문 : Select문 : 조인 및 서브 쿼리

-* 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
 )
;

Posted by 시티락