'K02 또는 K07 팀에 속한 선수들'이라는 결과에 AND position = 'MF' 조건을 추가하여 필터링하는 방법.
논리적으로는 맞으나, 여러 개의 OR 조건을 나열할 때 우선순위를 주의해야 한다. A OR B AND C 형태로 작성하면 AND가 먼저 계산되어 의도치 않은 결과가 나올 수 있다.
team_id = 'K02' OR team_id = 'K07'을 team_id IN ('K02', 'K07')로 축약하여 가독성을 높인다.IN으로 묶인 팀 조건 뒤에 AND를 붙여 포지션 조건을 결합하면, 두 조건을 동시에 만족하는 데이터만 정확히 추출된다.-- 오류가 발생한 쿼리 예시
SELECT team_id, height, position, player_name
FROM player
WHERE team_id AS "팀 아이디" IN ('K04', 'K07')
HAVING height AS '신장' BETWEEN 185 AND 200;
AS는 조회된 결과를 표시할 때 컬럼 이름을 바꾸는 용도이므로 SELECT 절에서만 사용 가능하다. WHERE나 HAVING 절에 AS를 넣으면 문법 오류가 발생한다.HAVING은 GROUP BY를 통해 그룹화된 데이터에 조건을 걸 때 사용한다. 단순히 행을 필터링할 때는 WHERE 절에서 AND로 연결해야 한다.SELECT 컬럼명 AS "별칭" 형태로 작성한다.WHERE 절 안에 위치해야 하며, 각 조건은 AND 연산자로 연결한다.-- 오류가 발생한 쿼리 예시
CASE
WHEN height = 180 THEN player_name
WHEN height = IS NULL THEN 'X'
ELSE '180이 아닙니다'
END AS 결과
= 연산자를 사용할 수 없으며, height = IS NULL이라는 표현은 문법에 맞지 않는다.IS NULL 자체가 하나의 연산자이므로 앞의 =를 제거해야 한다.컬럼명 IS NULL 또는 컬럼명 IS NOT NULL 형식을 사용한다.WHEN 절의 결과를 반환하고 종료한다. END 뒤에 별칭을 붙여 결과 컬럼의 이름을 지정하는 것이 관례이다.이름이 '김'으로 시작하는 데이터를 찾는 조건 처리.
패턴 매칭 시에는 = 대신 전용 연산자를 사용해야 한다.
%: 글자 수에 상관없이 모든 문자를 대체한다. (예: '김%'은 '김', '김철수', '김남준' 모두 포함)_: 정확히 한 글자만 대체한다. (예: '김__'은 김으로 시작하는 세 글자 이름만 포함)FROM → WHERE → SELECT 순서를 기억할 것. WHERE 절에서는 SELECT에서 정의한 별칭을 사용할 수 없다.=로 비교하지 않는다.SELECT에, 일반 조건은 WHERE에, 그룹 조건은 HAVING에 작성한다.