티스토리 뷰

Database/Oracle

[Oracle] 테이블 조인

best 2016. 2. 17. 15:39

테이블(TABLE) 조인

 

테이블 간 Primary Key - Foreign Key 로 연결하여 관련된 정보들을 가져온다.

 

 

 

 

 

실습1 - DEPARTMENTS의 PK인 DEPARTMENT_ID와 EMPLOYEES의 DEPARTMENT_ID로 관계가 형성되어 있다.

이를 이용하여 전체 사원들의 사원 번호, LAST_NAME, 부서명, 부서 번호를 조회한다.

 

1
2
3
4
5
6
7
8
9
-- 전체 사원들의 사원 번호, LAST_NAME,  부서명, 부서 번호를 조회한다.
SELECT    EMPLOYEE_ID
          , LAST_NAME
          , DEPARTMENT_NAME
          , D.DEPARTMENT_ID   -- 두 개의 테이블에 존재한다면, 어떤 테이블에서 가져오는지 정확히 명시해야한다. (보통 PK로 존재하는 데이터를 가져온다.)
FROM      EMPLOYEES E
          , DEPARTMENTS D
WHERE     E.DEPARTMENT_ID = D.DEPARTMENT_ID
;
cs

 

 

 

 

 

실습2 - 커미션을 버는 모든 사람들의 LAST_NAME, 부서 명, 지역 ID 및 도시 명을 조회한다. + 도시명이 Seattle인 것만 조회

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT    LAST_NAME
          , DEPARTMENT_NAME -- DEPARTMENTS에 있는 DEPARTMENT_ID와 EMPLOYEES에 있는 DEPARTMENT_ID를 조인
          , L.LOCATION_ID -- LOCAIONS에 있는 LOCATION_ID와 DEPARTMENTS에 있는 LOCATION_ID를 조인, 조회할땐 PK인 LOCATIONS에 있는 것으로 조회
          , CITY
FROM      DEPARTMENTS D
          , EMPLOYEES E
          , LOCATIONS L
WHERE     E.DEPARTMENT_ID = D.DEPARTMENT_ID -- 빨간줄
AND       D.LOCATION_ID = L.LOCATION_ID -- 하늘색줄
AND       L.LOCATION_ID = (   -- PK로 찾는 것이 더 빠르다.(성능차이) 그러므로 실무에서는 531줄의 방법을 사용하는 것 보다 더 선호된다.
                            SELECT LOCATION_ID
                            FROM   LOCATIONS
                            WHERE  CITY = 'Seattle'
                            )
--AND       CITY = 'Seattle'
;
cs

 

 

 

 

 

실습3 - 부서 명, 위치 ID, 각 부서 별 사원 총 수, 각 부서 별 평균 연봉을 조회한다.평균 연봉은 소수점 2 자리까지만 표현한다.

 

1
2
3
4
5
6
7
8
9
10
SELECT    DEPARTMENT_NAME
          , LOCATION_ID
          , COUNT(EMPLOYEE_ID) "사원수"  -- DEPARTMENTS의 DEPARTMENT_ID 와 EMPLOYEES의 DEPARTMENT_ID를 조인하여 EMPLOYEE_ID카운트
          , ROUND(AVG(SALARY),2"평균 연봉"-- 위와 같이 조인하여 SALARY의 평균
FROM      DEPARTMENTS D
          , EMPLOYEES E
WHERE     D.DEPARTMENT_ID = E.DEPARTMENT_ID
GROUP     BY DEPARTMENT_NAME
          , LOCATION_ID -- 집계 함수 제외한 나머지 것들을 다 적어야한다.
;
cs

 

 

ROUND  - 반올림 함수

ROUND(값, n)   : 값을 소수점 n번째 까지 표시한다.

 

 

 

 

'Database > Oracle' 카테고리의 다른 글

[Oracle] EXISTS  (0) 2016.02.18
[Oracle] VIEW  (0) 2016.02.18
[Oracle] 테이블(Table) 설계  (0) 2016.02.17
[Oracle] 서브쿼리  (0) 2016.02.16
[Oracle] IS NULL, IS NOT NULL, DISTINCT, GROUP BY, HAVING, NVL  (0) 2016.02.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함