MySQL のこの演算子 <=> とは何ですか? 質問する

MySQL のこの演算子 <=> とは何ですか? 質問する

以前の開発者が書いたコードに取り組んでいるのですが、クエリに次のように書かれています。

WHERE p.name <=> NULL

このクエリの はどういう<=>意味ですか? と等しいものなのでしょうか=? それとも構文エラーでしょうか?

しかし、エラーや例外は表示されません。<>=は既にわかっています!=マイグレーション

ベストアンサー1

要約

それはNULL安全で平等オペレーター。

通常の=演算子と同様に、 2 つの値が比較され、結果は0(等しくない) または1(等しい) のいずれかになります。つまり、および が'a' <=> 'b'生成されます。0'a' <=> 'a'1

通常の=演算子とは異なり、 の値にはNULL特別な意味がないため、 がNULL結果として得られることはありません。つまり、'a' <=> NULLは を生成し0NULL <=> NULLは を生成します1

使いやすさ

NULLこれは、両方のオペランドが含まれている可能性があり、2 つの列間で一貫した比較結果が必要な場合に役立ちます。

もう 1 つの使用例は、準備されたステートメントを使用する場合です。次に例を示します。

... WHERE col_a <=> ? ...

ここで、プレースホルダーはスカラー値にすることも、NULLクエリについて何も変更せずに使用することもできます。

関連演算子

さらに<=>、 と比較するために使用できる 2 つの演算子NULL、つまりIS NULLともありますIS NOT NULL。これらは ANSI 標準の一部であるため、<=>MySQL 固有の とは異なり、他のデータベースでもサポートされています。

これらは MySQL の特殊化と考えることができます<=>:

'a' IS NULL     ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)

これに基づいて、特定のクエリ (フラグメント) をより移植性の高いものに変換できます。

WHERE p.name IS NULL

サポート

SQL:2003 標準では、<=>次の形式で MySQL の演算子とまったく同じように機能する述語が導入されました。

IS [NOT] DISTINCT FROM 

以下は普遍的にサポートされていますが、比較的複雑です。

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 1
     ELSE 0
END = 1

おすすめ記事