Where と Operator
SQL operator は、比較に使用される一連の関数であり、select ステートメントの where 句で広く使用されています。
算術演算子
算術演算子は通常、左オペランド、右オペランド、そして多くの場合、左オペランドを含む式に現れます。
+ と -
+ と - は、単項演算子または二項演算子として使用できます。単項演算子として使用する場合、+1、-2.5、-col_name のように、値に +1 または -1 を掛けることを意味します。
したがって、単項演算子 + は変更されていない値を返し、単項演算子 - はその値の符号ビットを変更します。
ユーザーは、+5 (正の値を返す)、-+2 または +-2 (負の値を返す) のように、2 つの単項演算子を重ねることができますが、2 つの連続する - 符号を使用することはできません。なぜなら、-- は次のステートメントではコメントとして解釈されるからです (ユーザーが 2 つの - 符号を使用できる場合、2 つの - 符号の間にスペースまたは括弧が必要です。例えば、-(-2) または - -2 のように、実際には +2 になります)。
+ または - が二項演算子の場合、2+2、3+1.5、col1+col2 のように、左側の値に右側の値を加算または減算することを意味します。左右の値はどちらも数値型である必要があります。
* と /
* と / は、それぞれ乗算と除算を表します。両側のオペランドはデータ型である必要があります。2 つの数値を乗算する場合。
必要に応じて、より小さいオペランドが昇格される場合があります (例えば、SMALLINT から INT または BIGINT へ)。式の結果は、次に大きい型に昇格されます。
例えば、TINYINT に INT を掛けると、BIGINT 型の結果が生成されます。2 つの数値を乗算する場合、精度が失われるのを避けるために、オペランドと式の両方の結果は DOUBLE 型として解釈されます。
ユーザーが式の結果を別の型に変換したい場合は、CAST 関数を使用して変換する必要があります。
%
剰余演算子。左オペランドを右オペランドで割った余りを返します。左右のオペランドはどちらも整数である必要があります。
&、| と ^
ビット単位演算子は、2 つのオペランドに対するビット単位 AND、ビット単位 OR、ビット単位 XOR 演算の結果を返します。両方のオペランドには整数型が必要です。
ビット単位演算子の 2 つのオペランドの型が一致しない場合、より小さい型のオペランドはより大きい型のオペランドに昇格され、対応するビット単位演算が実行されます。
複数の算術演算子を式に記述でき、ユーザーは対応する算術式を括弧で囲むことができます。算術演算子には通常、算術演算子と同じ機能を表現する対応する数学関数はありません。
例えば、% 演算子を表す MOD() 関数はありません。逆に、数学関数には対応する算術演算子はありません。例えば、べき乗関数 POW() には対応する ** 指数演算子はありません。
サポートされている算術関数は、数学関数セクションで確認できます。
BETWEEN 演算子
where 句では、式を上限と下限の両方と比較できます。 式が下限以上で、上限以下の場合、比較の結果は true になります。
構文:
expression BETWEEN lower_bound AND upper_bound
データ型:通常、式は数値型に評価されますが、他のデータ型もサポートします。下限と上限の両方が比較可能な文字であることを保証する必要がある場合は、cast() 関数を使用できます。
使用上の注意:オペランドが文字列型の場合、上限で始まる長い文字列は上限と一致しないことに注意してください。これは上限よりも大きいためです。たとえば、"between 'A' and 'M'" は 'MJ' と一致しません。
式が正しく動作することを確認する必要がある場合は、upper()、lower()、substr()、trim() などの関数を使用できます。
例:
select c1 from t1 where month between 1 and 6;
比較演算子
比較演算子は、2つの値を比較するために使用されます。=、!=、>= はすべてのデータ型に適用されます。
<> 演算子と != 演算子は同等であり、2つの値が等しくないことを示します。
IN 演算子
In operator は、VALUE コレクションと比較し、コレクション内のいずれかの要素と一致する場合に TRUE を返します。
パラメータと VALUE コレクションは比較可能である必要があります。IN operator を使用するすべての式は、OR で接続された同等の比較として記述できますが、IN の構文はよりシンプルで、より正確で、StarRocks が最適化しやすくなっています。
例:
select * from small_table where tiny_column in (1,2);
LIKE 演算子
この operator は、文字列との比較に使用されます。'_'(アンダースコア)は単一の文字に一致し、'%' は複数の文字に一致します。パラメーターは文字列全体と一致する必要があります。通常、文字列の末尾に'%'を配置する方が実用的です。
例:
mysql> select varchar_column from small_table where varchar_column like 'm%';
+----------------+
|varchar_column |
+----------------+
| milan |
+----------------+
1 row in set (0.02 sec)
mysql> select varchar_column from small_table where varchar_column like 'm____';
+----------------+
| varchar_column |
+----------------+
| milan |
+----------------+
1 row in set (0.01 sec)
論理演算子
論理演算子は BOOL 値を返します。これには、単項演算子と多項演算子が含まれ、それぞれが BOOL 値を返す式であるパラメータを処理します。サポートされている演算子は次のとおりです。
AND: 2 項演算子。AND 演算子は、左右のパラメータが両方とも TRUE として計算される場合に TRUE を返します。
OR: 2 項演算子。左右のパラメータのいずれかが TRUE として計算される場合に TRUE を返します。両方のパラメータが FALSE の場合、OR 演算子は FALSE を返します。
NOT: 単項演算子。式を反転した結果を返します。パラメータが TRUE の場合、演算子は FALSE を返します。パラメータが FALSE の場合、演算子は TRUE を返します。
例:
mysql> select true and true;
+-------------------+
| (TRUE) AND (TRUE) |
+-------------------+
| 1 |
+-------------------+
1 row in set (0.00 sec)
mysql> select true and false;
+--------------------+
| (TRUE) AND (FALSE) |
+--------------------+
| 0 |
+--------------------+
1 row in set (0.01 sec)
mysql> select true or false;
+-------------------+
| (TRUE) OR (FALSE) |
+-------------------+
| 1 |
+-------------------+
1 row in set (0.01 sec)
mysql> select not true;
+----------+
| NOT TRUE |
+----------+
| 0 |
+----------+
1 row in set (0.01 sec)
正規表現演算子
正規表現が一致するかどうかを判断します。POSIX 標準の正規表現を使用し、'^' は文字列の先頭部分に一致し、'$' は文字列の末尾に一致します。
"." は任意の 1 文字に一致し、"*" は 0 個以上のオプションに一致し、"+" は 1 個以上のオプションに一致し、"?" は貪欲な表現を意味します。正規表現は、文字列の一部だけでなく、完全な値に一致する必要があり ます。
中間部分に一致させたい場合は、正規表現の前半部分を '^. ' または '.' と記述できます。'^' と '$' は通常省略されます。RLIKE operator と REGEXP operator は同義語です。
'|' operator はオプションの operator です。'|' の両側の正規表現は、片側の条件を満たすだけで済みます。'|' operator と両側の正規表現は、通常 () で囲む必要があります。
例:
mysql> select varchar_column from small_table where varchar_column regexp '(mi|MI).*';
+----------------+
| varchar_column |
+----------------+
| milan |
+----------------+
1 row in set (0.01 sec)
mysql> select varchar_column from small_table where varchar_column regexp 'm.*';
+----------------+
| varchar_column |
+----------------+
| milan |
+----------------+
1 row in set (0.01 sec)