본문 바로가기
데이터베이스/기초 SQL 입문

조인 처리과정 이해 및 기본 조인 문장

by 스키피땅콩버터 2020. 9. 16.
반응형

select ename, dname

from emp, dept order by ename;

두 테이블( emp, dept )의 데이터를 하나로 붙이는데 무작위로 다 가져다가 붙이게 된다.

즉 모든 부서에 속한 것처럼 가져오게 되어 필요한 데이터가 아니기 때문에 where 절을 사용하여 join 해서 

원하는 데이터 형식으로 조회 할 수 있습니다.

 


조인이란?

 - 데이터 베이스에서 여러 테이블의 데이터가 필요한 경우 조인을 사용한다.

 - 관계형 데이터 베이스에서 가장 기본적이고, 가장 중요한 기능으로, 어떤 테이블을 기준으로 다른 테이블에 있는 row를 찾아오는 것이다.

- 관계형 데이터 베이스에서 서로 독립적인 데이터들 간의 조인을 이용하여 필요시 원하는 다양한 정보를 참조한다.

- 해당 칼럼에 존재하는 공통 값, 일반적으로 기본 키 및 외래 키 열을 조인 조건으로 사용하여 한 테이블의 행을 다른 테이블의 행에 조인할 수 있다.

- PK, FK의 관계없어도 논리적인 값들의 연관만으로  JOIN 작업 처리할 수 있다.

 

 

카티시안 곱

- 카티시안 곱이 생성되는 경우

   * 조인 조건을 생략한 경우

   * 조인 조건이 부적합한 경우

-첫 번째 테이블의 모든 행이 두 번째 테이블의 모든 행에 조인되어 (무작위로 가져와) 처리됨

- 카티시안 곱이 생성되지 않도록 하려면 WHERE절에 항상 유요한 조인 조건을 지정해야 한다.

 

 

두 테이블의 건수만큼 곱해서 나온 데이터의 결과 값이 생성되는 것 : 카티시안곱

 

이러한 카티시안 곱이 생성되지 않도록 정확한 조인 조건을 지정해주어야 한다.


조인 문장

- FROM 절에 사용할 테이블들을 콤마로 구분해서 모두 적어준다.

- 적절한 Join조건을 WHERE 절에 지정한다.

- 일반적으로 테이블 개수 -1 개의 조인 조건이 필요하다. (테이블이 3개이면 2개의 조인 조건이 필요한 것이다.)

- PK와 FK 간의 조인인 경우 조건이 붙는 경우가 많다.

 


테이블 별칭 지정하기

테이블 이름을 그대로 사용한 경우

AND를 사용하여 조건 두 개를 사용하여 조회할 수 있습니다.

 

테이블 별칭을 지정한 경우

 

 

DB에서 쿼리 읽어 들이는 순서 

FROM -> WEHRE -> group by -> having -> select

Q. 아래의 쿼리에서 오류가 발생하는 이유는?

SELECT절에 "Player.player_name 선수명, " 이 부분의 player부분이 유효하지 않는다.

왜냐하면 palyer을 p로 쓴다고 별칭을 지정해놓은 상태에서 원본(palyer)을 사용하게 되면 에러 발생하기 때문이다.

 

 


조인을 이용한 자료

범위 검색을 이용한 조인 처리

칼럼 이름은 조인할 때 전혀 상관이 없다.

 

emp테이블의 ename , sal칼럼 , salgrade테이블의 모든 칼럼을 조회할 때 s.*해주면 된다.

그래서 나온 칼럼들의 값들 중

조건문인 Where절에 지정해 주면 됩니다. (e.sal을 가지고 s.losal, s.hisal사이에 속하는지 조건을 지정해 줍니다.)

 


outer 조인

- Join조건을 만족하지 못하는 경우에도 모든 행들을 다 보고자 하는 경우에 사용하는 Join

- '(+)'연산자를 사용함

- 어느 한쪽 집합 (테이블)이 기준이 되어 다른 쪽 집합(테이블)의 연결되는 조건 만족에 상관없이 기준이 되는 집합(테이블)은 무조건 추출됨

 

지금까지는 where절의 조인 조건을 만족하는 데이터만  붙여서 결과에 나오게끔 만들었었다.

 

위에서 보면 deptno의 40번과 50번은 어떤 연결된 데이터도 없다.

일반 조인에서는 결과에서 빠져서 나오는 현상이 발생한다.

 

이럴 때 조인 조건을 만족하지는 않지만, 특정 테이블에 있는 데이터를 추가로 더 화면에 뿌릴 수 있도록 도와주는 것을

outer조인이라고 한다.

 

outer 조인

where 절에 +가 없었더라면 양쪽 테이블의 공통으로 존재하는 데이터를 가져와서 비교했을 것이다.

더하기(+)가 없는 테이블 d.deptno 에서 조인할 때 빠져서 못 나온 데이터가 있으면 추가해서 동작한다.

양쪽 모두 (+) 붙여주게 되면 오류 발생합니다.


정리 

- 조인 조건을 지정하지 않은 경우 두 테이블 건수를 곱한 결과가 나온다. (카티시안 곱)

 

- 두테이블 조인은 = 이외의 다른 연산자도 조인 조건으로 사용할 수 있으며, 칼럼명이 다른 경우에도 조인 작업을 수행할 수 있다. 

 

- outer 조인을 사용하면 조인 조건을 만족하지 않는 자료를 조인 결과에 포함시켜 확인할 수 있다.

 

- wehre절에 (조인 테이블 수 -1) 개만큼의 조인 조건을 지정한다.

 

'데이터베이스 > 기초 SQL 입문' 카테고리의 다른 글

윈도우 함수  (0) 2020.09.16
그룹 함수  (0) 2020.09.14
일반 함수  (0) 2020.09.13
변환 함수  (0) 2020.09.13
날짜 연산 및 날짜 함수  (0) 2020.09.11