728x90
반응형
SMALL

안녕하세요, 혼자 공부하는 SQL을 보고 학습한 자료를 남깁니다.

조인

두 개의 테이블을 통해서 새로운 정보를 추출하는 것.

내부 조인

내부 조인은 가장 많이 사용된다.

일반적으로 조인은 내부조인을 이야기 한다.

일대다 관계의 이해

회원 테이블과 구매 테이블은 1:N 관계로 이루어져 있다.

member 테이블의 아이디는 PK이다. 

1이라고 표현을 하는 이유가 아이디는 하나밖에 없기 때문에 1이라고 표현을 한다.

회원이 구매를 할 때 

구매 테이블에 아이디를 기록을 한다.

만일 member 테이블의 아이디를 구매 테이블의 PK로 지정을 하면 회원은 한 번밖에 구매를 못한다.

그래서 구매 테이블의 member 아이디는 FK로 잡힌 것이다.

그래서 일대다 관계를 'PK-FK 관계'라고도 부릅니다. 현실에서 굉장히 많이 쓰이는 관계이다.

예를 들어, 직원과 급여 테이블을 들면 직원은 여러번 급여를 받는다.

예를 들어, 학생과 수강신청 테이블을 들면 학생은 여러번 수강신청을 한다.

SELECT <열 목록>

FROM <첫 번째 테이블>

    INNER JOIN <두 번째 테이블>

    ON <조인될 조건>

[WHERE 검색 조건]

조인을 하기 위해 데이터베이스 구성도 표를 보면서 진행하겠습니다.

mem_id = 'GRL' 인 회원의 정보와 구매 내역을 합쳐서 결과를 조회한 것이다.

만일, 회원이 없다면 NULL이 나올 것이고, 구매 내역이 없다면 또한 NULL이 나올 것이다.

다음 예제는 오류가 발생했다.

왜냐하면 mem_id가 회원 테이블에도 있고, 구매 테이블에도 있다.

그래서 *를 사용을 안 하고, 조회할 컬럼을 명시한다면 어떤 테이블의 컬럼인지를 명시해야 한다. -> member.mem_id

수정을 하면 이렇게 잘 실행되는 것을 볼 수 있다.

연락처의 경우 CONCAT()함수로 전부 다 이어서 처리를 했다.

컬럼명 앞에 테이블의 이름을 다 적어주는 것이 좋다.

하지만 이렇게 하면 코드가 너무 길어진다.

뒤에 별명을 주어서 해결이 가능하다.

조인의 결과가 중복되는 경우가 DISTINCT로 처리가 가능하다.

DISTINCT를 통해서 member 테이블의 아이디를 중복을 제거하고 하나씩만 출력을 할 수 있다.

 

외부 조인

내부 조인은 조인할 수 있는 정보만 결과로 조회가 된다.

하지만 외부 조인의 경우 기준이 되는 테이블은 조인이 되지 않더라도 NULL로 채워져서 전부 다 조회가 된다.

LEFT/RIGHT/FULL 모두 다 같은 의미이다.

잇지는 구매한 적이 없다.

그런데도 왼쪽에 있는 (기준이 되는 테이블)은 전부 다 조회가 된다.

RIGHT OUTTER JOIN으로 테이블의 위치만 서로 바꾸어서 조인을 했다.

결과는 LEFT OUTTER JOIN과 동일하다.

WHERE 절에 B.prod_name IS NULL 을 통해서 기준이 되는 테이블인 회원에 구매 내역이 없는 데이터들을 조회할 수가 있다.

구매 내역이 없는 회원들을 조회한 결과이다.

기타조인

상호조인

조인이라고 표현하기는 애매하다.

각 행별로 모든 테이블을 조인한다.

이를 CROSS JOIN(상호조인)이라고 한다.

대용량의 데이터를 만들 때 자주 사용된다.

CROSS JOIN은 ON 절이 없다.

각각의 테이블이 서로 전부 다 조인이 된다.

서로 곱한 결과 만큼 출력이 된다.

만약에 10억 건의 데이터를 만들고 싶다면 INSERT는 어렵다.

하지만 두개의 테이블을 CROSS JOIN 하면 굉장히 편리하다. 

엄청나게 많은 데이터를 생성할 수 있다.

이렇게 1,800만 데이터 건을 생성할 수 있다.

Output 결과 창에 노란색 느낌표 세모 창이 뜨긴 하지만 

총 데이터를 47,800 건의 데이터를 담은 테이블이 만들어졌다.

테스트 결과 데이터들이 정상적으로 조회가 되는 것을 확인할 수 있다.

  자체 조인 (SELF JOIN)

자체 조인(SELF JOIN)은 자주 사용 되지는 않지만, 직원과 직속 상관을 예로 들 수 있다.

경리 부장의 직속 상관인 관리 이사의 사내 연락처를 알아내려면 

테이블이 스스로 테이블을 조인해야 값을 알아낼 수 있다.

쉽게 하는 방법은 똑같은 테이블을 복사해서 옆에 두고

두 테이블을 조인한다 이렇게 생각해도 상관 없다.

같은 테이블을 조인하기 때문에 별칭을 주어서 구분해서 테이블을 조인한다.

다음과 같이 데이터를 조인해서 직원과 그에 대한 직속 상관에 대한 정보를 조인해서 결과를 얻어낸 것을 볼 수 있다.

기존 셀프조인에 사용했던 emp_table 테이블의 전체 조회 결과이다.

총 9건이 조회가 되었다.

셀프 조인시 기존의 연락처를 덮어쓰고, 조인된 결과만 반환을 하므로, 8건의 결과가 조회된 것을 볼 수 있다.

 

감사합니다.

https://www.youtube.com/watch?v=tuQFkzjqEGw&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=12

 

728x90
반응형
LIST

+ Recent posts