본문 바로가기

IT개념/데이터베이스

[MYSQL] JOIN 사용하기

728x90

개인적으로 서브쿼리가 직관적이고 이해하긴 쉬운거 같은데 성능의 문제로 조인쿼리를 사용을 권장한다고 한다. 사용하게된 김에 다시 공부해보자.

이론

INNERJOIN : 양 테이블 서로 겹치는 값만 검색한다. (교집합)

--문법--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
INNER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키....

--예제--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A
INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT

 

LEFT(RIGHT) OUTER JOIN : 왼쪽 테이블은 전부다 보여주고 오른쪽은 겹치는 것만 검색한다.

--문법--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
LEFT OUTER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 .....

--예제--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A
LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT

 

FULL OUTER JOIN : 양 테이블 전부 다 보여준다.

--문법--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
FULL OUTER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 .....

--예제--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A
FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT

 

SELF JOIN : 자기 자신을 조인한다. (자신의 데이터를 참조하여 사용할 경우 활용)

--문법--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 테이블 별칭,테이블 별칭2

--예제--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A,EX_TABLE B

출처: https://coding-factory.tistory.com/87


예제

plan테이블을 부모로 하는 schedule테이블이 있다.

여기서 특정 plan을 조회할 시 plan에 대한 정보와 planNo가 일치하는 schedule의 목록을 출력하고자 한다.

다시말하면 특정 planNo에 대한 plan과 schedule의 모든 데이터를 보고싶다.

이 때 기준 테이블과 필드가 plan과 plan.planNo가 되고 참조하는 테이블이 schedule이 되므로

plan을 기준으로한 JOIN을 사용하면 원하는 목록을 출력받을 수 있을 것 같다.

 

 

SELECT * FROM plan WHERE planNo = 9;

 

위는 9번계획이며 위 행을 참조하는 schedule을 뽑고싶다.

 

 

SELECT * FROM schedule WHERE planNo = 9;

계획 9번에 대한 schedule 데이터이다.

 

 

SELECT * 
FROM plan JOIN schedule 
ON plan.planNo = schedule.planNo AND plan.planNo=9;

JOIN문을 통해 원하는 데이터를 출력했다.

이 쿼리문을 이용하여 개인 일정 열람 게시판을 만들 수 있을 것이다.