MySQL에서 TINYINT 타입으로 저장된 값 중 1이 아닌 값(<> 1) 또는 NULL인 레코드를 조회하는 방법을 알아보겠습니다. 이때 주의할 점은 NULL 비교에는 반드시 IS NULL 연산자를 사용해야 한다는 것입니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다. 직원 정보를 저장하며, 결혼 여부를 TINYINT 타입의 isMarried 컬럼으로 관리합니다.
mysql> create table DemoTable
-> (
-> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-> EmployeeName varchar(20),
-> isMarried tinyint
-> );
Query OK, 0 rows affected (0.83 sec)
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 몇 개의 레코드를 추가합니다. 일부 레코드에는 의도적으로 NULL 값을 넣어 테스트합니다.
mysql> insert into DemoTable(EmployeeName,isMarried) values('Chris',NULL);
Query OK, 1 row affected (0.76 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('David',1);
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Mike',0);
Query OK, 1 row affected (0.69 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Sam',NULL);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(EmployeeName,isMarried) values('Bob',0);
Query OK, 1 row affected (0.10 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------------+--------------+-----------+
| EmployeeId | EmployeeName | isMarried |
+------------+--------------+-----------+
| 2 | David | 1 |
| 3 | Mike | 0 |
| 4 | Sam | NULL |
| 5 | Bob | 0 |
+------------+--------------+-----------+
5 rows in set (0.00 sec)
4. 1이 아니거나 NULL인 레코드 조회하기
핵심 쿼리입니다. <> 1 조건과 IS NULL 조건을 OR 연산자로 결합하여 원하는 레코드만 추출합니다.
mysql> select *from DemoTable where isMarried <> 1 or isMarried IS NULL;
실행 결과는 다음과 같습니다.
+------------+--------------+-----------+
| EmployeeId | EmployeeName | isMarried |
+------------+--------------+-----------+
| 1 | Chris | NULL |
| 3 | Mike | 0 |
| 4 | Sam | NULL |
| 5 | Bob | 0 |
+------------+--------------+-----------+
4 rows in set (0.00 sec)
정리 및 핵심 포인트
위 결과를 보면 isMarried 값이 0이거나 NULL인 레코드 4개가 정상적으로 반환된 것을 확인할 수 있습니다. David(isMarried = 1)만 제외되었습니다.
여기서 기억해야 할 중요한 점은 다음과 같습니다.
NULL은 비교 연산자로 비교할 수 없습니다. SQL에서 NULL은 '알 수 없는 값'을 의미하기 때문에 isMarried <> 1 조건만 사용하면 NULL인 레코드는 결과에 포함되지 않습니다. 따라서 NULL 값을 함께 조회하려면 반드시 IS NULL 또는 IS NOT NULL 연산자를 별도로 사용해야 합니다.
또한 MySQL에서 TINYINT 타입은 불리언(Boolean) 값을 저장하는 데 자주 활용됩니다. 0은 거짓(false), 1은 참(true)으로 해석되며, 이 예제처럼 값이 입력되지 않은 경우 NULL로 처리됩니다. 실무에서는 이러한 세 가지 상태(참/거짓/미확인)를 모두 고려한 쿼리를 작성하는 것이 중요합니다.