Data_10기

SQL 라이브 세션 2,3회차 - SQL 연산자, GROUP BY, 서브쿼리

senu 2025. 10. 28. 20:38

2회차

  • SELECT에서 '*'을 '아스테리크'라고 함
  • MySQL에서는 구문 마지막에 세미콜론(;)으로 끝내줘야 함
  • DISTINCT는 SELECT에서만 사용할 수 있음. 중복 없이 데이터를 조회하고 싶을 때 사용
  • 조건(내가 만든 기준)에 따라 데이터를 구분하고 싶을 때 CASE WHEN 사용
SELECT CASE WHEN 조건식1 THEN 결과1
            WHEN 조건식2 THEN 결과2
            ELSE 결과3
            END AS 새로운 컬럼명

 

  • SQL 코딩테스트는 타임어택
  • SQL 연산자
연산자 연산의 예 의미
>, < N<10, N>10 N이 10 미만, N이 10 초과
>=, <= N<=10, N>=10 N이 10 이하, N이 10 이상
= N=10 N이 10인 값
!= N!=10 N이 10이 아닌 값 
LIKE LIKE('%과자%') 문자열이 ~와 같을 때(문자열을 기준으로 앞,뒤 문자열과 상관없이 볼 때 %를 앞뒤에 작성해줍니다.)
AND A AND B A 그리고 B를 모두 만족하는 값
OR A OR B A 또는 B인 값
NOT, ! NOT A, !A A가 아닌 값 
BETWEEN A BETWEEN 10 AND 20 A가 10과 20 사이에 포함된 값
= 10 이상 20 이하
IN A IN (B) B에 A가 포함된 값
* () 괄호 필수입니다.
NOT  IN A NOT IN B B에 A가 포함되지 않은 값
IS NULL A IS NULL A 가 비어있는 값
IS NOT NULL A IS NOT NULL A 가 비어있지 않는 값

 

  • SQL은 무조건 안쪽부터 바깥쪽으로 처리되고, 괄호가 있으면 안에 있는 것부터 처리됨 => 먼저 연산할 조건에 괄호 사용하기
  • BETWEEN은 조건값 포함함 (이상, 이하)
  • IN과 LIKE 구분! IN은 딱 그 text만. LIKE는 해당문자만 포함되어 있기만 하면 됨
  • IF 보다 CASE WHEN 많이 씀 (IF가 할 수 있는 건 CASE WHEN이 다 할 수 있음)
  • ORDER BY에서 ASC은 오름차순, DESC은 내림차순
  • ORDER 기준 번호로도 적을 수 있는데 권장하진 않음
  • 연산자가 여러개인 경우 괄호 사용하지 않으면 쿼리가 돌아가긴 하지만 혼선이 생길 수 있어 결과 깨질 수 있음

 

 

3회차

  • GROUP BY에서 사용한 기준컬럼은 SELECT에 모두 있어야 함. 그렇지 않으면 행 수가 안 맞아서 계산 깨짐
SELECT 기준컬럼, 집계함수
FROM 테이블명
WHERE 조건 #(생략가능)
GROUP BY 기준컬럼

 

  • 집계함수와 GROUP BY는 세트
  • SQL 동작순서: FROM - ON - JOIN - WHERE - GROUP BY - HAVING - SELECT - DISTINCT - ORDER BY
  • WHERE절은 GROUP BY '전' 결과 필터링, HAVING절은 GROUP BY '후' 결과 필터링
  • HAVING 예시 : 국가별 평균 인구수를 보고 싶은데, 그 중에서 오천만 명이 넘는 국가만 필터링해서 보고싶은 경우

 

  • SUB QEURY 특징
    1.  ( ) 안에 SELECT와 FROM 써줘야함
    2. 쿼리 마지막에 세미콜론(;) 기호 사용할 수 없음 -> 세미콜론은 쿼리를 끝낸다는 의미
    3. ORDER BY절을 사용할 수 없음 -> 어차피 메인쿼리에서 다른 연산을 진행하기 때문에 의미가 없음
  • 서브쿼리 종류
    1.  중첩(일반) 쿼리
      • WHERE절에서 사용 (실무에서 잘 사용하진 않음)
    2. 스칼라 서브쿼리
      • SELECT절에서 사용 (실무에서 잘 사용하진 않음)
      • 하나의 컬럼처럼 사용
    3. 인라인 뷰 서브쿼리 ★ ★ ★
      • FROM절에서 사용
      • 하나의 테이블처럼 사용
      • AS 구문을 사용해서 명칭(alias)을 반드시 기재해야 함
      • JOIN, UNION 시 가장 유용하게 사용됨

 

  • HAVING에 쓰인 서브쿼리 ==> 메인 쿼리가 먼저. 조건이기 때문에. 논리흐름 순서 생각하면 됨
  • LIMIT 구문 ==> ORDER BY는 정렬이기 떄문에 논리 흐름에 들어가고, LIMIT은 맨 마지막에 결과값을 몇 줄로 볼건지에 대한 내용이기 때문에 논리 흐름 순서 안에 굳이 들어가지 않음

  • 날짜포맷 종류