Skip to content

Latest commit

 

History

History
70 lines (44 loc) · 2.57 KB

operator.md

File metadata and controls

70 lines (44 loc) · 2.57 KB
layout
editorial

Operator(연산자)

다른 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 연산자

NOT 연산자는 ! 둘 다 사용할 수 있다.
해당 연산자는 Boolean 뿐만 아니라 숫자나 문자열 값에도 사용할 수 있지만 결괏값이 에측할 수 없는 경우엔 사용하지 않는 것이 좋다.

AND / OR 연산자

일반적으로 AND / OR를 사용하지만 MySQL에서는 && / ||를 사용할 수 있다.
오라클에서는 && / ||를 다른 연산에 사용하기 때문에 MySQL에서도 사용하지 않는 것이 좋다.

REGEXP 연산자

REGEXP 연산자는 정규 표현식을 사용할 수 있게 해주는데, 문자열 컬럼 비교에 사용할 때 인덱스 레인지 스캔을 사용할 수 없다.

LIKE 연산자

LIKE 연산자는 문자열 비교에 사용되는 연산자로, REGEXP 연산자와 달리 인덱스 레인지 스캔을 사용할 수 있다.

  • %: 0 또는 1개 이상의 문자
  • _: 정확히 1개의 문자

IN 연산자

범위로 검색하는 것이 아니라 여러 번의 동등 비교로 실행하기 때문에 일반적으로 빠르게 실행된다.
인자로 상수를 사용하거나 서브쿼리를 사용할 수 있다.

SELECT *
FROM dept_emp
WHERE (dept_no, emp_no) IN (('d001', 10017), ('d002', 10018));

단일 값이 아닌 튜플로 비교할 수도 있는데, 이 경우에도 MySQL 8.0부터는 인덱스 레인지 스캔을 사용할 수 있다.
NOT IN의 경우 인덱스 풀 스캔을 사용하게 되고, 레인지 스캔이 표시되더라도 실제 IN과 같이 효율적으로 실행되지는 않는다.

참고자료