안녕하세요, 혼자 공부하는 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
'SQLD' 카테고리의 다른 글
[혼자 공부하는 SQL] GUI 환경에서 테이블 생성하기, SQL로 테이블 만들기 (0) | 2024.10.26 |
---|---|
[혼자 공부하는 SQL] SQL 프로그래밍 (IF문, CASE문, WHILE문, 동적 SQL) (0) | 2024.10.25 |
[혼자 공부하는 SQL] MySQL의 데이터 형식 (정수형, 문자형, 실수형, 날짜형)과 형 변환 (0) | 2024.10.25 |
[혼자 공부하는 SQL] 데이터 변경을 위한 SQL문 (INSERT, UPDATE, DELETE) (1) | 2024.10.25 |
[혼자 공부하는 SQL] SQL SELECT 절의 형식 (ORDER BY 절과 GROUP BY 절) (0) | 2024.10.25 |