메인 콘텐츠로 건너뛰기

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
연산자는 값들을 결합해 새 값을 만듭니다. 이미 하나를 썼습니다: rental_rate * 1.1의 *입니다. 이 수업은 일상적으로 쓰는 연산자들과, 모두를 걸려 넘어지게 하는 한 가지 동작, 즉 NULL이 나타날 때 일어나는 일을 다룹니다. 시작하기 전에 mysql -u root -p sakila로 클라이언트를 여세요.

연산자의 동작 방식

LEFT_VALUE와 RIGHT_VALUE를 값으로, OPERATOR를 아래의 기호 중 하나로 바꾸세요. 값은 열일 수도 있고 리터럴일 수도 있는데, 리터럴은 문장에 직접 쓴 숫자나 텍스트 조각을 뜻합니다. FROM이 없는 SELECT는 표현식을 평가해 단일 행을 반환하므로, 연산자를 시험해 보는 가장 빠른 방법입니다.

예제

  1. 비교는 1 또는 0을 반환합니다

MySQL에는 별도의 불리언 타입이 없습니다. 성립하는 비교는 정수 1을 반환하고, 성립하지 않는 비교는 0을 반환합니다. TRUE와 FALSE라는 단어는 그 2개의 정수를 다르게 쓴 것입니다.
동등 비교는 대부분의 프로그래밍 언어가 쓰는 이중 ==가 아니라 단일 =입니다. <>와 !=는 둘 다 같지 않음을 뜻하고 똑같이 동작합니다. 이 튜토리얼은 <>로 씁니다.

  1. 산술, 그리고 어느 연산자가 더 세게 결합하는가

2 + 3 * 4는 14이므로, 곱셈이 먼저 일어났습니다. 괄호는 그것을 뒤집어 20으로 만듭니다. /는 2개의 정수 사이에서도 소수 결과를 주고, DIV는 소수 부분을 버리며, %는 나머지를 줍니다.

  1. DIV와 %는 나눗셈만큼 세게 결합합니다

3개 모두 나눗셈이나 나머지를 먼저 계산했을 때 얻는 답을 줍니다. -가 /보다 세게 결합했다면 첫 번째 열은 8이 아니라 3이었을 것입니다.

  1. 연산자는 열에도 동작합니다

리터럴에 할 수 있는 것은 무엇이든 열에도 할 수 있습니다.
비교가 1과 0으로 이루어진 열이 되고, 별칭이 그 열에 이름을 붙입니다.

NULL은 NULL을 포함해 아무것과도 같지 않습니다

정렬 수업에서 NULL을 한 번도 기록되지 않은 값의 표시로 만났습니다. 여기서 NULL은 어떤 실제 값과도 다르게 동작합니다.
기록되지 않은 값 하나가 다른 하나와 같은지 묻는 질문에는 답할 수 없으므로, NULL = NULL은 1이나 0이 아니라 NULL을 반환합니다. NULL <> NULL도 마찬가지입니다. 예제 1의 모든 연산자가 NULL에 대해 그렇게 동작합니다. <=>가 예외입니다. 2개의 값을 비교해 언제나 1 또는 0을 반환하고 결코 NULL을 반환하지 않으며, NULL을 자기 자신과 같은 것으로 다룹니다. 그 결과 = NULL은 결코 아무것과도 일치하지 않습니다. 값이 없는 행을 찾아야 할 때는 IS NULL이 그 검사이고, 보통의 비교처럼 1 또는 0을 반환합니다.

요약

  • 비교에서는 참이나 거짓이 아니라 1 또는 0이 돌아옵니다.
  • 같음에는 =를, 같지 않음에는 <>를 사용하세요.
  • *, /, DIV, %는 +와 -보다 세게 결합한다는 것을 기억하세요.
  • 정수 나눗셈에는 DIV를, 나머지에는 %를 사용하세요.
  • NULL이 관련된 모든 보통의 비교는 NULL을 내므로, 대신 <=>나 IS NULL을 사용하세요.

함께 보기

  • SELECT — 이 표현식들이 들어가는 곳
  • 열 별칭 — 비교가 만드는 열에 이름 붙이기
  • MySQL의 NULL — 언어의 나머지 부분에서 NULL이 동작하는 방식