-
[SQL] 기초 문법[스파르타코딩클럽]데이터분석 과정/TIL,WIL 2023. 12. 26. 20:24
오늘부터 SQL에 관한 기초,심화 수업이 시작되었다.
그래서 '엑셀보다 쉽고 빠른 SQL '강의를 복습하고 SQL 코드카타 4문제를 풀어보았다.
복습과 문제를 풀면서 질문이 3가지가 생겼고, 질문에 대한 답을 정리해보려고한다.
Q1 SQL에서 IF문과 WHERE 문의 차이
WHERE은 특정조건에 부합하는 데이터만 조회하고 싶을 때 사용한다.
Select 컬럼 from 테이블 where 조건이다.
IF는 조건에 따라 방법을 다르게 할 때 사용한다.
IF는 순서에 따라 우선순위가 주어지고, 간단한 구문보다는 다중구문에서 자주 사용된다.
IF(조건, 충족, 불충족)
둘을 알아보고 적용해보았을 때, 같은 점이라고는 조건을 지정해준다라는 것 밖에 없다는 것을 알게 되었다.
IF와 비슷한 조건 포맷으로는 CASE WHEN이 있다
CASE WHEN은 조건을 여러개 지정하고 싶을 때 사용한다.
CASE WHEN 조건 THEN 값
ELSE 값 ENDIF와 CASE WHEN문은 조건을 부여한다는 점에서 같지만, IF문은 순서에 따라 우선순위가 주어지고, CASE WHEN은 우선순위가 주어지지 않기 때문에 순서가 상관없다.
Q2. DATE_FORMAT에서 년도 뒷자리만 쓰고 싶으면?
이 구문은 date type을 date_format을 이용해 년, 월, 일, 주로 조회해보는 것이다. 이 구문에 대한 결과는 아래와 같다.
현재 년은 1978으로 4글자가 있는데 여기에서 78만 뽑아쓰고 싶다면 어떻게 해야하는지 궁금했다.
이 궁금증에 대해 두 가지 답을 찾았다.
1) substr을 사용하기
substr, 즉 substring은 원하는 문자만 추출하는 포맷이다.
substr을 활용하면 아래와 같은 구문을 만들 수 있다.
date_format(date(date), substr(date,3,2)) "년"
2) 날짜 포맷에서 %Y는 4자리 %y는 2자리를 뜻한다.
이 구문에서 '%Y'를 '%y'로 바꾸면 78과 같은 두자리만 나타난다.
substr과 %y 모두 실행해 보았는데, 둘 다 같은 결과가 나오는걸 알 수 있었다.
Q3. Having절
오늘의 코드카타문제이다.
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과를 이름이 없는 동물은 집계에서 제외하며, 결과는 이름순으로 조회해주세요.
SQL을 풀 때 거치는 과정과 결론은 아래와 같다.
1. 어떤 테이블? animal_ins
2. 어떤 컬럼? name
3. 어떤 조건? name is not null, name >= 2
4. 어떤 함수? count
위와 같은 과정을 통해 아래와 같은 코드를 작성하였지만, 오류도 있었고, 모르겠는 부분도 있었다.
의문을 가졌던 부분은 '이름 중 두 번 이상 쓰인 이름'이었다.
where로 조건을 걸고, group by로 name이라는 카테고리도 만들었는데, 그 이상으로 어떻게 만들지? 라는 고민을 했고, 그 결과 group by의 결과 중에서 원하는 조건의 결과만 필터링하는 having절을 알게 되었다.
Having절
동일한 값을 가진 컬럼을 기준으로 그룹별 연산을 하는 Group by와 함께 사용한다.
Group by의 결과 중 원하는 조건의 결과만을 필터링하는 Havingwhere은 select from의 조건이었다면 having은 where의 조건이라는 것을 알게 되었다.
'[스파르타코딩클럽]데이터분석 과정 > TIL,WIL' 카테고리의 다른 글
[SQLD] SQL 기본 문법 (1) 2023.12.28 [SQLD] 데이터 모델링 (1) 2023.12.27 KDT 실무형 데이터 분석가 양성과정 1주차 (1) 2023.12.22 AttributeError 해결하기 (1) 2023.12.22 미니 프로젝트 끝! (1) 2023.12.22