스마트인재개발원에서 배운 데이터베이스 - 복습2-1
ㅇ 본 수업은 "스마트인재개발원"에서 진행되었습니다.
#스마트인재개발원 #국비지원코딩교육 #데이터베이스 #등가조인 #포괄조인 #비등가조인 #자체조인
<목차>
ㅇ 등가 조인
ㅇ 포괄 조인
ㅇ 비등가 조인
ㅇ 자체 조인
(내생각) 윗도리랑 바지 이야기로 이해하면 쉬운 듯
ㅇ 조인조건의 종류
(2개 이상의 테이블에 수행)
- 등가 조인 : 조인시킬 테이블에 같은 데이터가 존재할 때
- = 연산자 사용
- 현업에서 발생하는 99% : PK=FK
- 비등가 조인 : 데이터가 다를 때
- 다른 비교연산자 사용. 가장 많이 사용하는 건 비트윈
- 포괄 조인 : 어느 한쪽 테이블에 데이터가 더 많을 때
- 적은 쪽에 (+)를 붙여
(1개의 테이블에 수행)
- 자체 조인
- 조인시킬 테이블이 한 개야
- 셀프조인 내에서 이큐.논이큐.아우터 조인
ㅇ 등가조인 이큐조인 equi join
- 테이블에 같은 데이터 존재할 시 수행
- PRIMARY KEY와 FOREIGN KEY로 연결되어 있는 테이블에서 가장 많이 발생
ㅇ 실습
SELECT e.last_name, d.department_name, e.department_id FROM employees e, departments d WHERE e.department_id=d.department_id
106 rows selected.
- 사원 107명인데 왜 106명 나올까?
- 부서 번호가 없는 애가 있어서
ㅇ AND 연산자 사용한 추가 검색 조건
ㅇ 실습 : 90번 부서에 근무하는 사원 이름, 급여, 근무하는 부서이름을 출력하자.
SELECT e.last_name, d.department_name, e.department_id FROM employees e, departments d WHERE e.department_id=d.department_id AND e.department_id=90
- 풀이 순서
- 셀렉트 리스트 결정하기 : 이름, 급여, 부서
- 프럼절 : 테이블이 2개 필요하네? => 조인
- 알리아스 쓰고 셀렉트에 접두어 붙여
- 조인조건 : 2-1=1개 => PK=FK
- 추가 조건 : 90번 부서
- 사원에 대해 얘기하고 있고, d에는 사원이 없는 부서번호도 존재하므로 e에서 찾자
- 조건이 추가되니까. AND로 조건절 추가
ㅇ 세 개 이상의 테이블 조인
- 조인 조건 : e.d_id=d.d_id, d.lo=l.lo
- 사원들 이름과 각자가 근무하는 부서 이름과 도시를 알고 싶을 때
SELECT e.last_name, d.department_name, l.city FROM employees e, departments d, locations l WHERE e.department_id=d.department_id AND d.location_id=l.location_id
ㅇ 포괄조인 아우터조인 outer join
- 조인 기준 열의 어느 한쪽이 NULL이어도 강제로 출력하는 방식
- 부족한 쪽에 아우터 연산자 (+)를 붙여 NULL 행을 삽입
ㅇ 실습 : 우리회사에 근무하는 모든 사원 나열하고 그 사원이 근무하고 있는 부서 이름 출력하기 (사원 빼먹지 않고 출력)
SELECT e.last_name, e.salary, d.department_name FROM employees e, departments d WHERE e.department_id=d.department_id (+)
107 rows selected.
-
(+) 없이 그냥 이큐 조인 한다면?
- 행 106개 나와 (사원수인 107이 아니라)
- 사원 한 명이 부서 이름이 배당되지 않아서 제외되어 버렸어
- 즉, 부서 이름이 NULL인 사람은 날라가버려
-
e.department_id (+) = d.department_id 로 한다면?
- 부서 빼먹지 않고 출력
- 사원 별 근무 부서가 뜨되, 근무하는 사원이 없는 부서까지 모두 출력
- 122 rows selected. 가 뜸
ㅇ 실습 자료를 해석하는 것이 중요해
-
122-106=16의 의미 : 사원이 없는 부서 수
- 122 : 모든 사원과 + (사원이 없는) 부서까지
- 106 : 근무하는 부서가 있는 사원 수
-
27-16=11의 의미 : 사원이 있는 부서 수
- 27 : 전체 부서 수
- 16 : 사원이 없는 부서 수
ㅇ 비등가조인 논이큐조인 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_id는 e_id를 참조하는 FK
- 자체 참조의 첫 번째 행은 무조건 널
- 아무것도 없는 데서 값을 가져올 수 없잖아 ~
- 첫 번째가 널인 컬럼은 자체참조 의심하기!
ㅇ 자체조인 셀프조인 self join
- ALIAS를 이용해 여러 개의 테이블인 것처럼 만들어 사용
( FROM 절에 ALIAS를 써서 하나의 테이블을 여러 개로 만드는 건 엄청 막강한 거니 꼭꼭 알아두기 ★★)
ㅇ 실습 : 우리 회사에 근무하는 사원의 번호와 이름, 그 사원을 관리하는 관리자의 번호와 관리자 이름을 출력하시오.
- e테이블에는 관리자인 사람, 관리자가 아닌 사람 모두의 사원 정보가 저장되어 있어
- 관리자 이름 => e테이블의 사원이름
관리자 번호 => e테이블의 사원번호 - 내가 찾고자 하는 데이터가 그 데이터 내에 있어 => 셀프조인
- 사원 찾을 e테이블과 관리자 찾을 m테이블로 구분
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
Author And Source
이 문제에 관하여(스마트인재개발원에서 배운 데이터베이스 - 복습2-1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@data_sy/blogsupporters2-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)