layout |
---|
editorial |
다른 DBMS에서 사용되는 연산자와 거의 비슷하게 사용되지만 ANSI 표준 형태가 아니거나 MySQL에서만 사용되는 연산자도 있다.
떄문에 가능하면 ANSI 표준 형태의 연산자를 사용하는 것이 권장된다.
=
연산자는 ANSI 표준 형태이지만, MySQL에서는 <=>
연산자를 사용할 수 있다.
=
연산자와 같지만 추가적으로 NULL 값에 대한 비교까지 수행한다.
=
1=1 |
NULL=NULL |
1=NULL |
---|---|---|
1 | NULL | NULL |
<=>
1<=>1 |
NULL<=>NULL |
1<=>NULL |
---|---|---|
1 | 1 | 0 |
<=>
은 NULL을 하나의 값으로 취급하기 때문에 위와 같은 결과가 나온다.
<>
, !=
둘 다 사용되지만 하나로 통일하는 것이 좋다.
NOT
연산자는 !
둘 다 사용할 수 있다.
해당 연산자는 Boolean 뿐만 아니라 숫자나 문자열 값에도 사용할 수 있지만 결괏값이 에측할 수 없는 경우엔 사용하지 않는 것이 좋다.
일반적으로 AND
/ OR
를 사용하지만 MySQL에서는 &&
/ ||
를 사용할 수 있다.
오라클에서는 &&
/ ||
를 다른 연산에 사용하기 때문에 MySQL에서도 사용하지 않는 것이 좋다.
REGEXP
연산자는 정규 표현식을 사용할 수 있게 해주는데, 문자열 컬럼 비교에 사용할 때 인덱스 레인지 스캔을 사용할 수 없다.
LIKE
연산자는 문자열 비교에 사용되는 연산자로, REGEXP
연산자와 달리 인덱스 레인지 스캔을 사용할 수 있다.
- %: 0 또는 1개 이상의 문자
- _: 정확히 1개의 문자
범위로 검색하는 것이 아니라 여러 번의 동등 비교로 실행하기 때문에 일반적으로 빠르게 실행된다.
인자로 상수를 사용하거나 서브쿼리를 사용할 수 있다.
SELECT *
FROM dept_emp
WHERE (dept_no, emp_no) IN (('d001', 10017), ('d002', 10018));
단일 값이 아닌 튜플로 비교할 수도 있는데, 이 경우에도 MySQL 8.0부터는 인덱스 레인지 스캔을 사용할 수 있다.
NOT IN의 경우 인덱스 풀 스캔을 사용하게 되고, 레인지 스캔이 표시되더라도 실제 IN과 같이 효율적으로 실행되지는 않는다.