-- 수업들으면서 몇가지 이해 안됐던 것들 간단히 정리해보려고 왔다.
-- 정리라기 보다는..
-- 그냥 알아먹기 쉽게 유치원생 수준으로 풀어쓴 나만의 이해방식이라고 해두자.

-- group by / where

select 내가 보고 싶은 컬럼 (* : 전부 다 보여줘)
from 어느 테이블에서??
where 이 조건에 만족하는 애들만 보여줄래?
group by 이 기준으로 그룹지어줘;

 
-- group by / having

select 내가 보고 싶은 컬럼
from 어느 테이블에서?
group by 이 기준으로 그룹지어줄래?
having 아 근데 여기 부합하지 않는 애들은 보여줄 필요없어^^;

-- 참고로 where에서는 avg(stu_score) > 90 이런 식을 쓸 수 없다.
-- 쓰면 그룹함수는 사용할 수 없고 오류뜸..

-- where stu_score > 90 은 가능하다.
-- 함수(avg(stu_score))가 안되는거다.

-------------------------------

-- partition

select 내가 보고 싶은 컬럼1, 컬럼2,
      row_number() over (partition by 이 기준으로 나눠줄래? 
			order by 그리고 얘 기준으로 정렬해줘 (asc / desc)
from 이 테이블에서 말이야;

-- 셀렉트 부분에서 콤마 진짜 조심해야된다ㅡㅡ 
-- 맨날 오류나서 당황해서 보면 콤마없어야하는 부분에 찍혀있어서,, 
-- 아님 있어야하는 부분에 없어서..우쒸

-------------------------------

-- join
-- 이 테이블의 이거
-- 저 테이블의 저거
-- 조합해서 보고싶어요!

-- 첫번째 방법
select 원하는 컬럼 
-- ( * : 전부다 볼래 || 이테이블.이컬럼, 저테이블.저컬럼, ...)
from 이테이블, 저테이블
where 이테이블.이컬럼 = 저테이블.저컬럼;
-- ( : 이테이블의 이컬럼과 저테이블의 저컬럼이 같으면 내가 원하는 컬럼 보여줄래?)

-- 두번째 방법 (ANSI표준)
select 원하는 컬럼 ( * : 전부다 볼래 || 이테이블.이컬럼, 저테이블.저컬럼, ...)
from 이테이블 inner join 저테이블 on 이테이블.이컬럼 = 저테이블.저컬럼;

 

-- 간혹 첫번째 방법이 안먹히는 데이터도 있기 때문에
-- 둘다 사용할줄 알아야할 것 같다.
-- 조인에는 inner join, left inner join, right inner join, full inner join 등이 있는데 
-- 이번엔 inner join만 볼게여~~
-- natural join 하면 굳이 컬럼명을 명시해주지 않아도 같은 게 있음 알아서 조인해줌

-- 이너조인과 같은 결과. 같은 게 있으면 알아서 합쳐준다?!?!!!?!?!?
SELECT 이테이블.이컬럼, 저테이블.저컬럼, ... FROM 이테이블 NATURAL JOIN 저테이블;