1. 연산자 우선 순위
다음 목록은 연산자 우선 순위를 낮은 것부터 보여줍니다. 같은 줄에 나열된 연산자는 동일한 우선순위를 갖습니다.
:=
||, OR, XOR
&&, AND
NOT
BETWEEN, CASE, WHEN, THEN, ELSE
=, 96b4fef55684b9312718d5de63fb7121, >=, >, 59ed3ba4284a0a81c059290362cbdd58, !=, IS, LIKE, REGEXP, IN
|
&
071af19a55f4da1989e8c02b755ba052>
-, +
*, /, DIV, %, MOD
^
-(1달러 빼기 기호), ~(1달러 비트 반전)
!
BINARY, COLLATE
참고: HIGH_NOT_PRECEDENCE SQL 모드가 활성화되면 NOT은 ! 연산자와 동일한 우선순위를 갖습니다.
2. 괄호
( ... ) 괄호를 사용하여 표현식의 연산 순서를 지정합니다. 예:
mysql> SELECT 1+2*3; -> 7 mysql> SELECT (1+2)*3; -> 9
3. 🎜>
비교 연산의 결과는 1(TRUE), 0(FALSE) 또는 NULL입니다. 이러한 연산은 숫자와 문자열에 사용할 수 있습니다. 필요에 따라 문자열은 자동으로 숫자로 변환되고, 숫자는 자동으로 문자열로 변환됩니다. 이 장의 일부 함수(예: LEAST() 및 GREATEST())에는 1(TRUE), 0(FALSE) 및 NULL이 포함되지 않습니다. 그러나 결과 값은 다음 규칙에 따라 작동하는 비교 연산을 기반으로 합니다. MySQL은 다음 규칙에 따라 숫자 비교를 수행합니다. 하나 또는 두 매개변수가 모두 NULL인 경우, 그렇지 않은 경우 NULL-안전한 96b4fef55684b9312718d5de63fb7121 및 기타 연산자의 경우 비교 연산의 결과는 NULL입니다. 동일한 비교 연산의 두 매개변수가 모두 문자열인 경우 문자열을 기준으로 비교가 이루어집니다. 두 매개변수가 모두 정수인 경우 정수로 비교하세요. 16진수 값은 숫자로 비교할 필요가 없을 때 2진수 문자열로 처리됩니다. 매개변수 중 하나가 TIMESTAMP 또는 DATETIME 열이고 다른 매개변수가 상수인 경우 비교 전에 상수가 타임스탬프로 변환됩니다. 이는 ODBC가 보다 원활하게 진행되도록 하기 위한 것입니다. 이는 IN()의 매개변수에는 적용되지 않습니다. 신뢰성을 높이기 위해 일반적으로 비교 시 완전한 날짜/날짜/시간 문자열이 사용됩니다. 다른 경우에는 인수가 부동 소수점 숫자로 비교됩니다. 기본적으로 문자열 비교에서는 대소문자를 구분하지 않으며 기존 문자 집합을 사용합니다(기본적으로 cp1252 Latin1, 영어에도 적합). 비교를 위해 CAST() 함수를 사용하여 값을 다른 유형으로 변환할 수 있습니다. CONVERT()를 사용하여 문자열 값을 다른 문자 집합으로 변환합니다. 다음 예에서는 비교 작업에서 문자열을 숫자로 변환하는 과정을 보여줍니다. mysql> SELECT 1 > '6x';->mysql> 7 > '6x';
-> 1
mysql> 'x6';
-> 🎜>
mysql> SELECT 0 = 'x6';-> 1빠른 검색을 위해 문자열 열을 비교할 때 열을 사용할 수 없습니다. 찾다. str_col이 인덱스된 문자열 열인 경우 인덱스는 다음 문에서 검색 기능을 수행할 수 없습니다. SELECT * FROM tbl_name WHERE str_col=1;이유는 다양합니다. 문자열을 변환할 수 있습니다. 숫자 값 1: '1', ' 1', '1a', ... =은 다음과 같습니다: mysql> 0;-> 0mysql> SELECT '0' = 0;-> 1mysql> 0;-> 1mysql> SELECT '0.01' = 0;mysql> = 0.01;-> 196b4fef55684b9312718d5de63fb7121NULL 안전 같음 이 연산자는 = 연산자와 동일한 비교 작업을 수행하지만 둘 다인 경우 opcode는 NULL이고, 결과 값은 1이며 NULL이 아니며, 하나의 opcode가 NULL인 경우 결과 값은 0이고 NULL이 아닙니다. mysql> 1 96b4fef55684b9312718d5de63fb7121 1, NULL 96b4fef55684b9312718d5de63fb7121 NULL;->mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
-> 1, NULL, NULL
a8093152e673feb7aba1828c43532094 같지 않음:
mysql> SELECT '.01' a8093152e673feb7aba1828c43532094
-> ' 0.01';
-> 0
mysql> SELECT 'zapp' a8093152e673feb7aba1828c43532094 'zappp';
-> < ;=
작거나 같음:
mysql> SELECT 0.1 85fbd93c8f87bf9b02d751647a142351 1
d0d8f2e1502a8d36ae1d3394d4ddcb09 SELECT 2 66d5420d0536688848bd57838813f99e 0
>=
mysql> 2 >= 2;
-> 1
>
이 다음보다 큼:
mysql> ; 2;
-> 0
IS boolean_value는 boolean_value가 아닙니다.
부울 값은 TRUE, FALSE 또는 UNKNOWN일 수 있습니다. .
mysql> SELECT 1은 TRUE, 0은 FALSE, NULL은 알 수 없음;
-> 1, 1, 1
mysql> IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
-> 1, 1, 0
IS NULL IS NOT NULL
값이 NULL인지 확인합니다.
mysql> SELECT 1은 NULL, 0은 NULL, NULL은 NULL;
-> 0, 0, 1
mysql> NULL;
-> 1, 1, 0
ODBC 프로그램과 원활하게 작동하기 위해 MySQL은 IS NULL을 사용할 때 다음과 같은 추가 기능을 지원합니다.
최신 AUTO_INCREMENT 값이 있는 행을 찾기 위해 값이 생성된 직후에 다음 형식의 문을 사용합니다. SQL_AUTO_IS_NULL=0이 설정된 경우 이 작업을 실행할 수 없습니다.
NOT NULL이라는 DATE 및 DATETIME 열의 경우 다음 문을 사용하여 특정 날짜 '0000-00-00'을 찾을 수 있습니다.
o SELECT * FROM tbl_name WHERE date_column IS NULL
ODBC 자체는 '0000-00-00' 시간 값을 지원하지 않기 때문에 이 단계를 실행하려면 일부 ODBC 응용 소프트웨어를 사용해야 합니다.
expr BETWEEN min AND max
expr이 min보다 크거나 같고 expr이 max보다 작거나 같으면 BETWEEN의 반환 값은 1 또는 0입니다. 모든 매개변수가 동일한 유형인 경우 위의 관계는 표현식(min
mysql> 2와 3 사이에서 1 선택;
-> 0
mysql> 'a'와 'c' 사이에서 'b' 선택;
-> 1
mysql> 2와 '3' 사이에서 2개 선택;
-> 2와 'x-3 사이에서 2개 선택 ';
-> 0
expr NOT BETWEEN min AND max
이것은 NOT(expr BETWEEN min AND max)와 동일합니다.
· COALESCE(value,...)
반환 값은 목록에서 NULL이 아닌 첫 번째 값입니다. NULL이 아닌 값이 없으면 반환 값은 NULL입니다.
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
· GREATEST(value1,value2,...)
2개 이상의 매개변수가 있는 경우 가장 큰(최대값) 매개변수가 반환됩니다. 매개변수를 비교하는 규칙은 LEAST()와 동일합니다.
mysql>SELECT GREATEST(2,0);
->2
mysql>SELECT GREATEST(34.0,3.0,5.0,767.0);
-> 767.0
mysql> SELECT GREATEST('B','A','C');
-> 없음 인수가 NULL인 경우 GREATEST()의 반환 값은 NULL입니다.
· expr IN (값,...)
expr이 IN 목록의 값이면 반환 값은 1이고, 그렇지 않으면 반환 값은 0입니다. 모든 값이 상수인 경우 해당 계산 및 분류는 expr 유형을 기반으로 합니다. 이때 정보 검색에는 이진 검색이 사용됩니다. IN 값 목록이 모두 상수로 구성되어 있다면 IN이 매우 빠르다는 뜻입니다. expr이 대소문자를 구분하는 문자열 표현식인 경우 문자열 비교도 대소문자를 구분하여 수행됩니다.
mysql> SELECT 2 IN (0,3,5,'wefwf');
-> 0
mysql> SELECT 'wefwf' IN (0,3 ,5,'wefwf');
-> 1
IN 목록에 나열되는 값의 개수는 max_allowed_packet 값에 의해서만 제한됩니다.
SQL 표준에 따르기 위해 왼쪽의 표현식이 NULL이거나, 테이블에서 일치하는 항목을 찾을 수 없거나, 테이블의 표현식이 NULL인 경우 IN All의 반환 값은 다음과 같습니다. NULL입니다.
IN() 구문을 사용하여 특정 유형의 하위 쿼리를 작성할 수도 있습니다.
· expr NOT IN (값,...)
NOT(expr IN (값,...))과 같습니다.
ISNULL(expr)
expr이 NULL이면 ISNULL()의 반환 값은 1이고, 그렇지 않으면 반환 값은 0입니다.
mysql> SELECT ISNULL(1+1);
-> 0
mysql> SELECT ISNULL(1/0);
-> 🎜>
=를 사용하여 NULL 값을 비교하는 것은 일반적으로 오류입니다. ISNULL() 함수는 IS NULL 비교 연산자와 일부 동일한 특성을 가지고 있습니다. IS NULL 에 대한 참고 사항을 참조하세요. · INTERVAL(N,N1,N2,N3,...)N e2cc8cbc089399a503efcf6835fec4c1 3.0mysql> SELECT LEAST('B','A','C');-> 위의 변환 규칙은 일부 경계에서 이상한 결과를 생성합니다.mysql & gt; Select Cast (Least (3600, 9223372036854775808.0) as Signed); 정수 컨텍스트. 정수 표현은 숫자 값을 보존하는 데 도움이 되지 않으므로 부호 있는 정수를 포함합니다. 4. 논리 연산자 SQL에서는 모든 논리 연산자의 평가 결과가 TRUE, FALSE 또는 NULL(UNKNOWN)입니다. MySQL에서는 1(TRUE), 0(FALSE), NULL로 표시됩니다. 대부분은 다른 데이터베이스 SQL에 공통적이지만 일부 서버는 TRUE에 대해 0이 아닌 값을 반환할 수 있습니다. NOT !논리적 NOT. 피연산자가 0이면 반환된 값은 1이고, 피연산자가 0이 아니면 반환된 값은 0이며, 피연산자가 NOT NULL이면 반환된 값은 NULL입니다. mysql> SELECT NOT 10;-> 0mysql> SELECT NOT 0; mysql> NULL 아님;mysql> SELECT (1+1);mysql> SELECT !1+1;-> 1표현식은 (!1)+1과 동일한 방식으로 평가되므로 결과는 1입니다. AND &&논리 AND. 모든 피연산자가 0이 아니고 NULL이 아니면 계산된 결과는 1입니다. 하나 이상의 피연산자가 0이면 결과는 0입니다. 다른 경우에는 반환 값이 NULL입니다. mysql> SELECT 1 && 1;-> 1mysql> SELECT 1 && 0;-> 🎜>mysql> SELECT 1 && NULL;-> NULLmysql> SELECT 0 && NULL;-> SELECT NULL && 0;-> 0OR ||논리적 OR. 두 피연산자가 모두 NULL이 아닌 경우 두 피연산자 중 하나가 0이 아니면 결과는 1이고, 그렇지 않으면 결과는 0입니다. 한 피연산자가 NULL인 경우 다른 피연산자가 0이 아니면 결과는 1이고, 그렇지 않으면 결과는 NULL입니다. 두 피연산자가 모두 NULL이면 결과는 NULL입니다. mysql> 1 || 1;-> 1-> >
mysql> 0 || 0;
-> 0
mysql> NULL;
-> 🎜>mysql> 1 || NULL;
-> 1
XOR
논리적 XOR. 피연산자가 NULL인 경우 반환 값은 NULL입니다. NULL이 아닌 피연산자의 경우 홀수 피연산자가 0이 아니면 계산된 결과는 1이고, 그렇지 않으면 0입니다.
mysql> SELECT 1 XOR 1;
-> 0
mysql> SELECT 1 XOR NULL;
-> ; NULL
mysql> SELECT 1 XOR b의 계산은 (a AND (NOT b)) OR ((NOT a) AND b)와 동일합니다.