출처: http://warmz.tistory.com/276
JOIN (조인) 연산자
- 두개 이상의 테이블을 연결하여 데이터를 검색할때 사용한다.
- 데이터베이스 시스템과 그 환경의 성능을 확인하는데도 사용할 수 있다. (느린 쿼리를 사용하여 비교)
- 조인에는 여러가지 종류가 있다.
조인 종류 | 설명 |
내부조인(INNER JOIN) | 조건을 사용해서 두 테이블의 레코드를 결합한다. |
외부조인(OUTER JOIN) | 내부조인과 비슷한데 일치하지 않는 열까지 반환하며 그 열은 NULL로 반환한다. |
동등 조인(EQUI JOIN) | 내부조인이다. 두 테이블 사이의 같은 행들을 반환한다. |
비동등 조인(NON-EQUI JOIN) | 내부조인이다. 두 테이블 사이의 같지 않은 행들을 반환한다. |
자연 조인(NATURAL JOIN) | 'ON' 절이 없는 내부조인. 같은 열 이름을 가진 두 테이블을 조인할때만 작동 |
크로스 조인(CROSS JOIN) | 한 테이블의 모든 행과 다른 테이블의 모든 행이 연결되는 모든 경우를 반환. |
카티젼 조인(CARTESIAN JOIN) | 크로스 조인의 한 종류. 조건이 없다. (크로스 프로덕트) |
콤마 조인(COMMA JOIN) | 콤마가 CROSS JOIN 키워드 대신 사용된다는 점을 제외하면 크로스 조인과 같다. |
셀프 조인(SELF JOIN) | 자기 자신을 조인한다. |
1. 내부 조인(INNER JOIN)
- 조건을 사용하여 두 테이블의 레코드를 결합한다.
- 동등 조인, 비동등 조인, 자연 조인 등이 있다.
1
2
3
4 |
Select somecolumns From table1 -- 반환되는 열 Inner Join table2 ON somecondition; -- ON 또는 WHERE 조건절 |
1) 동등 조인(EQUI JOIN)
- 두 테이블 사이의 같은 행들을 반환한다.
예) 각 boy가 어떤 toy를 가지고 있는지 조사한다. (매핑 확인)
1
2
3 |
Select boys.boy, toys.toy From boys INNER JOIN toys ON boys.toy_id = toys.toy_id; |
2) 비동등 조인(NON-EQUI JOIN)
-두 테이블 사이의 같지 않은 모든 행들을 반환한다.
예)
1
2
3
4 |
Select boys.boy, toys.toy From boys INNER JOIN toys ON boys.toy_id <> toys.toy_id -- <> : 같지 않음 ORDER BY boys.boy; -- 정렬 |
3) 자연 조인(NATURAL JOIN)
- 두 테이블에 같은 이름의 열이 있을때만 동작한다.
- ON이 필요없다.
예)
1
2 |
Select boys.boy, toys.toy From boys NATURAL JOIN toys; |
2. 외부 조인(OUTER JOIN)
- 내부 조인과 유사하며 일치하는 것이 없을 경우 NULL로 표시한다.
- 왼쪽 테이블은 FROM 바로 다음에 나오는 테이블이고, JOIN 뒤에 나오는 테이블이 오른쪽 테이블이다.
- 왼쪽 외부 조인(LEFT OUTER JOIN)과 오른쪽 외부 조인(RIGHT OUTER JOIN)이 있다.
- 왼쪽 외부 조인을 사용할 경우 왼쪽 테이블을 오른쪽 테이블에 비교한다. 오른쪽 외부 조인도 그 반대로 동작한다. 일대다 관계에 유용하다.
유용한 예) girls가 어느 toys를 가지고 있는지 알아보도록 쿼리를 작성한다.
i) 왼쪽 테이블을 오른쪽 테이블에 비교하는 방법
1
2
3 |
Select g.girl, t.toy From girls g Left Outer Join toys t ON g.toy_id = t.toy_id; |
ii) 반대로 했을때
1
2
3 |
Select g.girl, t.toy From toys t Left Outer Join girls g ON g.toy_id = t.toy_id; |
3. 크로스 조인(CROSS JOIN)
- 한 테이블의 모든 행과 다른 테이블의 모든 행을 짝지워 반환한다.
- 카티전 조인, 카티전 프로덕트 등이 있다.
예)
1
2 |
Select t.toy, b.boy From toys AS t CROSS JOIN boys AS b; |
4. 셀프 조인(SELF JOIN)
- 자기 자신을 조인한다.
- 자기 자신을 하나씩 비교하기 위해 사용한다.
- 하나의 테이블로 같은 정보를 가진 테이블이 두 개 있는 것처럼 쿼리를 보낼 수 있다.
예) 각 사람의 이름(name)과 그 사람을 담당하는 보스(boss)의 이름을 가져온다.
1
2
3
4 |
Select c1. name , c2. name AS boss From clown_info c1 Inner Join clown_info c2 ON c1.boss_id = c2.id; |
'프로젝트 관련 조사 > DB' 카테고리의 다른 글
[버클리] 우분투에 버클리 DB 설치 (0) | 2015.12.03 |
---|---|
[MySQL]Updatable Join View (0) | 2015.12.03 |
[MySQL] 다른 데이터베이스의 테이블 복사하기 (0) | 2015.12.03 |
[MySQL] 최근 데이터 가져 오는 구문 (0) | 2015.12.01 |
[MySQL] 버젼 확인 (0) | 2015.12.01 |