SQL은 조건들을 여러개 조합하여 좀 더 세밀한 검색할 수 있는 방법을 지원합니다.
SELECT 명령을 사용하여 검색할때 하나의 조건식만으로는 필요한 데이터만 검색하기 힘들 수 있습니다.
이를 위해 조건식을 조합해서 사용할 수 있는데 복수의 조건을 WHERE 구로 지정할 수 있습니다.
조합할때는 AND, OR, NOT의 3가지 방법을 사용할 수 있습니다.
조건식1 AND 조건식2
조건식1 OR 조건식2
NOT 조건식
AND
AND 연산자는 좌우의 식이 모두 참일 경우에만 참을 반환합니다.
즉, 모든 조건을 만족할 경우 참이됩니다.
조건식1 AND 조건식2
다음은 AND 연산 예시입니다.
SELECT * FROM Customers Where Country='UK' AND City='London';
AND 연산은 조건을 만족하는 행을 집합으로 표현했을 때 “교집합”에 해당 하는 부분이라고 할 수 있습니다.
OR
OR 조건은 어느 쪽이든 하나만 참이 되면 조건식은 참을 반환합니다.
OR도 AND와 마찬가지로 좌우 조건식이 필요하지만, AND와 달리 하나만 조건을 만족해도 참이 됩니다.
조건식1 OR 조건식2
다음은 OR 조건 예시입니다.
SELECT * FROM Customers Where Country='UK' OR Country='Mexico';
OR 연산은 조건을 만족하는 행을 집합으로 표현했을 때, 이 집합들을 합한 부분, 즉 “합집합”으로 계산할 수 있습니다.
AND와 OR을 사용할 경우 주의할 점
같은 열에 대해서 논리 연산자를 사용할때 비교 값만 지정하더라도 에러가 발생하지 않지만 기대한 결과 값을 얻을 수 없습니다.
예를 들어, no 열의 값이 1 또는 2인 행을 추출하고 싶을 경우, 다음과 같은 조건식을 사용하면 올바른 결과를 얻을 수 없습니다.
SELECT * FROM Customers WHERE CustomerId=1 OR 2
상수 “2”는 논리 연산으로 항상 참으로 인식되기 때문에 결과적으로 모든 행을 반환하게 됩니다.
원하는대로 출력하기 위해서는 다음과 같이 명령을 내려야 합니다.
SELECT * FROM Customers WHERE CustomerId=1 OR CustomerId=2
AND와 OR을 조합해 사용하기
AND와 OR을 사용하여 id가 1이나 4이고 국가가 UK 또는 Mexico인 행을 구하고 싶어 다음과 같이 SQL 명령을 내렸다고 가정해봅시다.
SELECT * FROM Customers WHERE
CustomerId=1 OR CustomerId=4 AND Country='UK' OR Country='Mexico'
하지만 결과는 다음과 같이 원하는 대로 나오지 않게 됩니다.
이렇게 결과가 나오는 이유는 AND와 OR의 계산 우선순위가 다르기 때문입니다.
OR보다 AND쪽이 먼저 실행되기 때문에 CustomerId=4 AND Country=UK가 먼저 실행되게 됩니다.
즉 다음과 같은 형태로 3개의 조건이 OR로 연결된 것과 같아집니다.
WHERE CustomerId=1 OR (CustomerId=4 AND Country='UK') OR Country='Mexico'
원하는 대로 동작하게 하려면 괄호를 묶어 다음과 같이 SQL을 수정해야합니다.
SELECT * FROM Customers WHERE
(CustomerId=1 OR CustomerId=4) AND (Country='UK' OR Country='Mexico')
NOT
NOT 연산자는 해당 조건식의 반대 값을 반환합니다.
NOT 연산자는 오른쪽에만 항목을 지정하는 ‘단항 연산자’입니다.
다음은 NOT 연산자의 예시입니다.
SELECT * FROM Customers WHERE NOT CustomerId=1
위의 결과를 보면 id가 1번이 아닌 값들만 조회된 것을 확인할 수 있습니다.
NOT 연산자는 조건식에 포함되지 않는 나머지 부분을 결과로 반환하는 것을 기억합시다.
'CS > DataBase' 카테고리의 다른 글
DISTINCT와 ORDER BY를 같이 사용할 경우 정렬이 제대로 되지 않는 현상 해결 (0) | 2022.08.30 |
---|---|
데이터베이스 첫걸음 정리 - 8장. 패턴 매칭에의한 검색 (0) | 2022.08.29 |
데이터베이스 첫걸음 정리 - 6장. 검색 조건 지정하기 (0) | 2022.08.26 |
데이터베이스 첫걸음 정리 - 5장. 테이블 구조 참조하기 (0) | 2022.08.25 |
데이터베이스 첫걸음 정리 - 4장. SQL 시작하기 (0) | 2022.08.22 |