[SQL] join(left join, inner join), NULL, union + group by, order by
1. join
left join, inner join
0) join이란?
연결하려는 두 테이블의 공통된 정보(key 값)을 기준으로 테이블을 연결해서 한 테이블처럼 보는 것
1) left join

출처: 스파르타코딩클럽 수업 자료
왼쪽에 있는 테이블(A)을 기준으로 테이블 연결
select * from 기준 테이블 a(알리아스)
left join 붙이려는 테이블 b(알리아스) on a.key값 = b.key값

orders 테이블을 기준으로 users 테이블 연결
이때 key 값은 user_id
+ 이때 기준 테이블에 붙이려는 테이블의 필드 내용이 없으면 NULL 값 출력됨
=> 어떤 테이블에 어떤 테이블을 붙이는지 그 순서가 중요
2) inner join

출처: 스파르타코딩클럽 수업 자료
두 테이블의 교집합
select * from 붙이려는 테이블 a(알리아스)
inner join 붙이려는 테이블 b(알리아스) on a.key값 = b.key값

+ 붙이려는 두 테이블에서 값이 있는 정보만 출력됨 => NULL 값이 출력될 일이 없음
교집합이므로 순서가 중요하지 않음.
select from 옆에 쓸 테이블이나, inner join 옆에 쓸 테이블 순서 바뀌어도 상관x
+) 두 테이블에 공통적으로 있는 필드 쓸 땐 해당 필드 앞에 알리아스 꼭 붙이기!


group by에서 user_id 앞 u. 붙여줌
안 그러면 왼쪽처럼 ambiguous 하다는 error창 나옴
2. NULL
1) left join 하고 NULL 출력된 부분 찾는 방법

where 필드명 is NULL
2) left join 하고 NULL 출력 안 된 부분 찾는 방법

where 필드명 is not NULL
3. Union
모든 필드가 똑같을 때 세로로 이어주는 것


왼쪽의 테이블과 오른쪽의 테이블의 모든 필드가 같으므로 하나의 테이블로 보기 위해 Union 사용

연결하려는 테이블을 괄호() 로 묶고 그 사이에 Union all을 입력해주면 됨
*Union 안에서는 정렬이 안 됨(order by가 먹히지 않음)
=> 순서 정렬은 합치고 난 이후에 해야지 합치기 전에 하는 건 x
+ 새로운 필드 넣는 법

select '넣고 싶은 필드 내용' as 필드제목 from 테이블 이름
ex) '7월' as month
+ 두 가지 이상으로 범주화/정렬 하기

group by A, B -> A로도 범주화하고 또 B로도 범주화
order by A', B' -> A'로도 정렬하고 또 B'로도 정렬(title 나열되고, 그 안에서 week 1, 2, 3 순으로 나열)
+ order by c2.course_id, c2.week desc 로 해서 week는 3, 2, 1 순으로 나열하는 것도 가능