오답 정리

sungsimdangmascot·2026년 5월 3일

1. IN 연산자와 AND 조건의 결합

질문

'K02 또는 K07 팀에 속한 선수들'이라는 결과에 AND position = 'MF' 조건을 추가하여 필터링하는 방법.

오답 분석

논리적으로는 맞으나, 여러 개의 OR 조건을 나열할 때 우선순위를 주의해야 한다. A OR B AND C 형태로 작성하면 AND가 먼저 계산되어 의도치 않은 결과가 나올 수 있다.

올바른 개념

  • IN 연산자의 활용: team_id = 'K02' OR team_id = 'K07'team_id IN ('K02', 'K07')로 축약하여 가독성을 높인다.
  • 복합 조건: IN으로 묶인 팀 조건 뒤에 AND를 붙여 포지션 조건을 결합하면, 두 조건을 동시에 만족하는 데이터만 정확히 추출된다.

2. SELECT 절 별칭과 필터링 구문 (WHERE vs HAVING)

질문 내용

-- 오류가 발생한 쿼리 예시
SELECT team_id, height, position, player_name
FROM player 
WHERE team_id AS "팀 아이디" IN ('K04', 'K07')
HAVING height AS '신장' BETWEEN 185 AND 200;

오답 분석

  1. 별칭(AS)의 위치: AS는 조회된 결과를 표시할 때 컬럼 이름을 바꾸는 용도이므로 SELECT 절에서만 사용 가능하다. WHEREHAVING 절에 AS를 넣으면 문법 오류가 발생한다.
  2. HAVING 절의 오용: HAVINGGROUP BY를 통해 그룹화된 데이터에 조건을 걸 때 사용한다. 단순히 행을 필터링할 때는 WHERE 절에서 AND로 연결해야 한다.

올바른 개념

  • 별칭 부여: SELECT 컬럼명 AS "별칭" 형태로 작성한다.
  • 조건 연결: 모든 일반 필터링 조건은 WHERE 절 안에 위치해야 하며, 각 조건은 AND 연산자로 연결한다.

3. NULL 값의 비교와 CASE 문법

질문 내용

-- 오류가 발생한 쿼리 예시
CASE
    WHEN height = 180 THEN player_name
    WHEN height = IS NULL THEN 'X' 
    ELSE '180이 아닙니다'
END AS 결과

오답 분석

  1. NULL 비교 연산: SQL에서 NULL은 값이 아니라 '상태'이다. 따라서 = 연산자를 사용할 수 없으며, height = IS NULL이라는 표현은 문법에 맞지 않는다.
  2. 비교 방식: IS NULL 자체가 하나의 연산자이므로 앞의 =를 제거해야 한다.

올바른 개념

  • NULL 판별: 반드시 컬럼명 IS NULL 또는 컬럼명 IS NOT NULL 형식을 사용한다.
  • CASE 문 실행 순서: 위에서 아래로 조건을 검사하며, 가장 먼저 일치하는 WHEN 절의 결과를 반환하고 종료한다. END 뒤에 별칭을 붙여 결과 컬럼의 이름을 지정하는 것이 관례이다.

4. 문자열 패턴 매칭 (LIKE)

질문 내용

이름이 '김'으로 시작하는 데이터를 찾는 조건 처리.

오답 분석

패턴 매칭 시에는 = 대신 전용 연산자를 사용해야 한다.

올바른 개념

  • LIKE 연산자: 특정 패턴을 포함하는 문자열을 찾을 때 사용한다.
  • 와일드카드:
    • %: 글자 수에 상관없이 모든 문자를 대체한다. (예: '김%'은 '김', '김철수', '김남준' 모두 포함)
    • _: 정확히 한 글자만 대체한다. (예: '김__'은 김으로 시작하는 세 글자 이름만 포함)

요약 및 복습 포인트

  • 실행 순서: FROMWHERESELECT 순서를 기억할 것. WHERE 절에서는 SELECT에서 정의한 별칭을 사용할 수 없다.
  • NULL 처리: NULL은 절대 =로 비교하지 않는다.
  • 구문 위치: 별칭은 SELECT에, 일반 조건은 WHERE에, 그룹 조건은 HAVING에 작성한다.
profile
성심당마스코트

0개의 댓글