티스토리 뷰

참고 : 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`

Total
Today
Yesterday
최근에 올라온 글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31