SQL Server에서 AND 조건과 OR 조건 결합하기
이 글에서는 SQL Server(Transact-SQL)에서 AND 조건과 OR 조건을 함께 사용하는 방법을 소개합니다.
AND 조건과 OR 조건은 각각 별도의 튜토리얼로도 다루지만, 실무에서는 이 두 조건을 조합하여 SELECT, INSERT, UPDATE, DELETE 문과 함께 사용하는 경우가 훨씬 많습니다.
두 조건을 결합할 때 가장 중요한 점은 괄호(Parentheses)를 사용해야 한다는 것입니다. 괄호를 통해 데이터베이스가 각 조건을 평가하고 실행할 순서를 정확히 알 수 있기 때문입니다.
AND 조건과 OR 조건을 결합하는 기본 문법
WHERE '조건 1'
AND '조건 2'
...
OR '조건 n';
매개변수 설명
조건 1, 조건 2 … 조건 n
레코드가 최종적으로 선택될지 여부를 판단하기 위해 평가되는 조건들을 의미합니다.
참고 사항
- AND와 OR 조건을 사용하면 하나의 쿼리에서 여러 개의 조건을 동시에 검사할 수 있습니다.
- 실행 순서는 괄호에 의해 결정되므로, 괄호 사용을 잊지 말아야 합니다.
- SQL에서는 일반적으로 AND 연산자가 OR 연산자보다 먼저 평가되므로, 원하는 논리를 명확히 하려면 괄호로 우선순위를 지정하는 것이 좋습니다.
예제 1 – SELECT 문
SELECT *
FROM nhanvien
WHERE (ho = 'Anderson' AND ten = 'Sarah')
OR (nhanvien_id = 75);
이 쿼리는 성(ho)이 'Anderson'이고 이름(ten)이 'Sarah'인 직원 또는 직원 ID(nhanvien_id)가 75인 직원을 모두 조회합니다. 괄호가 조건의 평가 순서를 결정한다는 점에 유의하세요.
예제 2 – SELECT 문 (복잡한 조합)
SELECT nhanvien_id, ho, ten
FROM nhanvien
WHERE (ho = 'Smith')
OR (ho = 'Anderson' AND ten = 'Sarah')
OR (nhanvien_id > 1000 AND bang = 'California');
이 예제에서는 다음 세 가지 경우 중 하나에 해당하는 직원의 ID, 성, 이름이 결과로 반환됩니다.
- 성이 'Smith'인 경우
- 성이 'Anderson'이고 이름이 'Sarah'인 경우
- 직원 ID가 1000보다 크고 주(bang)가 'California'인 경우
예제 3 – INSERT 문
INSERT INTO danhba
(ho, ten)
SELECT ho, ten
FROM nhanvien
WHERE (ho = 'Johnson' OR ho = 'Anderson')
AND nhanvien_id > 54;
이 예제는 성이 'Johnson' 또는 'Anderson'이면서 직원 ID가 54보다 큰 직원들의 성과 이름 데이터를 주소록(danhba) 테이블에 삽입합니다. OR 조건이 괄호로 묶여 있으므로, 두 성 중 하나에 해당하고 ID 조건까지 만족해야 삽입됩니다.
예제 4 – UPDATE 문
UPDATE nhanvien
SET ho = 'TBD'
WHERE nhanvien_id <= 2000
AND (bang = 'California' OR bang = 'Arizona');
이 쿼리는 직원 ID가 2000 이하이면서 거주 주가 'California' 또는 'Arizona'인 직원의 성(ho)을 'TBD'로 변경합니다. 여기서도 OR 부분을 괄호로 묶어 AND 조건과의 관계를 명확히 했습니다.
예제 5 – DELETE 문
DELETE FROM nhanvien
WHERE bang = 'California'
AND (ho = 'Johnson' OR ten = 'Joe');
DELETE 문에서 AND와 OR 조건을 결합한 이 예제는 주가 'California'이면서 성이 'Johnson'이거나 이름이 'Joe'인 모든 레코드를 테이블에서 삭제합니다.
마무리
AND와 OR 조건을 결합하면 매우 유연한 데이터 필터링이 가능하지만, 괄호 없이 작성하면 의도와 다른 결과가 나올 수 있습니다. 특히 UPDATE나 DELETE처럼 데이터가 변경되는 문장에서는 항상 먼저 SELECT 문으로 조건을 검증한 후 실행하는 습관을 들이는 것이 안전합니다.