COALESCE(param1, param2, ...)
最初にNULLでない値を返す。
CONCAT_WS(separator, str1, str2,...)
区切り文字付きの CONCAT(CONCAT With Separator)。separatorがNULLだとNULLを返すが、CONCATと違って、strXがNULLだとその文字列はスキップされる。
カラムタイプ DATEとDATETIME
変換しないでそのまま比較すると、結果がおかしい
JOIN句の比較とWhere句の比較は結果が異なる
select * from a left join b on a.id=b.id and b.id is null;
select * from a left join b on a.id=b.id where b.id is null;
テーブルの定義を表示するには
SHOW CREATE TABLE table_name;
SELECTで変数をセットするときLIMITに注意
select @val := col_a from a limit 0, 1;
とすると、なぜか@valには最後のcol_aが代入される
SELECTでWHERE句に変数を使用するとき宣言に注意
SELECT * FROM a WHERE @myVal IS NULL OR a.col = @myVal;
で、SET @myVal = NULL; が事前に有ると無いのでは結果が異なる
Unsigned subtraction
In some cases where an unsigned subtraction would have resulted in a signed integer, it now results in an unsigned integer.
For example, "SELECT column_int - 1 FROM t;" If column column_int is unsigned integer and value is 0, the result is 18446744073709551615, not -1.
To get the older behavior, use CAST(i - 1 AS SIGNED) to convert the expression result to a signed value.