[WIL] 5주차

성소희·2025년 3월 23일
post-thumbnail

이번 주는 팀 프로젝트가 20일부터 본격적으로 시작된 주였다.
그와 동시에, 이전부터 진행해오던 SQL 코드카타 복습도 꾸준히 이어졌다.


⭐이번주 인사이트 리마인드

[SQL 복습]

📍실행순서 : FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY

✔️ NULL

  • 테이블의 필드에 값이 있는지 확인할 때 연산하는 연산자
  • 특정 값이 아니라 값의 부재에 대한 표시(데이터가 X)
  • NULL 비교는 반드시 IS NULL, IS NOT NULL을 사용함
  • NULL값은 =, <> 같은 비교 연산자를 이용해 비교할 수 X
  • 집계함수(sum, count(특정컬럼), avg 등)에는 null값 제외해서 계산하나
    count(*)이 경우 NULL 포함함
  • 데이터 누락 검출 시에는 COUNT(*) - COUNT(column)으로 NULL 개수 확인 가능
  • GROUP BY에서 NULL은 하나의 그룹으로 처리됨
  • DISTINCT는 NULL을 한 번만 포함시킴 ->
  • ORDER BY를 적용했을 때의 NULL의 위치는 ASC(오름차순)의 경우 NULL이 가장 먼저 나오고
    DESC(내림차순)의 경우 NULL이 가장 나중에 나옴
  • NULL 값을 기본값으로 대체하고 싶을 때는 IFNULL, COALESCE를 사용함
  • Coalesce(컬럼명1, 컬럼명2,'기본값')은 컬럼명1이 NULL이면 컬럼명2를 확인하고, 둘 다 NULL이면 기본값을 반환함 => 차선책, 차차선책...등 순서 처리에 강력함 (단, 모든 sql 표준에서 적용 가능)
  • IFNULL(컬럼명, 대체값)은 컬럼명이 null이면 대체값 반환하고, 컬럼명이 null이 아니면 컬럼명 그대로 반환함 => mysql 전용!

✔️ WHERE

  • WHERE절은 FROM 절에서 가져온 데이터 중 조건 만족하는 행만 필터링
  • 🚨주의할 점은 SELECT 절에서 사용한 별칭으로 WHERE 절에 사용할 수 없음 => WHERE 절이 SELECT 문보다 먼저 실행되기 때문에!

✔️ ORDER BY

  • select로 가져온 데이터들을 정렬(asc: 오름차순, desc : 내림차순)
  • where 절로 필터링된 데이터에서만 작동하고

✔️ DISTINCT

  • 중복 제거하는 키워드
  • 특정 컬럼에서 유니크한 값만 반환할 때 사용됨
  • 🚨주의할 점은 select 절에서만 사용하고 where,group by, order by 등 다른 절에서는 직접 사용 불가능!
  • 🚨또한, 여러 컬럼들과 함께 사용하는 경우, 각 컬럼의 조합이 유일한 경우에만 중복이 제거됨!
    즉, 개별 컬럼이 아니라 각 행의 전체 조합이 유일한 경우에만 중복 제거됨.
    🚨주의할 점은 select 절에서만 사용하고 where,group by, order by 등 다른 절에서는 직접 사용 불가능!

✔️ group by

  • 특정 컬럼 기준으로 데이터를 그룹화하여 요약된 결과를 제공하는 기능
  • 집계 함수와 함께 사용해서 각 그룹별 데이터 분석이 가능함

✔️ count()는 집계함수로 group by를 사용하며 위에서 개수를 반환!

  • 집계함수는 여러 개의 행을 하나의 그룹으로 묶어서 요약된 값을 반환하는 함수
  • 테이블 전체에서 단일 값(요약 값)만 반환하기 때문에 컬럼 그룹 별 결과를 보고 싶다면 group by를 사용해야줘야 함

✔️ = 연산자

  • 정확히 일치하는 값을 찾을 때 사용하는 비교연산자!
  • 다양한 데이터 타입 비교할 때 사용(문자열, 숫자, 날짜, 변수 비교)
  • 주로 where 조건 필터링에서 사용하거나 join 조건에 공통 컬럼, case조건 등에서 활용됨

✔️ limit

  • 결과에서 조회할 행의 개수 제한하는 키워드
  • 특히 대량의 데이터 중 일부만 보고 싶을 때 사용
  • 보통 쿼리문 끝에 limit n; 형태로 붙는데, 이때 n은 반환할 최대 행(row)수를 입력해주면 상위 n개만 출력됨
  • 왠만하면 limit은 order by 함께 쓰는 게 안전함 => order by 없이 limit 을 쓰는 경우 정렬 기준이 없다보니 결과가 매번 달라질 수 있기 때문!

✔️ min

  • 최솟값을 찾는 집계함수
  • 특정 컬럼에서 가장 작은 값을 반환하는데 사용됨
  • 숫자, 날짜(DATE, DATETIME), 문자열 모두에서 사용 가능하고, 단 null 값은 최소값 비교에서 제외됨
  • 문자열 컬럼에서 최소 값 조회하는 경우에는 사전순으로 정렬되는데, 문자열 컬럼에서의 최솟값이란 알파벳 순(A-Z)를 생각하면 된다.
  • 날짜 컬럼에서 최소 값 조회하는 경우에도 '날짜가 작은 수록 이전(과거) 날짜'라고 보면 된다. => 즉 MIN(날짜)는 가장 오래된 날짜 반환! 물론 시간까지 포함된 DATETIME 컬럼에서도 가장 이른 시점을 반환함
  • 🚨주의할 점은 MIN을 사용해서 특정 행 조회할 때 서브쿼리 또는 JOIN으로 원본과 연결해야 함
    EX)
select *
	from employees
where hire_date = (select min(hire_date) from employees);

✔️ in 연산자

  • 여러 개의 값을 한번에 비교할 때 사용함
  • 값이 특정 집합 안에 포함되는지를 검사하는 조건문 연산자
  • 숫자, 날짜, 문자 모두 비교 가능
  • not in을 사용하면 지정된 값들을 제외하고 가져옴
    ex)
select *
	from table_name
where column_name in (value1, value2, value3,...);

=> 컬럼 값이 괄호 안의 값 중 하나라도 일치하면 True!
즉, =Value1 or =Value2 or =Value3... 와 같은 역할이지만 훨씬 간결함

✔️ like 연산자

  • 문자열 패턴을 비교할 때 사용되는 연산자
  • = 연산자와는 달리 특정 패턴과 일치하는 데이터를 검색하는 데 유용!
  • 주로 where 절에서 사용되며, 와일트카드(%,_)와 함께 사용하여 유연한 검색 가능!
  • Not like를 사용하면 like와 반대로 특정 패턴과 일치하지 않는 데이터를 검색할 때 사용 가능!
  • 🚨주의할 점은 where에 들어가는 필터링 조건이 여러개라면 그 여러 조건들을 나열할 때 단순히 ,(comma)를 찍는 것이 아니라 여러 조건을 논리 연산자인 and,or 등으로 연결하여 사용해야 함
    ,(comma)는 where절에서 조건을 구분하는 문법이 아니기 때문!

✔️ 와일드 카드

  • like 연산자와 함께 사용됨
  • 문자열 검색 시 특정 패턴을 정의하는 데 활용됨
  • 주로 두 가지 와일드 카드 %, 가 있으며, %는 0개 이상의 문자와 매칭, (언더스코어)는 정확히 한 개의 문자와 매칭을 의미함
  • 🚨주의할 점은 where에 들어가는 필터링 조건이 여러개라면 그 여러 조건들을 나열할 때 단순히 ,(comma)를 찍는 것이 아니라 여러 조건을 논리 연산자인 and, or 등으로 연결하여 사용해야 함.
    ,(comma)는 where절에서 조건을 구분하는 문법이 아니기 때문!

✔️ COUNT

  • 테이블에서 행 개수를 반환하는 함수
  • 테이블의 전체 행 개수를 반환해야 하는 경우에는 COUNT(*)를 쓰는데 이떄는 NULL값이 포함되지만, 특정 컬럼의 NULL이 아닌 값 개수를 반환해야 할 때는 COUNT(컬럼명)을 쓰고 이때는 NULL값이 제외됨
  • GROUP BY와 함께 사용하면 각 그룹별 개수를 구할 수 있음

✔️CASE WHEN

  • 조건에 따라 다른 값을 반환하는 조건문
  • 조건을 만족하는 첫 번째 분기에 해당하는 값을 반환
  • 모든 조건이 거짓이면 else의 값 반환(없으면 생략 가능)
    ex)
select ~ 
	case when 조건1 then 결과1
    	 when 조건2 then 결과2
         else 결과3   -- 이떄 else는 없으면 생략 가능
         end as 별칭

✔️ date_format

  • 날짜/시간(Date, Datetime, Timestamp 등)을 우리가 원하는 형태의 문자열로 변환해주는 함수
  • date_format(date_column, '포맷문자열') 형태로 사용하며 date_column에는 날짜/시간이 들어 있는 컬럼을 넣어주고, '포맷문자열'에는 원하는 날짜 형식을 지정하는 문자열을 넣어줌
  • 자주 쓰는 포맷 코드 목록은 '%Y : 4자리 연도', '%m : 2자리 월','%d : 2자리 일', '%H : 24시간제 시', '%i: 분', '%s : 초', '%W : 요일 이름(전체)' 등이 있음
  • 🚨주의할 점은 문자열로 반환되기 때문에 정렬 시 유의해야 함
  • 🚨NULL값의 경우 날짜 컬럼이 NNULL이면 결과도 NULL이라서 대체 값으로 반환이 필요한 경우에는 COALESCE()를 사용함

✔️ SUBSTR

  • 문자열에서 특정 부분을 추출하는 함수
  • SUBSTRING()으로도 사용함
  • 보통 SUBSTR(원본 문자열 또는 컬럼명, 불러온 문자열 시작위치, 추출할 길이(선택사항)) 형식으로 작성함

✔️ HOUR

  • 시간(TIME) 또는 날짜/시간(Datetime) 값에서 '시(hour)값을 추출하는 함수
  • 보통 hour(컬럼명) 형식으로 쓰는데, 괄호 안에는 datetime, timestamp, time 타입이 들어가고 각 타입별 컬럼에서 시간 값(0~23)을 정수로 반환함
  • 만약에 괄호 안에 null값이 들어가면 NULL을 반환함

SQL 개념은 잊지 않기 위해 코드카타 복습을 병행했고,
팀 프로젝트를 준비하면서 EDA를 직접 경험해보고 파이썬을 활용한 데이터 분석에 익숙해지는 시간을 가졌다.
파이썬은..아직 익숙하지 않지만..연습하는 시간이 쌓일수록 점점 더 능숙하게 활용할 수 있게 되겠지...!
나 자신 화이팅이다!💪

profile
매일 한 걸음, 데이터 분석 실무자로 성장하는 기록

0개의 댓글