5월 21일 금요일 (9일차) - 비등가조인, 셀프조인ㅇ

@_@·2021년 5월 21일
0

Database

목록 보기
17/28

<목차>
ㅇ 비등가 조인
ㅇ 자체 조인

다음 시간에 써브쿼리 배우면 왠만한 조인 다 가능해져서
이큐조인만 잘 이해하고 넘어갈 것!
그래서 이 부분은 실습보다는 이해 위주로 쓱~




ㅇ 비등가조인 논이큐조인 non-equi join

  • 데이터가 서로 다를 때 수행
    • salary는 구체적인 가격 ≠ job grades는 low ~ high salary에 대한 등급
    • 즉 샐러리(숫자)와 등급(문자)를 연결하고 싶을 때
  • 동등 연산자가 아닌 연산자를 포함하는 조인 조건
    • (보통) BETWEEN 연산자 사용
  • 예)
SELECT e.last_name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal



ㅇ 자체 조인

ㅇ 자체 참조

  • 테이블 내에서 FK 설정
  • 예)
  • 원래 e테이블과 m테이블(manager) 따로 있었어
    근데 결국 m테이블은 e테이블에서 관리자들만 모아둔 거잖아?! (e_id에 없는 번호가 m_id가 될 수 없잖아)
    • e테이블에서 이름을 바꾸면 m테이블에서도 또 바꿔줘야 해
      = 데이터 불일치 = 데이터 중복
    • 이걸 통합시켜 불일치 최소화하자
      => 결국 e테이블에서 m_id는 e_id를 참조하는 FK야
  • 자체 참조의 첫 번째 행은 무조건 널이야
    • 아무것도 없는 데서 값을 가져올 수 없잖아~
      (아 그러면 데이터가 한 행 한 행씩 읽는 건 거야? 그러면 사원번호가 108번인 사람의 관리자는 100~107까지밖에 안 되는 건가 봐)
    • 첫 번째가 널인 컬럼은 자체참조 의심하기!

ㅇ 자체조인 셀프조인 self join

  • ALIAS를 이용해 여러 개의 테이블인 것처럼 만들어 사용
    ( FROM 절에 ALIAS를 써서 하나의 테이블을 여러 개로 만드는 건 엄청 막강한 거니 꼭꼭 알아두기 ★★)

ㅇ 실습 : 우리 회사에 근무하는 사원의 번호와 이름, 그 사원을 관리하는 관리자의 번호와 관리자 이름을 출력하시오.

  • e테이블에는 관리자인 사람, 관리자가 아닌 사람 모두의 사원 정보가 저장되어 있어
  • 관리자 이름 => e테이블의 사원이름
    관리자 번호 => e테이블의 사원번호
  • 내가 찾고자 하는 데이터가 그 데이터 내에 있어 => 셀프조인
    • 사원 찾을 e테이블과 관리자 찾을 m테이블로 구분
SELECT e.employee_id, e.last_name, e.manager_id, m.last_name
FROM employees e, employees m
WHERE e.manager_id=m.employee_id

e테이블의 관리자 번호 = m테이블의 사원 번호

ㅇ 짜기가 어려워 ㅠㅜ
테이블 구조를 정~~말 다 알고 있어야 짤 수 있는 거야
희망을 드리면.. 거의 안 써 ㅋㅋㅋㅋ
셀프조인은 월욜날 배울 써브쿼리로 대부분 수행이 되니까 개념만 알고 가자.



profile
STEP BY STEP

0개의 댓글