오라클 DB(sql)_기초_10 (Join)

데이터베이스 2021. 5. 1. 19:41

(예제) 우리회사에 근무하는 사원의 이름과 사원이 근무하는 부서 이름을 출력하시오.
->

 

이게 하면 원래대로는 사원수(107) 나와야 하는데 2800개의 데이터가 나와...??

 

  • 조인(join)
    :
    여러테이블의 데이터를 가져와서 볼때 사용하는 기능
    : 조인이 발생하면 두개의 테이블을 하나의 테이블로 합치는 작업이 이루어짐
    : 각각의 테이블이 가지고 있는 데이터를 조합하는데, 데이터의 무결성이 보장되도록 테이블이 합쳐져야만한다. >> 조인의 핵심

    **** n-1규칙 반드시기억 ****
    n = 조인을 시킬 테이블의 개수
    조인을 시킬때는 n-1개의 조건이 반드시 삽입 되어 있어야 함(WHERE 절 사용)
    조인 조건이 생략되거나 잘못되었을 경우 Cartesian Product 가 발생함

     
  • 카티시안 (Cartesian Product)
    : 
    조인조건을 생략하거나 잘못 작성하면 모든행을 조합시킴(조인시킴)

 

(예제) 우리회사에 근무하는 사원의 이름과 사원이 근무하는 부서 이름을 출력하시오.
 

조인조건을 넣어서 결과를 출력하였을때 106개의 올바른 결과가 도출됨.

 

(eq)조인시킬 데이터간의 똑같은 값이 있을 경우

(non-eq)서로 다른 값을 비교했을 

(outer)등가조인의 확장버전

(self)내에서 등가,비등가,포괄조인이 발생함.

 

 

 

Department_id 경우 employees테이블과 departments테이블에도 존재하기 때문에 에러가 발생하게 . 아래와같이 소유주의 이름(스키마) 붙여주어야 작동하게 .

 

Select 뒤에 발생하는 column 앞에 테이블 이름을 붙여주어 쓸데없는 성능의 저하를 막을 있음.

 

From절에서 alias 사용하여 컬럼리스트 작성에 조금더 원활하게 진행할 있음.

From절에서 한번 alias 썼으면 전체 문장에서 모두 alias 사용해야 .

 

 

<등가조인;eq join>

  • 조인을 시킬 테이블간 같은 데이터가 존재하는 경우
  • Primary key foreign key 연결되어있는 테이블에서 가장 많이 발생함.
  • 일어나는 조인의 99%이상이 eq join이라고 있음
  • PK FK 같다는 조건을 WHERE 절에 쓰는것이라고 보아도 무방함!
  • 조인조건이 OR 연결될경우 Catesian Product 발생함.
  • 추가되는 일반조건 조인 조건의 경우 앞의 조인조건과 반드시 AND 연결해야함.

 

PK FK column이름은 틀려도 되지만 data type 길이는 반드시 같아야 한다.

 

<포괄조인;Outer Join>

(+) ; Outer 연산자(부족한쪽 테이블명 뒤에 붙여줌)

>> 부족한쪽 테이블에 null값을 삽입시켜 행을 대칭을 시켜 출력이 가능하도록 .

 

<비등가조인-non_eq join>

  • 테이블에 같은데이터가 존재하지 않는경우에 일어나는 조인.
  • Eq연산자가 아닌 다른 연산자를 사용하는경우(대부분 between 사용)
  • 거의 사용하지 않음.

<자체조인; Self Join>

  • 첫번째 행이 무조건 null값을 가짐

 

(예제) 근무하는 사원의 번호와 이름과 사원을 관리하는 관리자 번호와 관리자 이름을 출력하시오.

; 결국 관리자도 직원의 일부이기 때문의 직원테이블을 다른 alias(from절의 alias기능 사용) 설정하여 서로 다른테이블처럼 작동하도록 . manager_id employees테이블의 employee_id 참조하는 것으로 간주하여 테이블 내에서 조인이 발생할 있도록 .

; 하나의 테이블을 alias 사용해서 여러개의 테이블처럼 나타나도록 .

 

(실습) 90 부서에 근무하는 사원의 이름과 부서이름을 출력하시오.

문제의 주체가 근무하는 사원이기때문에 위의 쿼리 맞다고 있음.

 

admin