06. 테이블 결합하기(↔️) / JOIN, DATE_ADD
관계형 데이터베이스(Relative DataBase)
>> 관련이 있는 테이블을 큰 하나의 테이블이 아니라 여러 개의 테이블로 나눠서 저장함.
그리고 그 테이블간의 관계성으로 데이터를 저장한다.
why??? 중복해서 저장할 필요가 없는 정보들을 효율적으로 저장하기 위해서임.
JOIN : 관련이 있는 두 개의 테이블을 결합해서 데이터를 한 번에 가져오게 하는 것 실습링크
✔️SELECT * FROM Users, Orders WHERE Users.ID = Orders.UserID
= SELECT * FROM Users INNER JOIN Orders ON Users.ID = Orders.userID
결과에서 왼쪽에 두고 싶은 테이블을 FROM 뒤에 써 준다.
>SELECT * FROM Orders ➡️ 이 테이블이 결과의 왼쪽에(먼저) 제시될 것임. 기준 테이블이 된다.
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID
INNER JOIN Customer s ㄴJOIN이 되는 기준 제시.
>> Orders테이블의 CustomerID와 Customers테이블의 CustomerID가 같은 모든 데이터를 결합해서 보여준다.
INNER JOIN과 OUTER JOIN의 차이?
>> OUTER는 두 테이블이 JOIN되었을 때 그 기준에 부합하지 않는 NULL 데이터도 함께 표시해 준다.
ex. 고객 정보 테이블과 주문 정보 테이블을 결합하여 "고객의 주문 정보"를 보려고 할 때,
INNER는 주문 정보 테이블에 존재하지 않는(=가입은 되어 있으나 주문은 한 적이 없는) 고객의 데이터는 제외하지만
OUTER는 주문을 한 번도 한 적이 없는 고객의 데이터도 NULL로 표시한다.
Left/Right Join 둘 다 Outer Join의 한 종류.
>> 어떤 테이블을 기준으로 테이블을 출력하느냐에 따라 분류된다.
LEFT JOIN의 경우 JOIN 조건에 부합하는 데이터가 오른쪽에 있으면 select하고, 없다면 null값을 채워넣는다.
LEFT JOIN : 왼쪽을 기준으로 왼쪽 테이블의 데이터는 모두 불러오되,
오른쪽 테이블의 데이터는 왼쪽에 대한 것만 불러오겠다.
RIGHT JOIN : 오른쪽을 기준으로... *거의 안씀.
*** inner join과 left/right join의 데이터 결과 값 차이가 NaN은 아니다 ***
inner join에서는 두 테이블 간의 공통된 값이 나오고, left join은 left 테이블을 기준으로 join하기 때문에,
right 테이블이 NaN값으로 나오게 된다. NaN값뿐만 아니라 left에 있는 값들도 출력되기 때문에 결과값은 달라진다.
테이블은 자기 자신도 join 할 수 있다!!! (SELF JOIN)
self join은 하나의 테이블로 두 개의 테이블로 엮어 주기 때문에
alias(에일리아스/알리아스)로 꼭 이름을 지어 줘야 한다.
그래야 하나의 테이블을 두 개로 각각 구분해서 사용할 수 있게 된다.
* Date, Time Value는 +1, -1 같은 걸로 원하는 대로 연산이 안된다.
(+1 연산을 하기 위해서 date타입을 자동으로 int타입으로 변환해버림.)
연산을 위해서는 특별한 함수를 써 주어야 한다.
DATE_ADD(기준 날짜, INTERVAL) : 기준 날짜로부터 INTERVAL(SECOND/...YEAR)만큼 더해준다. (음수값 넣으면 빼기가 됨)
DATE_SUB(기준 날짜, INTERVAL) : 기준 날짜로부터 INTERVAL(SECOND/...YEAR)만큼 빼준다.
참고 링크
'기초 > SQL' 카테고리의 다른 글
07. 데이터 결합하기(↕️) / UNION, UNION ALL (0) | 2021.01.04 |
---|---|
05. 조건문 CASE, 테이블 피봇 (0) | 2020.12.29 |
04. 보고 싶은 데이터 요약하기 / 집계함수, GROUP BY (0) | 2020.12.29 |