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

MySQL에서 AND와 OR 연산자를 조합한 단일 쿼리로 특정 레코드 조회하기

개요

MySQL에서는 하나의 쿼리 안에 AND 연산자와 OR 연산자를 함께 사용하여 여러 조건을 결합할 수 있습니다. 이 글에서는 실제 예제를 통해 두 연산자를 조합하여 특정 레코드를 조회하는 방법을 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable2015
-> (
-> StudentId int,
-> StudentName varchar(20),
-> StudentCountryName varchar(20)
-> );
Query OK, 0 rows affected (1.20 sec)

2. 레코드 삽입하기

INSERT 명령을 사용하여 테이블에 샘플 데이터를 추가합니다.

mysql> insert into DemoTable2015 values(1,'Chris','US');
Query OK, 1 row affected (0.23 sec)

mysql> insert into DemoTable2015 values(2,'Bob','UK');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable2015 values(3,'David','AUS');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DemoTable2015 values(4,'Robert','US');
Query OK, 1 row affected (0.16 sec)

3. 전체 레코드 확인하기

SELECT 문을 실행하여 테이블에 저장된 모든 레코드를 확인합니다.

mysql> select *from DemoTable2015;

실행 결과는 다음과 같습니다.

+-----------+-------------+--------------------+
| StudentId | StudentName | StudentCountryName |
+-----------+-------------+--------------------+
| 1 | Chris | US |
| 2 | Bob | UK |
| 3 | David | AUS |
| 4 | Robert | US |
+-----------+-------------+--------------------+
4 rows in set (0.00 sec)

4. AND와 OR를 조합한 단일 쿼리로 특정 레코드 조회하기

이제 단일 쿼리에서 AND와 OR 연산자를 함께 사용하여 특정 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable2015
-> where StudentName='David' OR StudentCountryName='UK' and StudentId=3;

실행 결과는 다음과 같습니다.

+-----------+-------------+--------------------+
| StudentId | StudentName | StudentCountryName |
+-----------+-------------+--------------------+
| 3 | David | AUS |
+-----------+-------------+--------------------+
1 row in set (0.00 sec)

결과 분석: 연산자 우선순위 이해하기

위 결과에서 'UK' 국적의 학생(Bob)은 조회되지 않은 점에 주목할 필요가 있습니다. 그 이유는 MySQL에서 AND 연산자가 OR 연산자보다 우선순위가 높기 때문입니다. 따라서 위 쿼리는 다음과 같이 해석됩니다.

StudentName='David' OR (StudentCountryName='UK' AND StudentId=3)

'UK' 국적이면서 StudentId가 3인 학생은 없으므로, 결국 StudentName이 'David'인 레코드만 반환된 것입니다. 만약 의도한 대로 조건을 평가하고 싶다면 괄호를 명시적으로 사용하는 것이 좋습니다.

select *from DemoTable2015
where (StudentName='David' OR StudentCountryName='UK') and StudentId=3;

마무리

MySQL에서 AND와 OR 연산자를 단일 쿼리에 함께 사용하면 복잡한 조건 검색이 가능하지만, 연산자 우선순위로 인해 예상과 다른 결과가 나올 수 있습니다. 항상 괄호를 활용해 조건의 평가 순서를 명확히 하는 습관을 들이면 오류를 예방할 수 있습니다.