[TIL] 사전캠프 8일차 _ SQL 퀘스트 #3

Seoyeon Lee·2025년 9월 17일

Today I Learned ...

🖥️ SQL 문법 연습 퀘스트 #3

오늘은 SQL 강의를 끝낸 기념으로 퀘스트를 왕창 풀었다.

매일 하나씩 풀어보라고 올려주셨지만,,
강의를 듣기 전에는 SQL을 하나도 몰라서 풀 수 없었고, 강의를 듣는 중에는 강의 진도와 퀘스트 진도가 맞지 않아서 풀 수가 없었다.
그래서 어제 SQL 강의를 완강하고, 오늘 SQL 퀘스트를 왕창 풀었다.

SQL 퀘스트는 걷기반과 달리기반으로 나누어서 제공되었는데,
SQL을 처음으로 다뤄보는 나는 걷기반 퀘스트부터 시작했다.

지난주에 SQL에 대해 하나도 모르는 채로 1번 문제를 풀었을 때는 매번 검색해가면서 풀어야만 했다.
그런데 오늘은 강의를 통해서 한번씩 실습을 해봤기 때문에 훨씬 더 쉽게 풀 수 있었다.
그래도 몇몇 문제들은 강의 자료를 봐야했고, 몇몇 문제들은 검색을 해가면서 해야했다.


문제를 풀면서 몇개의 새로운 함수들을 접하게 되었다.

그중 첫 번째는 날짜에 대한 내용이다.

먼저, 날짜 형식의 데이터에서 년도/월/일 중 하나만 추출하고 싶다면, year([컬럼명])과 같이 지정해서 원하는 데이터만 뽑아 사용할 수 있다.

또, curdate()를 통해 오늘 날짜를 가져올 수 있고, datadiff(A,B)를 사용해 A 날짜에서 B 날짜를 뺀 일수를 확인할 수 있다.
만약, 계산한 내용을 년도/월/시간/초 등의 기준으로 받고 싶다면, timestampdiff([단위], A, B)로 사용하면 되는데, 이때는 B 날짜에서 A 날짜를 뺀 값으로 계산된다.

그리고, date_add([기준 날짜], interval [원하는 기간])을 사용해서 기준 날짜에 원하는 기간을 더하거나 date_sub()를 사용해서 기준 날짜에 원하는 기간을 빼줄 수도 있다.

또, limit [숫자]를 사용하면 많은 행의 데이터 중에서 지정한 갯수만큼의 자료만 가져올 수도 있다.
만약, limit [숫자1], [숫자2]와 같은 형식으로 사용한다면, 숫자1번째부터 숫자2만큼의 자료만 보여준다.
이때, 숫자1은 0부터 시작된다.

order by로 행을 정렬한 후, limit 1을 사용하면 정렬된 정보들 중 가장 큰 값 혹은 가장 작은 값을 손쉽게 가져올 수 있다.

문제를 풀다보니 having이라는 것도 필요했다.
where은 그룹핑 전에 개별 행을 필터링해준다면, having은 그룹핑 후에 집계 결과를 필터링해준다.

내가 무언가를 계산하고, 그 계산한 결과 중에 값이 0인 데이터를 얻길 원한다면, having을 통해 필터링 조건을 지정해주면 되는 것이다.

마지막으로, round()라는 반올림 함수가 필요했다.

round([값], [반올림할 자릿수]) 형식으로 사용한다.
이때, 값의 자리에는 숫자가 들어가도 되고, 컬럼이나 함수식이 들어가도 된다.

반올림할 자릿수를 잘 지정해야 하는데, 0 또는 빈칸으로 사용한다면 소수점이 정리되어 정수로 나타난다.
양수를 지정하면 소수점 이하가 정리되는데, 1이라면 소수점 첫째 자리까지, 2라면 소수점 둘째 자리까지 나타난다.
그리고 음수를 지정하면 정수가 반올림 되는데, -1이라면 첫째 자리를 반올림해 10단위로, -2라면 둘째 자리를 반올림해 100단위로 나타난다.

자세한 문제와 환경 세팅, 풀이 내용은 노션을 통해 정리해두었다.
Notion 확인하기


🙃 오늘의 느낀점

확실히 강의를 듣는 것보다 실습하고, 문제를 푸는 것이 더 재미있었다.

걷기반 문제들이 생각보다 푸는 데에 오래 걸리지 않아서 달리기반 문제들도 풀어봤다.
달리기반은 이름부터가 뭔가 어려워보여서 쫄았었는데, 막상 풀다보니 문제가 엄청 어렵지는 않았다.

문제들을 한참 풀고 나니 자신감이 조금 생겼었다.
그런데, 지금 하는 내용들은 그냥 정말 기초 단계일 뿐이었다...
그래도 SQL에 재미가 붙은김에 조금 더 공부를 해봐야겠다.

profile
백엔드 개발자 지망생

0개의 댓글