Heim  >  Artikel  >  Datenbank  >  MySQL-Grundlagen-Tutorial 5 – Operatoren

MySQL-Grundlagen-Tutorial 5 – Operatoren

黄舟
黄舟Original
2017-02-24 11:07:55801Durchsuche


1. Operatorpriorität

Die folgende Liste zeigt die Reihenfolge der Operatorpriorität von niedrig nach hoch. In derselben Zeile aufgeführte Operatoren haben dieselbe Priorität.

:=

||, OR, ELSE

=, 96b4fef55684b9312718d5de63fb7121, >=, >, 59ed3ba4284a0a81c059290362cbdd58, !=, IS, LIKE, REGEXP, IN

|

&

071af19a55f4da1989e8c02b755ba052>

-, +

*, /, p, %, MOD

^

- (unäres Minuszeichen), ~ (unäre Bitinversion)

!

BINARY, COLLATE

Kommentare

: Wenn der SQL-Modus HIGH_NOT_PRECEDENCE aktiviert ist, ist die Priorität von NOT dieselbe wie die des !-Operators.

2. Klammern

( ... ) verwenden Sie Klammern, um die Reihenfolge der Operationen von Ausdrücken anzugeben, zum Beispiel:

  • 3. Vergleichsfunktionen und Operatoren

    Das Ergebnis der Vergleichsoperation ist 1 (WAHR), 0 (FALSCH) oder NULL. Diese Operationen können auf Zahlen und Zeichenfolgen angewendet werden. Zeichenfolgen werden automatisch in Zahlen umgewandelt, und Zahlen werden bei Bedarf automatisch in Zeichenfolgen umgewandelt.
    mysql> SELECT 1+2*3;
            -> 7
    mysql> SELECT (1+2)*3;
            -> 9
  • Einige Funktionen in diesem Kapitel (z. B. LEAST() und GREATEST()) enthalten nicht 1 (TRUE), 0 (FALSE) und NULL. Der resultierende Wert basiert jedoch auf einer Vergleichsoperation, die nach den folgenden Regeln arbeitet:

MySQL führt numerische Vergleiche nach den folgenden Regeln durch:

Wenn vorhanden Ein oder zwei Parameter sind NULL. Sofern keine Operatoren wie NULL-safe 96b4fef55684b9312718d5de63fb7121 verwendet werden, ist das Ergebnis der Vergleichsoperation NULL.

    Wenn die beiden Parameter in derselben Vergleichsoperation beide Zeichenfolgen sind, wird der Vergleich als Zeichenfolgen durchgeführt.
  • Wenn beide Parameter Ganzzahlen sind, basiert der Vergleich auf Ganzzahlen.
  • Hexadezimale Werte werden als Binärzeichenfolgen behandelt, wenn sie nicht als Zahlen verglichen werden müssen.
  • Wenn einer der Parameter eine TIMESTAMP- oder DATETIME-Spalte ist und die anderen Parameter Konstanten sind, werden die Konstanten vor dem Vergleich in Zeitstempel konvertiert. Der Zweck besteht darin, den Ablauf von ODBC reibungsloser zu gestalten. Beachten Sie, dass dies nicht für Parameter in IN() gilt! Aus Gründen der Zuverlässigkeit werden bei Vergleichen normalerweise vollständige Datums-/Datums-/Uhrzeitzeichenfolgen verwendet.
  • In anderen Fällen werden Argumente als Gleitkommazahlen verglichen.
  • Standardmäßig berücksichtigen Zeichenfolgenvergleiche die Groß-/Kleinschreibung nicht und verwenden den vorhandenen Zeichensatz (standardmäßig cp1252 Latin1, auch für Englisch geeignet).
  • Zum Vergleich können Sie die Funktion CAST() verwenden, um einen Wert in einen anderen Typ zu konvertieren. Verwenden Sie CONVERT(), um einen Zeichenfolgenwert in einen anderen Zeichensatz zu konvertieren.

  • Das folgende Beispiel veranschaulicht den Prozess der Konvertierung einer Zeichenfolge in eine Zahl in einer Vergleichsoperation:

Beachten Sie, dass MySQL beim Vergleich einer Zeichenfolgenspalte mit derselben Zahl die Spalte nicht verwenden kann Index für schnelle Suche. Wenn

str_col

eine indizierte Zeichenfolgenspalte ist, kann der Index die Suchfunktion in der folgenden Anweisung nicht ausführen:

SELECT * FROM
mysql> SELECT 1 > '6x';
-> 0
mysql> SELECT 7 > '6x';
-> 1
mysql> SELECT 0 > 'x6';
-> 0
mysql> SELECT 0 = 'x6';
-> 1
tbl_name

WHERE str_col =1;

Der Grund dafür ist, dass viele verschiedene Zeichenfolgen in den Wert 1 umgewandelt werden können: '1', ' 1', '1a', ...=

    ist gleich:
96b4fef55684b9312718d5de63fb7121

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-sicher gleich. Dieser Operator führt die gleiche Vergleichsoperation wie der =-Operator aus, aber wenn beide Opcodes NULL sind, ist der resultierende Wert 1 statt NULL, und wenn ein Opcode NULL ist, ist der resultierende Wert 0 und nicht NULL.
a8093152e673feb7aba1828c43532094 !=

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
-> 1, NULL, NULL
    ist nicht gleich:
56ec429021439e4051ccfd26d1b2fe37=

mysql> SELECT 2 < 2;
-> 0
    ist größer oder gleich:
> >

mysql> SELECT 2 >= 2;
-> 1
Testen Sie einen Wert basierend auf einem booleschen Wert, wobei der boolesche Wert WAHR, FALSCH oder UNBEKANNT sein kann.
  • IS NULL IS NOT NULL

mysql> SELECT 2 > 2;
-> 0
Überprüft, ob ein Wert NULL ist.
  • Um reibungslos mit ODBC-Programmen zu arbeiten, unterstützt MySQL bei Verwendung von IS NULL die folgenden zusätzlichen Funktionen:

    Nachdem ein Wert generiert wurde, Führen Sie sofort eine Anweisung im folgenden Format aus, um die Zeile mit dem neuesten AUTO_INCREMENT-Wert zu finden:

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
o SELECT * FROM
    tbl_name
  • WHERE

    auto_col

    IST 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大于或等于 min 且expr 小于或等于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)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn