無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 11 関数と演算子 :: 11.1 演算子 :: 11.1.3 比較関数と演算子
« 11.1.2 式評価でのタイプ変換

11.1.4 論理演算子 »
Section Navigation      [Toggle]
  • 11.1 演算子
  • 11.1.1 演算子の優先順位
  • 11.1.2 式評価でのタイプ変換
  • 11.1.3 比較関数と演算子
  • 11.1.4 論理演算子

11.1.3. 比較関数と演算子

比較の演算の結果は、1 ( TRUE ) 、0 ( FALSE ) 、または NULL の値になります。これらの演算は、数字とストリングの両方に適応します。必要に応じて、ストリングは数字に、数字はストリングに自動的に変換されます。

このセクションの関数のうちには、1 ( TRUE ) 、0 ( FALSE ) 、または NULL 以外の値を戻すものもあります。LEAST() および GREATEST() などがその例です。しかし、それらが戻す値は、項11.1.2. 「式評価でのタイプ変換」 で説明されているルールによって行われた比較の演算に基づいています。

比較のために値を特定のタイプに変換するには、CAST() 関数を使用することができます。ストリング値は、CONVERT() を使用して、異なる文字セットに変換することが可能です。項11.8. 「キャスト関数と演算子」 を参照してください。

デフォルトによって、文字比較は大文字小文字の区別の必要はなく、現在の文字セットを使用します。デフォルトは latin1 ( cp1252 West European ) で、English でも正常に作用します。

  • =

    等しい :

    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 - 安全等価。この演算は、= 演算子のように、等価比較を行いますが、両方のオペランドが 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
    
  • <>, !=

    等しくない :

    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_value, IS NOT boolean_value

    boolean_value が TRUE か FALSE 、または 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 NULL 、IS 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 プログラムとうまく適合させるため、IS NULL を使用する場合、MySQL は次の追加機能をサポートします :

    • 一番最近の AUTO_INCREMENT 値を含む行を、その値を生成した直後に、次のフォームのステートメントを発行することによって検索することができます :

      SELECT * FROM tbl_name WHERE auto_col IS NULL
      

      この動作は、SQL_AUTO_IS_NULL=0 を設定すると無効になります。項12.5.3. 「SET 構文」 を参照してください。

    • NOT NULL として宣言された DATE および DATETIME カラムでは、次のようなステートメントを使用することで、特殊な日付 '0000-00-00' を検索することができます :

      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 <= expr AND expr <= max) と等価になります。もしくは、項11.1.2. 「式評価でのタイプ変換」 にあるルールによってタイプ変換が実施されますが、3つすべての引数に適用されます。

    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
    

    BETWEEN を日付値または時刻値と使用する場合に最善の結果を得るには、値を所望のデータ タイプに明示的に変換するため、CAST() を使用します。例 : DATETIME をふたつの DATE 値と比較する場合、DATE 値を DATETIME 値に変換します。'2001-1-1' のようなストリング定数を、DATE との比較で使用する場合、ストリングを DATE にキャストします。

  • 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,...)

    引数ふたつ以上では、最大の ( 最大値の ) 引数を戻します。それらの引数は、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'
    

    引数のどれかが NULL である場合、GREATEST() は NULL を戻します。

  • expr IN (value,...)

    expr が、IN リストのどれかの値と等しい場合は 1 を戻し、それ以外では 0 を戻します。すべての値が定数の場合、expr のタイプに基づいて評価し、分類します。その際の項目の検索は、バイナリ検索を使って行われます。これはつまり、IN は、IN 値のリストがすべて定数で構成されている場合、非常に速いということです。もしくは、項11.1.2. 「式評価でのタイプ変換」 にあるルールによってタイプ変換が実施されますが、すべての引数に適用されます。

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

    引用符で括られた値 ( ストリングなど ) と括られていない値 ( 数字など ) の比較ルールは異なるため、IN リストの引用符で括られた値と、括られていない値を決して混同しないでください。タイプの混同は、上記の理由により、結果の矛盾の原因になることがあります。例えば、IN 式を次のようには書かないでください :

    SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');
    

    正しい書き方はこのようになります :

    SELECT val1 FROM tbl1 WHERE val1 IN ('1','2','a');
    

    IN リストの値の数は、max_allowed_packet 値によってのみ制限されます。

    SQL の標準に準拠するため、IN は、左側の式が NULL である場合だけでなく、リストに一致するものがない場合、また、リストの式のひとつが NULL である場合にも、NULL を戻します。

    IN() 構文は、ある種の副問い合わせを書くのにも使用できます。項12.2.8.3. 「ANY、IN、そして 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
    

    = の代わりに、ISNULL() を使って、値が NULL であるかテストすることができます。( = で値を 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 文脈で使用されている場合、またはすべての引数が実数値である場合、それらは実数として比較されます。

    • 引数のいずれかが大文字小文字の区別のあるストリングである場合、引数は大文字小文字の区別のあるストリングとして比較されます。

    • 他のすべてのケースでは、引数は大文字小文字の区別のあるストリングとして比較されます。

    引数のどれかが NULL である場合、LEAST() は 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'
    

    上記の変換ルールは、いくつかの境界例では異常な結果を引き起こす場合がありますのでご注意ください :

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

    これは、MySQL が 9223372036854775808.09223372036854775808.0 を整数の文脈で読み取ることが原因で起こります。整数表記は値を保持するのに十分ではないので、符号付整数にラップします。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.