달력

42025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
반응형

출처 : http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01&m_no=21700&cat1=12&cat2=351&cat3=363&lang=k



12.1.3. 비교 함수와 연산자

 

비교 연산의 결과는 1 (TRUE), 0 (FALSE), 또는 NULL가 된다이러한 연산은 
숫자 및 스트링에서 실행된다스트링은 자동으로 숫자로 변환되며 필요할 경우
에는 숫자를 스트링으로 변환 시킬 수도 있다.
 
이 섹션에 있는 몇몇 함수들 (LEAST() 및 GREATEST()와 같은 함수들)은 1 
(
TRUE), 0 (FALSE), 또는 NULL이 아닌 값 자체를 리턴 한다하지만이러한 
함수들은 Section 12.1.2, “ 계산에서의 타입 변환에서 설명한 규칙에 따
라서 실행된 비교 연산에 근거하여 값을 리턴한다.
 
비교 연산의 목적에 맞게 어떤 값을 특정 타입으로 변환하기 위해서는CAST() 
함수를 사용하면 된다스트링 값은 CONVERT()을 사용하면 서로 다른 문자 셋
으로 변환 시킬 수가 있다. Section 12.8, “캐스트(Cast) 함수  연산자를 참조.
 
디폴트로는스트링 비교 연산은 문자 크기를 구분하지 않으며 현재(current)의 
문자 셋을 사용한다디폴트는 
latin1 (cp1252 West European)이며이것은 영어
에서도 잘 동작을 한다.
  • =

같음(equal):

mysql> SELECT 1 = 0;
        -> 0
mysql> SELECT '0' = 0;
        -> 1
mysql> SELECT '0.0' = 0;
        -> 1
mysql> SELECT '0.01' = 0;
        -> 0
mysql> SELECT '.01' = 0.01;

        -> 1   

  • <=>

NULL-세이프(safe) 등호이 연산자는 = 연산자와 같은 등식 비교 연산
을 실행하지만양쪽의 연산자가 모두 
NULL이면NULL 대신에 1그리고 
하나의 연산자만 
NULL이면NULL 대신에 0 을 리턴한다.

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
        -> 1, NULL, NULL        
  • <>!=

같지 않음(Not equal):

mysql> SELECT '.01' <> '0.01';
        -> 1
mysql> SELECT .01 <> '0.01';
        -> 0
mysql> SELECT 'zapp' <> 'zappp';
        -> 1 
  • <=

작거나 같음:

mysql> SELECT 0.1 <= 2;
        -> 1
  • <

보다 작음:

mysql> SELECT 2 < 2;
        -> 0
  • >=

크거나 같음:

mysql> SELECT 2 >= 2;
        -> 1
  • >

보다 큼:

mysql> SELECT 2 > 2;
        -> 0
  • IS boolean_valueIS NOT boolean_value

불리안 값에 대응해서 값을 테스트 하는데여기에서 boolean_value 은 
TRUEFALSE, or UNKNOWN이 될 수 있다.

mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
        -> 1, 1, 1
mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
        -> 1, 1, 0

IS [NOT] boolean_value 신텍스는 MySQL 5.0.2에서 추가 되었다.

  • IS NULLIS NOT NULL

값이 NULL인지 아닌지를 테스트

mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
        -> 0, 0, 1
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
        -> 1, 1, 0 
ODBC 프로그램과 잘 동작을 하도록 하기 위해서, MySQLIS NULL
사용할 때 아래와 같은 추가적인 기능들을 지원한다:
    • 값을 생성한 다음에 곧바로 아래와 같은 명령문을 입력하면 가장 
      최근의 
      AUTO_INCREMENT 값을 가지고 있는 열을 찾을 수가 있다:
o         SELECT * FROM tbl_name WHERE auto_col IS NULLNULL

이러한 동작은 SQL_AUTO_IS_NULL=0로 설정을 하면 비 활성화 
시킬 수가 있다. Section 13.5.3, “SET 신텍스를 참조.

    • NOT NULL로 선언된 DATE 및 DATETIME 컬럼에 대해서는아래와 
      같은 명령문을 사용하면 특수 날짜인 
      '0000-00-00'을 찾을 수가 있다:
o       SELECT * FROM tbl_name WHERE date_column IS NULL

이것은 ODBC가 '0000-00-00' 와 같은 날짜 값을 지원하지 않기 
때문에 어떤 경우의 어플리케이션을 실행하기 위해서 필요할 때가 있다.

  • expr BETWEEN min AND max

만일 expr 가 min 보다 크거나 같고 expr 가 max 보다 작거나 같으면BETWEEN
은 1을 리턴하고그렇지 않으면 0 을 리턴 한다이것은 모든 인수가 동일한 타입일 
경우의 수식 
(min <= expr AND expr <= max)과 같다그렇지 않을 경우타입 변환이
Section 12.1.2, “수식 계산에서의 타입 변환에서 설명한 방식에 따라서 실행되지만,
세 가지 인수 모두에 적용된다.

mysql> SELECT 1 BETWEEN 2 AND 3;
        -> 0
mysql> SELECT 'b' BETWEEN 'a' AND 'c';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND '3';
        -> 1
mysql> SELECT 2 BETWEEN 2 AND 'x-3';
        -> 0
  • expr NOT BETWEEN min AND max

이것은 NOT (expr BETWEEN min AND max)과 동일하다.

  • COALESCE(value,...)

리스트에 있는 첫 번째 논(non)-NULL 을 리턴하거나또는 논(non)-NULL 값이 
없을 경우에는 
NULL을 리턴한다.

mysql> SELECT COALESCE(NULL,1);
        -> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL
  • GREATEST(value1,value2,...)

두 개 이상의 인수를 사용하면그 중에 가장 큰 인수 값을 리턴 한다인수들은 
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');
        -> 'C'

MySQL 5.0.13 이전 버전에서는GREATEST()은 모든 인수가 NULL 일 경우에만 
NULL을 리턴한다. 5.0.13 이후에는인수 중의 하나가 NULL 이면 NULL을 리턴한다.

  • expr IN (value,...)

만일 expr 이 IN 리스트에 있는 값들 중의 하나와 같게 되면 1그렇지 않으면 0 을 
리턴한다만일 모든 값이 상수라면그 값들은 
expr 의 타입에 따라서 값이 계산된 
후에 정렬이 된다그런 다음에아이템에 대한 검색은 바이너리 검색을 통해서 
실행된다이것은만일 This means 
IN 의 값 리스트가 전체적으로 상수로 구성되어 
있다면 
IN이 매우 빠르다는 것을 의미하는 것이다그렇지 않을 경우에는
Section 12.1.2, “수식 계산에서의 타입 변환
에서 설명한 규칙에 따라서 타입 변환이
일어나지만모든 인수에 적용이 된다.

mysql> SELECT 2 IN (0,3,5,'wefwf');
        -> 0
mysql> SELECT 'wefwf' IN (0,3,5,'wefwf');
        -> 1

IN 리스트에 있는 값의 번호는 max_allowed_packet 값에 의해서만 한정이 된다.

표준 SQL을 따르기 위해서IN 은 왼쪽 부분의 수식이 NULL 일 경우 뿐만 아니라
리스트에서 매치되는 것을 발견하지 못하고 리스트에 있는 수식 중의 하나가 
NULL일 
경우에도 
NULL을 리턴한다IN() 신텍스는 특정 타입의 서브 쿼리를 작성할 때에도 
사용할 수가 있다
Section 13.2.8.3, “ANYIN그리고 SOME  사용하는 서브 쿼리
를 참조.

  • expr NOT IN (value,...)

NOT (expr IN (value,...))과 동일한 것임.

  • ISNULL(expr)

만일 expr 이 NULL 이라면ISNULL() 은 1 그렇지 않을 경우라면 0 을 리턴한다.

mysql> SELECT ISNULL(1+1);
        -> 0
mysql> SELECT ISNULL(1/0);
        -> 1

can be used instead of = to test whether 어떤 값이 NULL인지 아닌지를 테스트 
하기 위해서 = 대신에
 ISNULL() 을 사용할 수도 있다. (= 를 사용해서 어떤 값을 
NULL 과 비교하면 항상 거짓(false)이 나온다.) 
ISNULL() 함수는 IS NULL 비교 연산자와 함께 특정 동작을 공유한다
IS NULL에 대한 설명을 참조할 것.

  • INTERVAL(N,N1,N2,N3,...)

N < N1 일 경우에는 0 N < N2 과 같은 순서일 경우에는 1 또는 N 이 
NULL이면 -1을 리턴한다모든 인수는 정수로 다루어진다이 함수에 대해서는 
N1 < N2 < N3 < ... < Nn 이 제대로 동작 되어야 한다그 이유는 여기에서는 
바이너리 검색이 사용되기 때문이다.

mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
        -> 3
mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);
        -> 2
mysql> SELECT INTERVAL(22, 23, 30, 44, 200);
        -> 0
  • LEAST(value1,value2,...)

두 개 이상의 인수를 사용하면가장 작은 인수 값을 리턴한다
인수들은 아래의 규칙에 따라서 비교가 된다:

    • 만일 리턴 값이 INTEGER 문맥에서 사용되거나 또는 모든 인수가 정수 
      값이라면그 인수들은 정수로 비교가 된다.
    • 만일 리턴 값이 REAL 문맥에서 사용되거나 또는 모든 인수가 실수 값
      (real value)이라면인수들은 실수(real)로 비교된다.
    • 만일 어떤 인수가 문자 크기에 민감한 스트링이라면그 인수는 문자 
      크기를 구분하는 스트링으로 비교가 된다.
    • 이외의 모든 경우에는인수들은 문자 크기와는 상관없는 스트링으로 
      비교가 된다.

MySQL 5.0.13 이전의 경우LEAST() 은 모든 인수가 NULL 일 경우에만 
NULL을 리턴한다. 5.0.13 이후에는어떤 인수가 NULL 이면 NULL을 리턴한다.

mysql> SELECT LEAST(2,0);
        -> 0
mysql> SELECT LEAST(34.0,3.0,5.0,767.0);
        -> 3.0
mysql> SELECT LEAST('B','A','C');
        -> 'A'

위의 변환 규칙은 어떤 경계 라인(borderline)의 경우에는 예상하지 못한 
결과를 만들 수도 있다는 점을 알아 두기 바란다:

mysql> SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED);

        -> -9223372036854775808

 

위의 결과가 나오는 이유는, MySQL이 9223372036854775808.0을 정수 문맥에서 
읽기 때문이다위의 값을 가지기 위해서는 정수 표현식이 좋지 않기 때문에
이것을 부호화된 정수 타입으로 만들었다.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|