오라클 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번 부서에 근무하는 사원의 이름과 부서이름을 출력하시오.
문제의 주체가 근무하는 사원이기때문에 위의 쿼리가 더 맞다고 볼 수 있음.
'데이터베이스' 카테고리의 다른 글
오라클 DB(sql)_기초_11 (Group by) (0) | 2021.05.01 |
---|---|
오라클 DB(sql)_기초_10 (Join) _ 예제풀이 (0) | 2021.05.01 |
오라클 DB(sql)_기초_1~9 예제풀이 (0) | 2021.05.01 |
오라클 DB(sql)_기초_9 (order by) (0) | 2021.05.01 |
오라클 DB(sql)_기초_8 (논리조건_논리연산자) (0) | 2021.05.01 |