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

MySQL에서 OR과 AND 조건을 함께 사용하는 방법

MySQL에서는 OR 연산자와 AND 연산자를 함께 사용하여 더욱 복잡하고 정교한 조건 검색을 수행할 수 있습니다. 이 글에서는 실제 예제를 통해 두 조건을 결합하는 방법을 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> Age int
-> );
Query OK, 0 rows affected (0.63 sec)

위 테이블은 자동 증가하는 기본키 Id, 이름을 저장하는 Name, 나이를 저장하는 Age 컬럼으로 구성되어 있습니다.

2. 샘플 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 레코드를 입력합니다. 일부러 NULL 값도 포함시켰습니다.

mysql> insert into DemoTable(Name,Age) values('John',21);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable(Name,Age) values(Null,20);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable(Name,Age) values('David',23);
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable(Name,Age) values('Carol',null);
Query OK, 1 row affected (0.17 sec)

3. 전체 데이터 조회하기

SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

출력 결과

+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 1 | John | 21 |
| 2 | NULL | 20 |
| 3 | David | 23 |
| 4 | Carol | NULL |
+----+-------+------+
4 rows in set (0.00 sec)

4. OR과 AND 조건 결합하기

이제 OR 조건과 AND 조건을 함께 사용하는 쿼리를 작성해 보겠습니다. 아래 쿼리는 이름이 'David'인 행 또는 이름이 NULL이면서 나이가 20인 행을 조회합니다.

mysql> select *from DemoTable
-> where Name='David' OR (Name is null AND Age=20);

출력 결과

+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 2 | NULL | 20 |
| 3 | David | 23 |
+----+-------+------+
2 rows in set (0.00 sec)

동작 원리 정리

쿼리의 실행 결과를 보면 Id가 2번과 3번인 두 행만 반환되었습니다. 그 이유는 다음과 같습니다.

  • OR 연산자: 여러 조건 중 하나라도 만족하면 해당 행을 반환합니다. 따라서 Name이 'David'인 행은 다른 조건과 무관하게 조회됩니다.
  • AND 연산자: 묶여 있는 모든 조건을 동시에 만족해야 합니다. Name이 NULL이고 Age가 20인 행만 이 조건을 통과합니다.

특히 괄호 ()를 사용해 조건의 우선순위를 명확히 지정하는 것이 매우 중요합니다. SQL에서는 AND가 OR보다 먼저 평가되기 때문에, 괄호 없이 작성하면 의도와 다른 결과가 나올 수 있습니다. 위 예제에서 (Name is null AND Age=20)처럼 괄호로 묶어주면 'NULL 이름 + 나이 20'이라는 하나의 논리 그룹으로 처리되어 정확한 결과를 얻을 수 있습니다.