join : '연결하다', '합치다'라는 의미로 여러 테이블을 합쳐서 하나로 보이게 만듦
join 예제)
item LEFT OUTER JOIN stock
지금 왼쪽에 있는 item 테이블을 기준으로 해서 거기에 stock 테이블을 합치라는 의미이다.
합치는 기준은 밑에 줄 ON item.id = stock.item_id 구문으로 정할 수 있습니다.
ON item.id = stock.item_id
두 테이블을 합칠 때 item 테이블의 id 컬럼의칼럼의 값과 stop 테이블의 item_id 칼럼의 값을 비교해서 서로 값이 같은 로우끼리 연결하라는 의미이다.
-NULL
item_id컬럼을 보면 NULL값이 보인다. 그 이유는 left outer join은 왼쪽 테이블을 기준으로 테이블을 합친다는 의미이다. 그래서 item 테이블에는 있지만 stock 테이블에 없는 로우는 이런 식으로 NULL로 표현이 된다.
RIGHT OUTER JOIN)
alias 붙이기)
주의 할점 FROM 절에서 alias를 붙였는데, 이렇게 한번 alias를 붙였으면, 다른 모든 절에서 그 테이블은 그 alias로만 나타내야 한다.
INNER JOIN - 각 테이블에서 JOIN 기준으로 사용된 컬럼들의 일치하는 값이 둘 다 존재하는 ROW들만 합치는 JOIN
LEFT OUTER JOIN, RIGHT OUTER JOIN과 같지만 차이점은 '기준이 되는 테이블이 따로 없음'이라는 것이다.
- 단지 두 테이블 모두 기준 컬럼에 일치하는 값이 있는 ROW들만 연결된다.
LEFT OUTER JOIN, RIGHT OUTER JOIN처럼 기준 칼럼이 NULL이 되는 경우는 없다.
Foreign Key를 기준으로 조인하면 하나의 OUTER JOIN의 결과와 INNER JOI의 결과가 같을 수밖에 없다.
그러나 꼭 Foreign Key를 기준으로 조인을 해야만 하는 건 아니다.
Foreign Key가 아닌 컬럼을 기준으로 해서 조인할 수도 있다.
그렇게 할때, LEFT OUTER JOIN, RGITH OUTER JOIN, INNER JOIN 세 가지 조인의 결과가 모두 다르다
두 테이블 컬럼 간에 Foregin Key 관계가 개념적으로 성립한다는 것과 Foreign Key 관계가 실제로 설정되어있다는 것은 엄연히 다른 개념이다.
직접적으로 Foregin key를 설정해주지 않으면 자식 테이블에 이상한 row가 포함되는 것을 막을 수는 없다.
'데이터베이스' 카테고리의 다른 글
데이터베이스 정리 정리16 - 서브쿼리 (0) | 2021.09.03 |
---|---|
데이터베이스 정리 15 - 결함연산, 집합연산 (0) | 2021.08.24 |
데이터베이스 정리 13 - Foreign Key (0) | 2021.08.24 |
데이터베이스 정리 12 - SELECT문의 실행 순서 (0) | 2021.08.23 |
데이터베이스 정리 11 - 그루핑 (0) | 2021.08.23 |