FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY
SQL 동작 순서를 명시
알아두고 항시 습관화하기
1) 집계함수 : 여러 행, 열로부터 하나의 결과 값을 반환
2) 전체 데이터 혹은 특정 컬럼을 대상으로 사용 가능
3) SELECT 문에서 사용
집계함수 기능 COUNT테이블의 "행" 수 변환 SUM테이블의 열 합계 반환 AVG테이블의 열 평균 변환 MIN테이블의 열 최소 값 변환 MAX테이블의 열 최대 값 변환 select COUNT(col) from DB명.테이블명 ## col 행의 갯수 변환 select MAX(col) from DB명.테이블명 ## col 열의 최댓 값 변환
GROUP BY
1) 집계함수를 통해 기준 별 값을 변환하고자 한다면, "GROUP BY" 절은 필수
-- 전체 데이터 기준인 경우 제외
2) 집계함수에 그룹(기준)이 더해진 개념
3) WHERE 절 이후 작성## 집계함수와 GROUP BY 절을 함께 사용하는 SQL문 select 기준컬럼, 집계함수(조건컬럼을 기준으로 여러개의 집계함수 동시사용 가능) from 테이블명 where 조건 ## (생략가능) group by 기준컬럼 ;학습 전 겪었던 오류 (주의 사항)
위 쿼리에서 GROUP BY 를 안 쓰는 경우, 오류가 발생한다.
이유는, 집계함수는 설명과 같이 하나의 결과 값을 반환한다.
SELECT 문에서 이외 컬럼 (위에서는 기준 컬럼) 이 있다면,
해당 컬럼은 N 개의 값을 출력하기에..
GROUP BY 절을 통해 기준 컬럼을 기준으로,
기준컬럼 당 한 개의 값을 반환 시킬 수 있도록 해야 정상적으로 동작한다.HAVING
1) HAVING 절은 GROUP BY 절에 의한 결과를 필터링 할 때 사용
2) GROUP BY 절 뒤에 위치함
3) WHERE 절과 차이점 존재
구분 필터링 시점 WHEREGROUP BY 전 데이터 필터링 HAVINGGROUP BY 후 결과값을 가지고 데이터 필터링 ex)
select 성별, avg(나이)as avg_age 2️⃣ -- 집계함수를 통한 avg_age 컬럼 생성 from basic.table where 나이>=311️⃣ -- 기존 테이블의 컬럼으로만 필터링 가능 group by 성별 2️⃣ having AVG_AGE>41 3️⃣ -- GROUP BY 후 avg_age 컬럼에 대해 필터링 진행
1) N 번의 쿼리문을 얻은 결과 값을, 하나의 쿼리로 작성 및 실행 할 수 있게 하는 역할
2) JOIN, UNION 동작 수행을 대체 할 수 있는 방법을 제공
3) 실행 순서 : 내부 → 외부 쿼리
4) 특징
: ( ) 안 SELECT, FROM 명시 필요
: 서브쿼리 마지막 ; 사용 불가
: ORDER BY 절 사용 불가
보통 인라인 뷰가 가장 많이 쓰인다.
나머지는 간단히만 내용 숙지 후 필요한 경우 서치하여 바로 사용 할 수 있도록 하자
1) 중첩(일반) 서브쿼리
: WHERE 절에서 사용
: 서브쿼리의 결과에 따라 달라지는 조건 절
2) 스칼라 서브쿼리
: SELECT 절에서 사용
: 하나의 컬럼처럼 사용
3) 인라인 뷰 서브쿼리
: FROM 절에서 사용
: 하나의 테이블 처럼 사용
: AS 구문을 이용하여 반드시 별칭 지정
: JOIN, UNION 사용 시 가장 유용하게 사용 됨select a.actor_cnt, count(distinct a.game_account_id) as accnt from( select game_account_id, count(distinct game_actor_id) as actor_cnt from basic.users where level >=30 group by 1 having actor_cnt >=2 ) as a -- 서브쿼리 별칭 a 지정 group by 1