USER_INFO
테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이 몇 명인지 출력하는 SQL문을 작성해주세요.
# USER_INFO 테이블에서 2021년에 가입한 회원 중 나이가 20세 이상 29세 이하인 회원이
# 몇 명인지 출력하는 SQL문을 작성
SELECT COUNT(USER_ID) AS USERS
FROM USER_INFO
WHERE (YEAR(JOINED) = '2021') AND (AGE BETWEEN 20 AND 29)
문제에 제시된 조건을 사용하려면 어떤 연산자와 함수를 사용해야할지 몰라 튜토리얼을 찾아보았다.
나이의 범위는
BETWEEN()
함수를 찾아 해결했다.
날짜 데이터에 대해선 특정 년,월,일을 추출하려면 EXTRACT()
를 사용하라고 나와있어서 사용해서 해결했다. 좀 낯선 함수라서 전에 배운 강의에 있는지 확인해보았더니 없었던 것 같았다. 혹시 몰라서 perplexity와 gemini에게 물어보니 EXTRACT()
는 ANSI SQL 함수라서 여러 데이터베이스에서 범용적으로 사용가능하나(오라클DB에서도 사용가능), 모든 데이터베이스에서 호환되지 않을 가능성이 있다고 했다.
반면
YEAR()
는 mysql에서만 사용가능한 함수이므로, 더 최적화될 수 있다고 했다. 또한YEAR()
라는 함수명이 간결하게 의미를 더 직관적으로 전달할 수 있다는 점을 장점으로 설명했다.
또한 해당문제에 대해 처음 답에서 두 조건을 연결할 때 비트연산자인 &
을 사용했다(이렇게해도 정답으로 처리되었다.) 그런데 이 부분에 대해서도 perplexity와 gemini 둘 다 논리연산자 AND
연산자로 바꿔서 사용하라고 했다. 이유는 비트 연산자는 두 피연산자의 비트를 비교하여 둘 다 1인 것만 1로 표시하는 것이고,
AND
연산자는 두 불리언(boolean) 표현식의 참, 거짓을 비교하여 둘 다 참인 경우만 결과가 참으로 표시하는 것이기 때문이라고 한다.
따라서 위의 두 개의 조건을 결합하기 위해서 AND
연산자를 사용해야 하며 &
를 사용하는 경우 경우에 따라서 엉뚱한 결과가 나올 수 있다고 했다.