MySQL에서 AND와 &&의 차이점은 무엇일까?
AND와 && 사이에는 단 하나의 차이점만 존재합니다. 바로 AND는 SQL 표준 문법이라는 점이고, &&는 MySQL 고유의 전용 문법이라는 점입니다.
이 부분을 제외하면 두 연산자 간에 어떠한 차이도 없습니다. 아래에서 다양한 조건별로 하나씩 살펴보겠습니다.
AND와 &&의 기본 동작 방식
AND와 &&의 연산 결과는 항상 1 또는 0으로 반환됩니다. 두 연산자 모두 논리 연산자(logical operator)이기 때문에, 피연산자가 여러 개 있을 때 그중 하나라도 0이면 결과는 0이 되고, 모두 0이 아니면 결과는 1이 됩니다.
다음 예제를 통해 AND와 &&의 실제 동작을 직접 확인해 보겠습니다.
케이스 1: 두 피연산자가 모두 1인 경우
케이스 1(a): 두 피연산자가 모두 1일 때 AND를 사용한 경우입니다.
mysql> select 1 AND 1 as Result;
실행 결과는 다음과 같습니다.
+--------+ | Result | +--------+ | 1 | +--------+ 1 row in set (0.00 sec)
케이스 1(b): 같은 조건에서 &&를 사용한 경우입니다.
mysql> select 1 && 1 as Result;
실행 결과는 다음과 같습니다.
+--------+ | Result | +--------+ | 1 | +--------+ 1 row in set (0.00 sec)
케이스 2: 피연산자 중 하나가 0인 경우
케이스 2(a): 피연산자 중 하나라도 0이면 결과는 0이 됩니다. AND를 사용한 예시입니다.
mysql> select 1 AND 0 as Result;
실행 결과는 다음과 같습니다.
+--------+ | Result | +--------+ | 0 | +--------+ 1 row in set (0.00 sec)
케이스 2(b): 같은 조건에서 &&를 사용한 경우입니다.
mysql> select 1 && 0 as Result;
실행 결과는 다음과 같습니다.
+--------+ | Result | +--------+ | 0 | +--------+ 1 row in set (0.00 sec)
케이스 3: 피연산자 중 하나가 NULL인 경우
NULL이 포함된 경우의 동작도 살펴보겠습니다.
케이스 3(a): 피연산자 중 하나가 NULL이면 결과 역시 NULL이 됩니다. AND를 사용한 예시입니다.
mysql> select NULL AND 1 as Result;
실행 결과는 다음과 같습니다.
+--------+ | Result | +--------+ | NULL | +--------+ 1 row in set (0.00 sec)
케이스 3(b): 같은 조건에서 &&를 사용한 경우입니다.
mysql> select NULL && 1 as Result;
실행 결과는 다음과 같습니다.
+--------+ | Result | +--------+ | NULL | +--------+ 1 row in set (0.00 sec)
참고: 0과 1 외의 숫자 처리
위에서 설명한 내용은 1과 0에만 국한되지 않습니다. 0이 아닌 모든 값은 참(true)으로 간주됩니다. 따라서 음수 두 개를 AND 또는 &&로 연산하면 결과는 1이 됩니다.
음수를 사용한 예시를 살펴보겠습니다.
mysql> select -10 AND -30 as Result; +--------+ | Result | +--------+ | 1 | +--------+ 1 row in set (0.04 sec) mysql> select -10 && -30 as Result; +--------+ | Result | +--------+ | 1 | +--------+ 1 row in set (0.00 sec)
위 예시에서 값 중 하나라도 0이면 AND와 && 모두 결과가 0이 됩니다.
mysql> select -10 AND 0 as Result; +--------+ | Result | +--------+ | 0 | +--------+ 1 row in set (0.00 sec)
양수를 사용한 경우도 마찬가지입니다.
mysql> select 10 AND 30 as Result; +--------+ | Result | +--------+ | 1 | +--------+ 1 row in set (0.00 sec) mysql> select 10 && 30 as Result; +--------+ | Result | +--------+ | 1 | +--------+ 1 row in set (0.00 sec)
여기서도 피연산자 중 하나가 0이 되면 결과는 0으로 반환됩니다.
mysql> select 10 and 0 as Result; +--------+ | Result | +--------+ | 0 | +--------+ 1 row in set (0.00 sec) mysql> select 10 && 0 as Result; +--------+ | Result | +--------+ | 0 | +--------+ 1 row in set (0.00 sec)
정리
결론적으로 MySQL에서 AND와 &&는 기능적으로 완전히 동일하게 동작합니다. 다만 이식성(portability)과 표준 준수 측면에서 SQL 표준인 AND를 사용하는 것이 권장됩니다. &&는 MySQL에서만 지원되는 문법이므로, 다른 데이터베이스 시스템으로 코드를 옮길 때 호환성 문제가 발생할 수 있기 때문입니다.