Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 AND·OR 연산자로 조건부 데이터 조회하기 – 실전 예제 가이드

MySQL AND, OR 연산자란?

MySQL에서 WHERE 절과 함께 사용되는 ANDOR 연산자는 여러 조건을 결합해 원하는 데이터만 정확하게 필터링할 수 있게 해주는 핵심 도구입니다.

  • 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)

쿼리 결과 분석

위 쿼리는 다음과 같은 논리로 동작합니다.

  1. (StudentName='David' AND StudentSubject='MySQL') — 이름이 'David'이면서 과목이 'MySQL'인 행을 찾습니다. 이 조건에 해당하는 것은 StudentId가 11과 14인 두 개의 행입니다.
  2. 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 연산자를 적절히 활용하면 복잡한 조건의 데이터 조회도 손쉽게 처리할 수 있습니다.