MySQL の基本チュートリアル 5 — 演算子

黄舟
リリース: 2017-02-24 11:07:55
オリジナル
844 人が閲覧しました


1. 演算子の優先順位

次のリストは、演算子の優先順位を低いものから高いものまで示しています。同じ行にリストされている演算子は同じ優先順位を持ちます。

:=

||、OR、=、<、<>、!=、IS、LIKE、REGEXP、IN

|

&

<<, >>

-、+

*、/、p、%、MOD

^

- (単項マイナス記号)、~ (単項ビット反転)

!

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 セーフでない場合 <= > 演算子の場合、比較演算の結果は NULL になります。

同じ比較演算の 2 つのパラメーターが両方とも文字列である場合、比較は文字列に基づいて行われます。

  • 両方のパラメータが整数の場合、比較は整数に基づいて行われます。

  • 16進数値を数値として比較する必要がない場合、バイナリ文字列として処理されます。

  • パラメータの 1 つが TIMESTAMP または DATETIME 列で、他のパラメータが定数の場合、定数は比較前にタイムスタンプに変換されます。この目的は、ODBC をよりスムーズに実行できるようにすることです。これは IN() のパラメータには適用されないことに注意してください! 信頼性を高めるため、比較を行う際には通常、完全な日付時刻/日付/時刻文字列が使用されます。

  • その他の場合、引数は浮動小数点数として比較されます。

  • デフォルトでは、文字列比較では大文字と小文字が区別されず、既存の文字セット (デフォルトでは cp1252 Latin1、英語にも適しています) が使用されます。

  • 比較のために、CAST() 関数を使用して値を別の型に変換できます。 CONVERT() を使用して、文字列値を別の文字セットに変換します。
  • 次の例は、比較操作で文字列を数値に変換するプロセスを示しています:

    mysql> SELECT 1 > &#39;6x&#39;;
    -> 0
    mysql> SELECT 7 > &#39;6x&#39;;
    -> 1
    mysql> SELECT 0 > &#39;x6&#39;;
    -> 0
    mysql> SELECT 0 = &#39;x6&#39;;
    -> 1
    ログイン後にコピー
  • 同じ数値を持つ文字列カラムを比較する場合、MySQL は高速検索にカラム内のインデックスを使用できないことに注意してください。
str_col

がインデックス付きの文字列列である場合、インデックスは次のステートメントで検索機能を実行できません:

SELECT * FROM

tbl_name

WHERE

str_col

=1;その理由は、文字列にはさまざまな文字が存在するためです。数値に変換される 1: '1'、' 1'、'1a'、...

=

は次と等しい:

mysql> SELECT 1 = 0;
-> 0
mysql> SELECT &#39;0&#39; = 0;
-> 1
mysql> SELECT &#39;0.0&#39; = 0;
-> 1
mysql> SELECT &#39;0.01&#39; = 0;
-> 0
mysql> SELECT &#39;.01&#39; = 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 &#39;.01&#39; <> &#39;0.01&#39;;
-> 1
mysql> SELECT .01 <> &#39;0.01&#39;;
-> 0
mysql> SELECT &#39;zapp&#39; <> &#39;zappp&#39;;
-> 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
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 プログラムをスムーズに操作するために、MySQL は IS NULL の使用時に次の追加機能をサポートします:
値が生成された直後に次の形式のステートメントを実行して、最新の AUTO_INCREMENT 値の場所を見つけます。行:

    o SELECT * FROM
      tbl_name
    • WHERE

      auto_col

      IS NULL
    • 当设置SQL_AUTO_IS_NULL=0时,这项操作无法运行。

        • 对于命名为NOT NULL 的DATE 和DATETIME列,可通过使用如下的 语句找到特定日期 '0000-00-00':

      o SELECT * FROM tbl_name WHERE date_column IS NULL

      运行这一步需要使用一些 ODBC 应用软件,因为 ODBC本身不支持 一个 '0000-00-00'的时间值。

      • expr BETWEEN min AND max

      假如expr大于或等于 minexpr 小于或等于max, 则BETWEEN 的返回值为1,或是0。若所有参数都是同一类型,则上述关系相当于表达式 (min <= expr AND expr <= max)。其它类型的转换根据本章开篇所述规律进行,且适用于3种参数中任意一种。

      mysql> SELECT 1 BETWEEN 2 AND 3;
      -> 0
      mysql> SELECT &#39;b&#39; BETWEEN &#39;a&#39; AND &#39;c&#39;;
      -> 1
      mysql> SELECT 2 BETWEEN 2 AND &#39;3&#39;;
      -> 1
      mysql> SELECT 2 BETWEEN 2 AND &#39;x-3&#39;;
      -> 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(&#39;B&#39;,&#39;A&#39;,&#39;C&#39;);
      -> &#39;C&#39;
      ログイン後にコピー

      在没有自变量为NULL的情况下,GREATEST()的返回值为NULL。

      · expr IN (value,...)

      • expr 为IN列表中的任意一个值,则其返回值为 1 , 否则返回值为0。假如所有的值都是常数,则其计算和分类根据 expr 的类型进行。这时,使用二分搜索来搜索信息。如IN值列表全部由常数组成,则意味着IN 的速度非常之快。如expr 是一个区分大小写的字符串表达式,则字符串比较也按照区分大小写的方式进行。

      mysql> SELECT 2 IN (0,3,5,&#39;wefwf&#39;);
      -> 0
      mysql> SELECT &#39;wefwf&#39; IN (0,3,5,&#39;wefwf&#39;);
      -> 1
      ログイン後にコピー

      IN 列表中所列值的个数仅受限于 max_allowed_packet 值。

      为了同SQL 标准相一致,在左侧表达式为NULL的情况下,或是表中找不到匹配项或是表中一个表达式为NULL 的情况下,IN的返回值均为NULL。

      IN() 语构也可用书写某些类型的子查询。

      · 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
      ログイン後にコピー

      使用= 的NULL 值对比通常是错误的。

      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(&#39;B&#39;,&#39;A&#39;,&#39;C&#39;);
      -> &#39;A&#39;
      ログイン後にコピー

      注意,上面的转换规则在一些边界情形中会产生一些奇特的结果:

      mysql> SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED);
      -> -9223372036854775808
      ログイン後にコピー

      发生这种情况的原因是MySQL在整数语境中读取9223372036854775808.0。整数表示法不利于保存数值,因此它包括一个带符号整数。

      4. 逻辑操作符

      在SQL中,所有逻辑 操作符的求值所得结果均为 TRUE、FALSE或 NULL (UNKNOWN)。在 MySQL中,它们体现为 1 (TRUE)、 0 (FALSE)和 NULL。其大多数都与不同的数据库SQL通用,然而一些服务器对TRUE的返回值可能是任意一个非零值。

      • NOT !

      逻辑 NOT。当操作数为0 时,所得值为 1 ;当操作数为非零值时,所得值为 0 ,而当操作数为NOT NULL时,所得的返回值为 NULL。

      mysql> SELECT NOT 10;
      -> 0
      mysql> SELECT NOT 0;
      -> 1
      mysql> SELECT NOT NULL;
      -> NULL
      mysql> SELECT ! (1+1);
      -> 0
      mysql> SELECT ! 1+1;
      -> 1
      ログイン後にコピー

      最后一个例子产生的结果为 1,原因是表达式的计算方式和(!1)+1相同。

      • AND &&

      逻辑AND。当所有操作数均为非零值、并且不为NULL时,计算所得结果为 1 ,当一个或多个操作数为0 时,所得结果为0 ,其余情况返回值为 NULL 。

      mysql> SELECT 1 && 1;
      -> 1
      mysql> SELECT 1 && 0;
      -> 0
      mysql> SELECT 1 && NULL;
      -> NULL
      mysql> SELECT 0 && NULL;
      -> 0
      mysql> SELECT NULL && 0;
      -> 0
      ログイン後にコピー
      • OR ||

      逻辑 OR。当两个操作数均为非 NULL值时,如有任意一个操作数为非零值,则结果为1,否则结果为0。当有一个操作数为NULL时,如另一个操作数为非零值,则结果为1,否则结果为 NULL 。假如两个操作数均为 NULL,则所得结果为NULL。

      mysql> SELECT 1 || 1;
      -> 1
      mysql> SELECT 1 || 0;
      -> 1
      mysql> SELECT 0 || 0;
      -> 0
      mysql> SELECT 0 || NULL;
      -> NULL
      mysql> SELECT 1 || NULL;
      -> 1
      ログイン後にコピー
      • XOR

      逻辑XOR。当任意一个操作数为 NULL时,返回值为NULL。对于非 NULL 的操作数,假如一个奇数操作数为非零值,则计算所得结果为 1 ,否则为 0 。

      mysql> SELECT 1 XOR 1;
      -> 0
      mysql> SELECT 1 XOR 0;
      -> 1
      mysql> SELECT 1 XOR NULL;
      -> NULL
      mysql> SELECT 1 XOR 1 XOR 1;
      -> 1
      ログイン後にコピー

      a XOR b 的计算等同于  (a AND (NOT b)) OR ((NOT a)和 b)。

       以上就是MySQL基础教程5 —— 操作符的内容,更多相关内容请关注PHP中文网(www.php.cn)!


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート