[SQL 복습] Distinct - >중복 제거하고 고유한 값만 조회 AVG, MIN등 활용 가능 집계함수를 잘 쓰기 위해 Group by 함수 그룹별로 통계 내는 방법 -> Group by에는 select에 반드시 group by에 들어간 칼럼이나 집계함수로 감싼 칼럼만 사용 가능
Group by에 조건 걸려면 having으로 걸어야 한다. having : 그룹별 결과를 필터링하는 조건문
[서브쿼리] 서브쿼리는 SQL안에 또다른 SQL 쿼리를 작성하는 것. () 안에 작성하며, 메인 쿼리가 실행되기전에 먼저 실행 복잡한 조건이나 비교 대상을 계산할 때에 사용 메인쿼리에 조건을 제시하거나 메인 쿼리에서 필요한 데이터를 조회
-스칼라 서브쿼리 - 하나의 값만 반환함 -인라인 뷰 - FROM 절에 사용하는 서브쿼리, 임시테이블처럼 작동 -상관 서브쿼리 상관서브쿼리는 많이 어려움(사용될 상황이 많지는 않음, AI활용 작성하는 방향으로)
- 바깥 쿼리의 값을 참조하여 반복수행
[단일행 서브쿼리와 다중행 서브쿼리] -단일행 서브쿼리(스칼라 서브쿼리)
- 반환하는 행수가 1개
- 비교연산자인 =, <. <=, >, >=, <>사용 -다중행 서브쿼리
- 반환하는 행 수가 여러개
- 다중행 비교연산자인 IN, ANY, ALL, EXISTS 사용
[스칼라서브쿼리]
바로 집계함수를 where에 쓸 순 없지만
()로 where에 걸어서 스칼라서브쿼리로 (계산할 값이 1개로 나올 수 있는 집계함수인 경우)
먼저 계산한 값을 각 행과 비교가능
서브쿼리의 값이 딱 하나(평균값)으로 나오는 건
- select절에서도 스칼라 서브쿼리 활용가능
주의할 점은 select 내에 ,를 칼럼 사이에 빠뜨리지 않게 주의!!
<case로 표현한다면>

select
name, milliseconds,
case
when milliseconds>(select avg(Milliseconds )
from track) then ‘high’
else ‘low’
end as lengthlevel
from track;
스칼라 서브쿼리는 다중으로도 사용이 가능함
다만 !!! select 내에서는 스칼라 서브쿼리만 가능하다 스칼라 서브쿼리는 먼저 계산한 값을 각 행과 비교하는 것이 가능함. 서브쿼리의 값이 딱 하나(평균값) 나오는 스칼라 서브쿼리
AVG외에도 가장 큰값 또는 가장 작은 값 이런식으로도 활용 가능함.
!! 불필요한 쉼표 안찍도록 주의


또 select로 묶는 부분에서 ,를 빠트림 주의!!!!

연습5번의 오류 관련


from절은 where절보다 반드시 앞에 와야 함
[인라인뷰]
-from절 안에 select문이 들어간 구조
-select로 만든 결과를 가상의 테이블처럼 다시 select해서 사용할 수 있음
-반드시 AS를 붙여야 함(별칭, alias)
계산될 결과를 한번 더 가공하고 싶을때
중간 가공된 데이터를 나눠서 처리하고 싶을때
where에서 집계함수(avg, max등)을 직접 사용할 수 없을때

from에서 기존 테이블처럼 자유자재로 쓸 수 있다.

인라인뷰에서 from 다음에 조건 걸기


인라인 뷰 ㅠㅠㅠㅠ
셀렉트 내에 계속 넣는거
중첩은 계속 넣을 수 있다고 함
같은 계산을 여러 번 사용하거나 alias를 재사용할때
CTEs : 임시테이블을 미리 만들어서 쿼리내에서 재사용 할 수 있도록 한 거
[복수의 테이블 다루기] union : union은 위아래로 붙인다 join : join은 옆으로 붙인다(연결시킨다) column이 추가되는 형식으로 옆으로 연결된다
아래로 길어진다.
다른 테이블에서 age컬럼을 가져오려면
select age
from 테이블(이경우엔 sample31);
로 합집합 만들 수 있음.
이름을 별칭으로 지정하지 않는다면 가장 위에 있는 컬럼 기준으로 결합한다. 보통은 별칭을 지정하는 편

별칭을 제일 위에 있는 건만 변경해도 됨
union은 중복 union all
join 매우 중요한 join 별칭을 반드시 써야 함
[inner join과 outer join] 보통 full join은 거의 안쓰고 outer join은 주로 left outer join을 주로 씀 left join은 왼쪽 테이블에서는 모든 행, 다른 쪽에서는 일치되는 행만 가져옴 보통 left를 거의 씀
full outer join에서 일치하는 행이 없으면 null값 반환
데이터 추가하기
데이너 가져와서

JOIN할때 연결시키는 건 “on”
right join으로 하면 기준점이 달라짐
=>실제로는 inner랑 left join만 거의 쓴다.
**on으로 연결시킴**
full outer는 left join 이랑 right join 해서 union 시킨다

NULL값에서도 의미를 찾기 left join으로 주문이 null인 고객이 나온다면 ->이탈고객인지 ->신규 고객이라서 아직 주문이 없는건지
inner join

inner join 관련 연습3


[join+group by] 그룹바이 - 국가별매출 장르별 평균재생시간 월별 매출합계
join 끝나면 그냥 from으로 가져온 테이블하나
오늘 배운 join+group by
join은 from의 일부

연습4

!!
동명이인이 있을 수 있기에
genreid로 먼저 그룹바이를 하고 장르 이름으로 그룹바이를 해 주면
동명이인(혹은 같은 이름의 곡)들을 거를 수 있어 안전하다
[연습문제2]
국가는 고유한 값이므로 동명이인혹은 같은 이름이 겹치는것에서 안전하기에 국가이름으로 바로 그룹바이로 해도 되지만
예를 들어 “앨범”의 이름별로 그룹바이 한다면 앨범의아이디를 먼저 그룹바이 하고 앨범곡제목을 그룹바이하자

불필요한 쉼표 주의

[tableau] 데이터 탐색과정에서 사용 power BI는 좀 더 깊은 분석에 활용