크로스 조인(Cross Join)과 셀프 조인(Self Join)은 데이터베이스에서 두 개 이상의 테이블을 사용하여 데이터를 결합하는 데 사용되는 방법이다.
[ 크로스 조인(Cross Join) ]
: 두개 이상의 테이블에서 모든 가능한 조합을 만드는 것.
-> 조인 시 조인 조건을 명시하지 않으면 CROSS JOIN 상태가 된다. : 잘못된 조인!
예를 들어, "고객 테이블" 과 "주문 테이블"이 있다고 가정하였을 때 CROSS JOIN을 사용하여 "고객 테이블"의 각 행과 "주문 테이블"의
각 행을 결합할 수 있다.어떠한 모든 가능한 조합을 만들 수 있기 때문이다.
하지만 CROSS JOIN의 경우, 일반적으로 과도하게 많은 행을 생성할 수 있기 때문에 사용전에는 신중히, 주의해야 할 필요가 있다.
--CrossJoin
--조인조건을 명시하지 않으면 의미없는 데이터가 조회된다.
SELECT A.ENO
, A.ENAME
, A.DNO
, B.DNAME
FROM EMP A
, DEPT B;
[ 셀프 조인 (SELF JOIN) ]
: 하나의 테이블에서 자신과 결합하는 것
-> FROM절과 테이블이 조인되는 테이블이 같을 경우 셀프 조인이라고 하며, 조인되는 테이블에 무조건 별칭을 정해줘야만 한다!
셀프 조인(Self Join)을 사용하면, 하나의 테이블에서 두 개 이상의 열을 연결하여 새로운 결과를 생성할 수 있다.
예를 들어, "직원 테이블"에서 상사 ID와 직원 ID를 연결하여 직원의 상사 이름을 가져올 수 있다. 이를 위해, 직원 테이블을 두 번 사용하여 상사와 직원을 각각 다른 열에 매핑하고, 그들의 이름을 결합할 수 있는 것이다.
--셀프조인
--FROM절의 테이블과 조인되는 테이블이 같을 때
--사원의 사수의 이름 조회
SELECT A.ENO
, A.ENAME
, A.MGR
, B.ENO
, B.ENAME
FROM EMP A
JOIN EMP B
ON A.MGR = B.ENO;
크로스 조인(Cross Join)과 셀프 조인(Self Join)은 각각의 고유한 상황에서 사용되며, 두 조인 모두 데이터베이스에서 유용하게 사용될 수 있다. 이는 데이터베이스 설계 및 쿼리 작성 시에 고려해야 할 중요한 고려사항이다.
[ 내츄럴 조인 (NATURAL JOIN) ]
: 두 개 이상의 테이블에서 공통적으로 가지고 있는 열(column)을 기준으로 조인하는 방법
-> NATURAL JOIN은 두 테이블의 동일한 이름을 가지는 칼럼이 모두 조인된다.
내츄럴 조인은 일반적으로 내부조인(Inner Join)의 일종으로 분류되며 등가조인의 한 종류이다.
- 등가 조인: 조인 조건에서 공통된 컬럼의 값이 같은(=) 조건에 해당하는 조인
- 비등가 조인: 조인 조건에서 값의 의미가 동일한 데이터들의 대소 비교를 해주는 형식의 조인(>, <, <=, >=)
공통 열을 기준으로 두 테이블을 조인한다. 내츄럴 조인은 공통 열을 자동으로 인식하여 조인하기 때문에 간편하고 빠르게 조인이 가능하다.
--NATURAL JOIN에서는 조인되는 컬럼에 테이블의 별칭을 달아서 사용할 수 없다.
SELECT SNO
, st.SNAME
, AVG(sc.RESULT)
FROM SCORE sc
NATURAL JOIN STUDENT st
GROUP BY SNO, SNAME;
--학생별 기말고사 성적의 평균이 55점이상인 학생번호, 학생이름, 기말고사 평균 조회(NATURAL JOIN)
SELECT SNO
, st.SNAME
, AVG(sc.RESULT)
FROM SCORE sc
NATURAL JOIN STUDENT st
GROUP BY SNO, SNAME
HAVING AVG(sc.RESULT) >= 55;
여기서 주의할 점은 공통된 열의 이름이 다르거나 데이터 타입이 다른 경우에는 조인이 제대로 이루어지지 않을 수 있다. 반드시 조인하려는 열의 이름을 변경 또는 데이터 타입을 일치시켜야 한다.
또한, 일반적으로 다른 조인 방법 보다 느릴 수 있다. 이는 공통 열의 크기가 크거나 조인에 사용되는 인덱스가 부족한 경우 더욱이 느려질 수 있기 때문에 대규모 데이터베이스에서는 성능문제를 고려하면서 사용할 필요가 있다.
'IT Programming > Oracle' 카테고리의 다른 글
[Oracle] SQL 지정한 컬럼을 기준으로 정렬해주는 ODERE BY (0) | 2023.04.20 |
---|---|
[Oracle] SQL 집합 연산자와 SELECT 구문 / 절 zip. (WHERE, IN, AND, OR, BETWEEN-AND) (0) | 2023.04.19 |
[Oracle] 쿼리의 조인 VOL.3) Multiple Join 다중 테이블 조인? (0) | 2023.04.19 |
[Oracle] 쿼리의 조인 VOL.1) INNER JOIN , OUTER JOIN (0) | 2023.04.19 |
[Oracle] 오라클 SQL 시작하기 , 쿼리란? (조회,서브쿼리) (0) | 2023.04.18 |
댓글