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 연산자를 사용해야 하며 & 를 사용하는 경우 경우에 따라서 엉뚱한 결과가 나올 수 있다고 했다.