티스토리 뷰
참고 : http://kch1183.blog.me/50100320620
INNER JOIN
SELECT a.a, a.b, b.c FROM a INNER JOIN b WHERE a.a=b.a;
두개의 테이블을 비교해서 같은 데이터만 불러들이는 교집합
예를 들어
A (1,2,3,4,5)
B (1,2,5)
두개의 테이블을 INNER JOIN 을 하면 1,2,5 의 정보만 불러진다.
OUTER JOIN
LEFT OUTER JOIN
SELECT a.a, a.b, b.c FROM a LEFT OUTER JOIN b ON a.a=b.a (오른쪽 조건) WHERE 1=1 (왼쪽 조건);
왼쪽 테이블을 기준으로 두개의 테이브을 비교하여 왼쪽의 데이터가 오른쪽 테이블에는 없으면 NULL로 표시됩니다.
RIGHT OUTER JOIN
SELECT a.a, a.b, b.c FROM a RIGHT OUTER JOIN b ON a.a=b.a (오른쪽 조건) WHERE 1=1 (왼쪽 조건);
오른쪽 테이블을 기준으로 두개의 테이블을 비교하여 테이블을 불러옵니다.
규칙 LEFT OUTER JOIN 시 ON 절에서는
우측(널값으로 채워지는 쪽)의 추가 제약조건을 넣고
좌측의 추가 제약조건은 WHERE절에 넣어야 한다.
1. 원하는 결과값
SELECT * --(184개 행 적용됨)
FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B
ON a.Extn_Sta_No = b.Extn_Sta_No
AND B.Oper_DT = `20090713` <-- 우측의 추가 제약조건
WHERE A.Transp_Oper_Org_CD = `1` <-- 좌측의 추가제약조건
2. 잘못된 예 -- INNER JOIN의 결과가 나오게 됨.
SELECT * --(176개 행 적용됨)
FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B
ON a.Extn_Sta_No = b.Extn_Sta_No
AND A.Transp_Oper_Org_CD = `1`
WHERE b.Oper_DT = `20090713`
3. 잘못된 예
SELECT * --(503개 행 적용됨)
FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B
ON a.Extn_Sta_No = b.Extn_Sta_No
AND B.Oper_DT = `20090713` <--둘다 ON 절에 위치함.
AND A.Transp_Oper_Org_CD = `1`
4. 잘못된 예
SELECT * --(176개 행 적용됨)
FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B
ON a.Extn_Sta_No = b.Extn_Sta_No
WHERE B.Oper_DT = `20090713` <--둘다 where절에 위치
AND A.Transp_Oper_Org_CD = `1`
'Language > MySQL' 카테고리의 다른 글
[ MySQL ] UNION :: 테이블 합치기 :: LIMIT (0) | 2021.01.13 |
---|---|
[ MySQL ] MySQL 에서 Query 로 테이블에 필드 추가하기 :: 필드 위치 이동 :: 순서 바꾸기 (0) | 2018.12.27 |
[ MySql ] JOIN 속도를 빠르게! EXPLAIN, STRAIGHT_JOIN (0) | 2017.04.06 |
[ MySQL ] SSH 덤프방법 - mysqldump (0) | 2016.08.05 |
[ MySQL ] datatime 날자비교 (0) | 2016.04.05 |