(MySQL) 테이블 조인
<조인의 종류>
1. INNER JOIN
-->INNER JOIN은 어느 테이블을 먼저 읽어도 결과가 달라지지 않으므로 MySQL 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행 할 수있다.
네스티드-루프 방식만 지원한다. 네스티드-루프란 일반적으로 프로그램을 작성할 때 두 개의 FOR나 WHILE과 같은 루프 문장을 실행하는 형태로 조인이 처리되는 것이다.
FOR(recor1 IN TABLE1) //외부루프(OUTER)
{
FOR(record2 IN TABLE2) //내부 루프(INNER)
{
IF(record1.join_column==record2.join_column)
{
join_record_found(record1.*,record2.*);
} else{
join_record_notfount();
}
}
}
2. OUTER JOIN
--->하지만 OUTER JOIN은 반드시 OUT가 되는 테이블을 먼저 읽어야 하기 떄문에 조인순순서를 옵티마이저 선택 할 수 없다.
FOR(recor1 IN TABLE1) //외부루프(OUTER)
{
FOR(record2 IN TABLE2) //내부 루프(INNER)
{
IF(record1.join_column==record2.join_column)
{
join_record_found(record1.*,record2.*);
} else{
join_record_notfount(record1.*,NULL);
}
}
}
위 코드는 TABLE2에 일치하는 레코드가 있으면 INNER조인과 같은 결과를 만들어 내지만,
TABLE2(INNER 테이블) 에 조건을 만족하는 레코드가 없으면 TABLE2의 칼럼을 모두 NULL로 채워서 가져온다. 즉, INNERJOIN에서는 일치하는 레코드를 찾지못했을 때 TABLE1의 결과를 모두 버리지만 OUTER JOIN에서는 TABLE1의 결과를 버리지 않고 그대로 결과에 포함한다.
OUTERJOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN 그리고 FULL OUTER JOIN으로 다시 나뉜다.
SELECT *
FROM employees e
LEFT OUTER JOIN salaries s ON s.emp_no=e.emp_no;
SELECT *
FROM salaries s
RIGHT OUTER JOIN employees e ON e.emp_no=s.emp_no;
1. INNER JOIN
-->INNER JOIN은 어느 테이블을 먼저 읽어도 결과가 달라지지 않으므로 MySQL 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행 할 수있다.
네스티드-루프 방식만 지원한다. 네스티드-루프란 일반적으로 프로그램을 작성할 때 두 개의 FOR나 WHILE과 같은 루프 문장을 실행하는 형태로 조인이 처리되는 것이다.
FOR(recor1 IN TABLE1) //외부루프(OUTER)
{
FOR(record2 IN TABLE2) //내부 루프(INNER)
{
IF(record1.join_column==record2.join_column)
{
join_record_found(record1.*,record2.*);
} else{
join_record_notfount();
}
}
}
2. OUTER JOIN
--->하지만 OUTER JOIN은 반드시 OUT가 되는 테이블을 먼저 읽어야 하기 떄문에 조인순순서를 옵티마이저 선택 할 수 없다.
FOR(recor1 IN TABLE1) //외부루프(OUTER)
{
FOR(record2 IN TABLE2) //내부 루프(INNER)
{
IF(record1.join_column==record2.join_column)
{
join_record_found(record1.*,record2.*);
} else{
join_record_notfount(record1.*,NULL);
}
}
}
위 코드는 TABLE2에 일치하는 레코드가 있으면 INNER조인과 같은 결과를 만들어 내지만,
TABLE2(INNER 테이블) 에 조건을 만족하는 레코드가 없으면 TABLE2의 칼럼을 모두 NULL로 채워서 가져온다. 즉, INNERJOIN에서는 일치하는 레코드를 찾지못했을 때 TABLE1의 결과를 모두 버리지만 OUTER JOIN에서는 TABLE1의 결과를 버리지 않고 그대로 결과에 포함한다.
OUTERJOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN 그리고 FULL OUTER JOIN으로 다시 나뉜다.
SELECT *
FROM employees e
LEFT OUTER JOIN salaries s ON s.emp_no=e.emp_no;
SELECT *
FROM salaries s
RIGHT OUTER JOIN employees e ON e.emp_no=s.emp_no;
댓글
댓글 쓰기