MySQL AND, OR 연산자란?
MySQL에서 WHERE 절과 함께 사용되는 AND와 OR 연산자는 여러 조건을 결합해 원하는 데이터만 정확하게 필터링할 수 있게 해주는 핵심 도구입니다.
- AND: 연결된 모든 조건이 동시에 참(True)일 때만 해당 행을 반환합니다.
- OR: 연결된 조건 중 하나라도 참(True)이면 해당 행을 반환합니다.
이번 글에서는 실제 예제를 통해 AND와 OR 연산자를 함께 사용하는 방법을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentId int,
StudentName varchar(20),
StudentSubject varchar(20)
);
Query OK, 0 rows affected (0.62 sec)2단계: 데이터 삽입
INSERT 명령어를 사용해 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable values(10,'Chris','MongoDB'); Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable values(11,'David','MySQL'); Query OK, 1 row affected (0.22 sec) mysql> insert into DemoTable values(12,'Bob','Java'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(10,'Carol','MySQL'); Query OK, 1 row affected (0.51 sec) mysql> insert into DemoTable values(10,'Chris','MongoDB'); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable values(14,'David','MySQL'); Query OK, 1 row affected (0.12 sec)
3단계: 전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+-------------+----------------+ | StudentId | StudentName | StudentSubject | +-----------+-------------+----------------+ | 10 | Chris | MongoDB | | 11 | David | MySQL | | 12 | Bob | Java | | 10 | Carol | MySQL | | 10 | Chris | MongoDB | | 14 | David | MySQL | +-----------+-------------+----------------+ 6 rows in set (0.00 sec)
4단계: AND와 OR를 함께 사용한 조건 조회
다음은 AND와 OR 연산자를 조합하여 특정 조건에 맞는 학생 정보를 선택하는 쿼리입니다.
mysql> select *from DemoTable where StudentName='David' and StudentSubject='MySQL' OR StudentId=11;
실행 결과는 다음과 같습니다.
+-----------+-------------+----------------+ | StudentId | StudentName | StudentSubject | +-----------+-------------+----------------+ | 11 | David | MySQL | | 14 | David | MySQL | +-----------+-------------+----------------+ 2 rows in set (0.00 sec)
쿼리 결과 분석
위 쿼리는 다음과 같은 논리로 동작합니다.
- (StudentName='David' AND StudentSubject='MySQL') — 이름이 'David'이면서 과목이 'MySQL'인 행을 찾습니다. 이 조건에 해당하는 것은 StudentId가 11과 14인 두 개의 행입니다.
- OR StudentId=11 — 또는 StudentId가 11인 행도 포함됩니다. 하지만 이미 첫 번째 조건에서 StudentId=11인 행이 포함되었으므로 결과에는 중복 없이 두 개의 행만 반환됩니다.
참고: 연산자 우선순위 주의사항
SQL에서는 AND가 OR보다 먼저 평가됩니다. 따라서 위 쿼리는 (A AND B) OR C 형태로 해석됩니다. 의도하지 않은 결과를 방지하려면 괄호를 사용해 조건의 평가 순서를 명확히 지정하는 것이 좋습니다.
-- 괄호를 사용한 명확한 예시 select *from DemoTable where (StudentName='David' and StudentSubject='MySQL') OR StudentId=11;
이처럼 AND와 OR 연산자를 적절히 활용하면 복잡한 조건의 데이터 조회도 손쉽게 처리할 수 있습니다.