Search

반응형

'Join'에 해당되는 글 2건

  1. 2020.09.12 [HOW]NATURAL JOIN, CROSS JOIN 사용하는 방법, ANSI 조인 -오라클 (ORACLE)
  2. 2020.09.11 [HOW]SQL INNER JOIN (내부조인) 사용하는 방법, ON, USING, ANSI
반응형

안녕하세요. 신기한 연구소입니다.

쿼리를 만들다 보면 다양한 join을 만나게 되는데요.

사실 기본 INNER JOIN과 OUTER JOIN을 많이 사용합니다.

그 외에도 NATURAL JOIN과 CROSS JOIN이 있는데..

어떤 의미이며 어떻게 사용하는지 그 방법에 대해 알아봅니다.

 

 

조인에 대해 명시를 하는 INNER, OUTER, NATURAL, CROSS 등을 표준 조인

또는 ANSI 조인이라고 합니다.

그럼 NATURAL JOIN에 대해 살펴봅니다.

이 조인의 특징은 바로 두 테이블 간 공통된 컬럼을 자동으로 인식하는 겁니다.

그 말은 연결 고리를 표시할 필요가 없다는 의미입니다.

 

 

위 쿼리를 보면 NATURAL INNER JOIN 과 NATURAL JOIN 두 가지로 사용되었는데

같은 의미입니다.

INNER는 생략이 가능합니다.

그러고 보니 저번에 INNER JOIN을 포스팅했었는데요.

INNER JOIN은 EQUI(등가) 조인으로 양 쪽 테이블에 같은 값을 가지는 컬럼을 묶어서

연결하는 구조였습니다.

NATURAL JOIN도 INNER JOIN이라면 같은 의미겠지요?

다른 점은 연결 컬럼인 DEPTNO를 명시적으로 표현하지 않았고 알아서 자동으로 연결된다는

점입니다.

그래서 ON, USING, WHERE절의 조인 방식을 사용할 수 없습니다.

또한 연결한 두 테이블의 컬럼은 같은 이름, 같은 데이터 유형이어야 합니다.

또한 별칭(ALIAS)을 사용할 수도 없어요.

또 다른 점은 결과 조회인데요.

INNER JOIN은 *로 조회하면 두 개의 테이블에 존재하는 같은 컬럼이 각각 표시됩니다.

NATURAL JOIN은 한 개만 조회됩니다.

INNER JOIN은 *로 조회하면 두 개의 테이블 전체 컬럼을 순서대로 출력합니다.

NATURAL JOIN은 한 개만 조회된다고 했는데 제일 앞 컬럼에 나옵니다.

그럼 어떤 컬럼으로 조인되었는지 확인이 가능하겠네요.

 

 

위 쿼리와 이번 쿼리와 결과를 비교해 보세요. 이해하기 쉬울 겁니다.

 

다음은 CORSS JOIN 또는 CARTESIAN PRODUCT에 대해 알아봅니다.

사실 조인이라 해야 할지 모르겠네요.

이유는 조인인데 조인 조건이 없습니다.

그냥 두 개 테이블을 M*N으로 곱해서 조회하는 구조거든요.

A 테이블이 10건, B 테이블이 5건이면 10*5 = 50건의 조합으로 데이터가 조회됩니다.

 

 

 

먼저 두 테이블의 각각 건수를 확인합니다.

12건과 5건이 나오네요.

 

이제 CROSS JOIN을 시도합니다.

ANSI 가 아닌 일반적으로 사용할 때는 두 테이블을 FROM절에 콤마(,)로 나열하고

조인 조건을 설정하지 않으면 됩니다.

ANSI로 작성하는 경우는 CROSS JOIN을 사용하고 ON과 USING을 사용하지 않아야 한다.

 

 

이렇게 쿼리를 작성하고 조회하면

12*5 = 60건의 결과가 조회됩니다.

 

중간생략~~

 

사실 일반적인 상황에서 이렇게 조회하지는 않습니다.

그냥 참고로 알고 있으면 되고 대용량 테이블에서 연습 삼아 돌리면 아마 멈출 겁니다. ㅎㅎ

 

잘못된 내용이나 수정이 필요하면 댓글 주세요.

아래 하트(공감) 버튼을 눌러서 더 다양한 글을 쓸 수 있게 응원 부탁드립니다. 감사합니다.

반응형
반응형

안녕하세요. 신기한 연구소입니다.

SQL 개발을 하면서 빠질 수 없는 것이  바로 조인(JOIN)입니다.

그럼 조인(JOIN)이 뭘까요?

몇 번의 프로젝트와 개발을 많이 했다면 당연히 알겠지만

처음 데이터베이스를 공부하거나 처음 프로젝트에 투입되어 SQL을 접한

왕초보 신입 개발자라면 정확한 이해와 사용법을 알면 좋습니다.

 

 

이번 포스팅은 가장 자주 사용하고 일반적인 INNER JOIN에 대해 알아봅니다.

 

그전에 테이블을 구성할 때 중요한 점이 있는데 먼저 살펴봅니다.

컬럼이 키가 아닌데 그 컬럼에 종속되는 컬럼이 있으면 분리를 해야 합니다.

무슨 말이냐면..

사원 테이블이면 사원에 대한 정보가 들어갑니다.

그렇다면 키는 사번이 되겠지요?

그리고 사원이름, 입사일, 직급, 소속 부서 등의 정보를 한 테이블에 기록하게 됩니다.

이런 경우 소속 부서 코드, 소속 부서명을 사원 테이블에 넣게 된다면

제3정규화에 위반이 됩니다.

 

 

사원 테이블의 키는 사번인데

키가 아닌 소속 부서 코드에 소속 부서명이 종속되어 있기 때문입니다.

그래서 이런 경우는 부서 테이블을 따로 만들어서

부서 코드, 부서명 등으로 테이블을 별도로 구성하게 됩니다.

그 이유는 간단하게 설명하면

부서 테이블이 없다면

부서 정보가 들어가는 다양한 테이블에서

부서 코드와 부서명을 같이 기록하게 되는 경우

부서명이 살짝 변경된다면 해당 테이블들을 모두 찾아서 명칭을 UPDATE 해야 하는

엄청난 일이 터집니다.

그렇게 되는 경우 데이터의 정합성에 문제가 발생도 하고요.

그래서 부서 테이블을 별도로 구성하고 키값만 사용한다면

부서명을 살짝 변경한다고 했을 경우 굳이 부서 관련 모든 테이블들을 수정할 필요가 없이

부서 테이블의 부서명만 수정하면 됩니다.

 

 

그럼 어떻게 부서 테이블을 수정하는데 전체 적용이 될까요?

바로 조인(JOIN)을 사용하는 이유라고 할 수 있겠네요.

 

예를 들어 인사 담당자가 화면에서 사원 정보를 조회한다고 가정합니다.

사원명, 직급, 입사일, 소속 부서명을 화면에 표출한다면

사원 테이블에 소속 부서명이 없기에 부서 테이블에서 부서명을 가져와야 합니다.

 

두 개의 테이블을 연결해서 가져와야 하는데 바로 조인을 활용하면 됩니다.

그럼 어떻게 서로 연결을 할까요? 그 연결고리를 찾아야 합니다.

사원 테이블과 부서 테이블은 부서 코드를 공통으로 가지고 있습니다.

또한 부서 코드는 부서 테이블의 PK입니다.

그렇다면 사원 테이블의 부서코드는 FK가 되겠습니다.

그럼 사원 테이블에서 부서 코드를 가지고 부서 테이블에서 검색을 하면 PK이므로 하나의 값을 얻을 수 있습니다.

 

이제 조인할 준비가 되었습니다.

 

그럼 SQL에서는 어떻게 조인을 하는지 방법을 살펴보겠습니다.

가장 흔하게 사용하는 방법~

 

SELECT 문에서 해당 ‘테이블. 칼럼’으로 원하는 데이터를 정렬합니다.

FROM 절에서 사원 테이블과 부서 테이블을 콤마(,)로 정렬합니다.

WHERE 절에서는 두 테이블 간의 연결고리를 ‘=’ 연산자로 연결합니다.

이 부분을 조인이라고 합니다.

 

결과를 보면 기본 정보는 EMP에서 가져오고 부서명은 DEPT에서 가져옵니다.

성공했습니다.

 

같은 결과이지만 다른 방법으로 SQL문을 만들 수 있습니다.

개발자들의 성향이 다르기에 꼭 위 SQL처럼 조인을 하지는 않습니다.

다양한 방식을 더 살펴봅니다.

 

 

이번 쿼리는 테이블에 별칭 A, B를 붙였습니다.

처음 쿼리는 테이블 명을 사용했지만 실전에서는 쿼리가 엄청 길고 복잡해서

테이블 명을 사용 시 가독성이 떨어지기도 해서

A, B 또는 테이블 약어 등으로 사용하는 경우가 많습니다.

하지만 테이블 명으로 사용하면 식별이 더 쉬워서 서로 장단점은 있답니다.

 

 

조인(JOIN) 조건은 앞서 설명한 쿼리처럼 WHERE절에

연결 정보인 A.DEPTNO = B.DEPTNO를 사용했는데

이번 쿼리는 FROM절에서 ON을 사용했습니다.

INNER JOIN과 JOIN을 사용할 때는 연결 정보를 FROM절에 ON을 사용합니다.

그 외 조건을 사용하고 싶다면 ON에서 AND를 사용하면서 추가하면 되고

또는 WHERE 절을 사용해도 됩니다.

 

ON 외에도 FROM절에서 JOIN을 명시했다면

USING을 사용할 수 USING을 사용할 수 있습니다.

사용법은 ON과는 다릅니다.

FROM 절에 USING를 사용하면서 조인하는 양쪽 테이블의 연결 정보를

( ) 안에 적어주면 됩니다.

또 다른 점은 추가 조건이 필요하면 WHERE 절을 사용해야 합니다.

 

 

세 개 이상의 테이블을 조인하는 경우 ON과 USING을 사용할 수 있지만

복잡해 보일 수 있기에 첫 번째 방법인 테이블 간 콤마를 사용하는 방법을

애용합니다.

 

 

위 쿼리처럼 첫 번째와 두 번째 테이블 조인 후 조인 조건 명시 후

다시 세 번째 테이블을 조인하는 방식입니다.

ON과 USING를 각각 또는 섞어서 사용해도 무방합니다.

 

 

실전에서는 위 쿼리를 많이 사용합니다. ㅎㅎ

결과는 모두 동일하게 아래와 같이 나옵니다.

 

 

지금까지 기본적으로 사용되는 조인인 INNER JOIN에 대해 살펴봤습니다.

이 조인은 두 개의 테이블에 PK와 FK의 관계가 있거나

없더라도 서로 연결할 수 있는 유일한 코드가 있으면 사용할 수 있습니다.

 

잘못된 내용이나 수정이 필요하면 댓글 주세요.

아래 하트(공감) 버튼을 눌러서 더 다양한 글을 쓸 수 있게 응원 부탁드립니다. 감사합니다.

 

반응형