-
1. JOIN _ CROSS JOIN, SELF JOIN, EQUI JOINSQL/sql 문법(mysql, mariaDB) 2024. 5. 4. 09:12
▤ 목차
한 개 이상의 테이블 들을 연결 또는 결합하여 데이터를 출력하는 방법이다.
JOIN은 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이라고 할 수 있다.
일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 JOIN이 성립된다.
2개의 테이블이 존재할 때, 공통된 열을 통해 2개의 테이블을 합치는 것을 말한다.
JOIN의 종류
- CROSS JOIN
- SELF JOIN
- EQUI JOIN
- INNER JOIN
- OUTER JOIN
✔ cross join
두 개의 테이블 사이에 모든 가능한 조합을 만들어낸다.
💻 코드로 보기
SELECT jikwon_name, buser_name FROM jikwon,buser; SELECT jikwon_name, buser_name FROM jikwon cross join buser;
👏 정리
위의 쿼리와 아래쪽 쿼리가 같은 쿼리문이다.
아래는 명시적으로 적어준 것이다.
카테시안 곱이 발생한다.
A 테이블의 행이 10개이고 B 테이블의 행이 10개라면
A 테이블 cross join B 테이블의 결과는 100개의 행이 나올 것이다.
많은 데이터를 생성하기 때문에 다른 조인 유형을 선호한다.
✔self join
스스로 JOIN이 될 수 있다. SELF JOIN은 CROSS JOIN 중 하나이다.
JOIN을 말할때 한 개 이상의 테이블이 존재하면 JOIN이 가능하다고 했다.
같은 테이블이 조인될 수 있기 때문이다.
셀프 조인은 테이블의 이름을 꼭 지정해줘야 한다. (별칭을 사용할 수 있다.)
똑같은 데이터가 있는 테이블이 2개이기에 SQL은 어떤 데이터를 가져와야 하는지 인식하지 못하기 때문이다.
💻 코드로 보기
SELECT a.jikwon_name, b.jikwon_name FROM jikwon a INNER JOIN jikwon b;
🔸똑같은 테이블 조인?
데이터를 가지고 있는데 왜 자신의 테이블을 JOIN하는 것일까?
그 이유는 원본 테이블이 있고 그 테이블의 데이터를 복사해서 생성할 수 있기 때문이다.
자신과 같은 테이블의 일정 부분을 가공해서 원래 테이블에 합쳐 구성을 할 수 있기 때문이다.
✔ EQUI join
join 조건식에 ' = ' 연산자를 사용한다.
💻 코드로 보기
SELECT jikwon_name, buser_name FROM jikwon, buser WHERE jikwon.buser_num = buser.buser_no;
👏
✔ Non-Equi join
Join은 JOIN조건을 = 연산자 이외의 비교(관계) 연산자를 사용하는 것을 말한다.
해당 연산을 보기 위해서는 테이블을 하나 더 생성해야 한다.
CREATE TABLE paygrade(grade INt PRIMARY KEY, lpay INT, hpay INT); INSERT INTO paygrade VALUES (1, 0,1999); INSERT INTO paygrade VALUES (2, 2000,2999); INSERT INTO paygrade VALUES (3, 3000,3999); INSERT INTO paygrade VALUES (4, 4000,4999); INSERT INTO paygrade VALUES (5, 5000,9999); SELECT * FROM paygrade;
💻 사용하기
SELECT jiktab.jikwon_name,jiktab.jikwon_pay,paytab.grade FROM jikwon as jiktab, paygrade as paytab WHERE jiktab.jikwon_pay >= paytab.lpay AND jiktab.jikwon_pay<= paytab.hpay;
👏 정리
= 이외의 비교 연산자 (Between, >, >=, <, <= 등)를 사용한다.
😊정리
SELF JOIN의 사용은 한 행에 있는 값을 같은 행에 있는 다른 값과 비교해야 할 때 사용한다.[SQL을 굉장히 잘 정리해 놓은 블로그이다. 참고하기 좋다.]
SELF JOIN (下) : 셀프 조인의 용례
이전 글인 SELF JOIN (上) : 같은 테이블을 조인하기 에서는 셀프 조인의 기본적인 개념에 관해 살펴보았습니다. 셀프 조인은 같은 테이블 내의 데이터를 조인합니다. 즉, 하나의 테이블이 자기 자
kimsyoung.tistory.com
두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에는 EQUI JOIN을 사용할 수 없다.
EQUI JOIN보다 더 많이 사용하는 INNER JOIN이 있다.
왜 EQUI JOIN보다 더 많이 사용하는가?
INNER JOIN으로 이루어진 코드는 EQUI JOIN보다 가독성이 더 높으며
OUTER JOIN으로 수정이 가능하다.
다음에는 INNER JOIN과 OUTER JOIN를 정리해 보겠다.
'SQL > sql 문법(mysql, mariaDB)' 카테고리의 다른 글
mariaDB) 내장 함수 정리 (0) 2024.05.07 2.JOIN _ inner, outer (+ on과 where의 차이) (0) 2024.05.06 그룹 함수 : GROUP BY 와 HAVING + 복수행 함수(집계함수) (0) 2024.05.03 UNION 코드로 알아보기 (0) 2024.05.02 SELECT (4) 2024.05.01