6장 join문
6-1.full join
join 문중에서 가장 간단한 join문이라는 특징이 있으며 full join은 다음과 같이 설명할 수 있습니다.
>select * from tableA, tableB;
일반적인 join문은 양쪽 테이블의 레코드 갯수를 곱한 수만큼 검색을 하기 때문에 join을 사용할 때에는 주의해서 사용해야 합니다. 자칫 잘못걸린 join문은 검색속도를 저하시키고 전반적인 시스템의 성능저하를 유발시킬 수 있기 때문입니다.
다음의 예제는 full join의 형식과 일치하며 모두 같은 값을 출력합니다.
>select * from tableA, tableB;
>select * from tableA join tableB;
>select * from tableA cross join tableB;
6-2. straight_join
이 join문은 칼럼의 순서를 from절에 나오는 테이블의 순서대로 출력하는 join 입니다. 경우에 따라 MySQL은 속도를 빠르게 하기 위해 나름대로 내부적으로 from절에 나온 테이블의 순서를 바꾸는 경우가 있습니다. 이때 칼럼의 순서를 from 절에 나오는 순서대로 바꾸기 위해 straight_join을 사용하면 되니다.
6-3 theta join
full join문에 where 를 걸게 되면 theta join입니다.
>select * from tableA, tableB where
->tableA.b=tableB.b;
6-4. inner join
>select * from tableA INNER JOIN tableB USING(b);
또는
>select * from tableA INNER JOIN tableB ON
->tableA.b=tableB.b;
where절 대신에 ON을 사용하여 비교하고자 하는 컬럼을
직접 지정해 주는 방식. USING는 지정된 공통컬럼명을
ON으로 지정한것과 동일한 효과를 가짐.
6-5. NATURAL JOIN
두개의 테이블에 같은 이름을 가진 컬럼들이 있고
그 컬럼들을 기준으로 join을 하려 한다면 natural join을
사용합니다.
>select * from tableA natural join tableB;
추가 예제)
join문을 사용할 때 select 되는 컬럼의 지정방법
select tableA.x, tableB.x from tableA, tableB;
같은 결과 alias를 사용한 방법
select a.x, b.x from tableA as a, tableB as b;
6-6. left outer join
tableA와 tableB 를 join하여 검색할때 where 절의
tableA.b=tableB.b라고 검색하면 두 테이블의 b컬럼에
일치하는 data만을 불러 오지만 만약 tableB.b의 값이
tableA.b에 존재하지 않는 값을 가지고 있는 레코드까지
가져와야 할 경우 사용.
>select * from tableA left outer join tableB using(b);
ex)
>select * from grade left outer join study_report
->using(student_name);
6-7. right outer join
left outer join과는 반대의 개념으로
tableA와 tableB을 join하여 검색할 경우 tableB
기준으로 tableA에 값이 존재 하지 않는 것을
가져와야 할 경우 사용
※ 참고
outer 는 명시적 옵션이므로 생략가능
'Other > DB' 카테고리의 다른 글
MySQL - auto_increment 1부터 시작 (0) | 2012.05.15 |
---|---|
MySQL - innoDB & auto_increment 적용시키기(alter) (0) | 2012.05.08 |
에러) Several ports (8080) required by Tomcat v6.0 Server at localhost are already in use. (0) | 2012.03.06 |
JOIN함수 (0) | 2012.02.28 |
서브쿼리 (0) | 2012.02.28 |