設定操作からMySQLへのNULLが見つからない問題を解決する

設定操作からMySQLへのNULLが見つからない問題を解決する

興味深い発見:

合計 1000 件のレコードを含むテーブルがあります。クエリ ステートメントは次のようになります。

#クエリステートメント1
# テーブル内で id に 'A' または 'B' または 'C' が含まれるフィールドを検索します。select * from table1 where id like '%A%' or id like '%B%' or id like '%C%';
#300 件の結果が見つかりました

まあ、クエリは正常で、300 件のレコードがあります。

次に、クエリをランダムに再度入力しました...:

#クエリステートメント2
# テーブル内で id に 'A'、'B'、または 'C' が含まれないフィールドを検索します。select * from table1 where id not like '%A%' and id not like '%B%' and id not like '%C%';
#400 件の結果が見つかりました

さて、400 個のアイテムが見つかりました... 何ですか? !たった400? ? 700個くらいあるんじゃないの? ! !

雷に打たれました。どうしたのでしょうか? ?

論理的には、「ID に 'A' または 'B' または 'C' が含まれるテーブル内のフィールドを検索する」は、「ID に 'A'、'B'、または 'C' が含まれないテーブル内のフィールドを検索する」と同じになります。これは集合演算によって決定されます!

「テーブル内のフィールドのうち、ID に「A」または「B」または「C」が含まれるフィールドを見つけます」>> 次のように考えます >> A∪B∪C

「テーブル内の ID に 'A'、'B'、または 'C' が含まれないフィールドを検索します」>> 次のように考えます >> ∁UA∩∁UB∩∁UC

しかし、演算規則によれば、∁U(A∪B∪C) = ∁UA ∩ ∁UB ∩ ∁UC であることがわかります。

つまり、2 つのクエリ ステートメントの結果は補完的であるべきではないでしょうか? ?理論的には、行の合計は 1000 になるはずですが、なぜ 300 が欠落しているのでしょうか?

それは奇妙ですね。何が悪かったのでしょうか? ?

したがって、クエリ ステートメントを変更します。

#クエリステートメント3
# テーブル内で id に 'A'、'B'、'C' が含まれないフィールドを検索します。select * from table1 where id not in (select * from table1 where id like '%A%' or id like '%B%' or id like '%C%' );
#700 件の結果が見つかりました

はぁ? ?この方法でクエリ ステートメント 1 の補完セットを見つけるにはどうすればよいでしょうか?

クエリ ステートメント 2 とクエリ ステートメント 3 の結果を比較したところ、欠落している 300 件のレコードは id が NULL であったことがわかりました。

つまり、「%A%」とは異なり、NULL レコードを見つけることはできません。

理解した結果、次のことがわかりました。

もう一つの詳しい知識が見つかりました〜

補足: MySQLのクエリ値にnull値がある場合、返されるクエリ結果は常に空になることに注意してください。

これでデータベーステーブルは

次のクエリを使用すると:

ユーザーから*を選択
ユーザー名が 
(
ユーザー名を選択 
ユーザーから
id != 2 の場合
)

この時点では、サブクエリの結果には null 値が含まれているため、結果は常に、ID 2 の予想される行ではなく、空のクエリを返します。

クエリを少し変更することができます。

ユーザーから*を選択
ユーザー名が 
(
ユーザー名を選択 
ユーザーから
id != 2 かつユーザー名が null ではない
)

このとき、空のユーザー名列を除外することで、期待どおりの結果を得ることができます。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQL フィールドで NOT NULL を使用する必要があるのはなぜですか?
  • MySQL で not in を使用して null 値を含める問題を解決する
  • MySQL の null と not null、null と空の値の違いの詳細な説明''''''''
  • MySQL でテーブルを作成するときの NULL と NOT NULL の使用方法の詳細な説明
  • MySQL の NOT IN 充填ピットの NULL 列の問題の解決方法
  • MySQL の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?
  • MySQL クエリの空のフィールドまたは空でないフィールド (null または null ではない)
  • mysql は、含まれていない、左結合、IS NULL、NOT EXISTS の効率の問題のレコードです
  • MySQL の null 制約のケースの説明

<<:  ハイパーリンクを開くターゲットのテスト

>>:  Net Core実装プロセス分析のDoc​​kerインストールと展開

推薦する

eCharts でパーセンテージ付きの横棒グラフを実装する方法

目次サンプルコードレンダリングコード分​​析要約するサンプルコード var データ = [220, ...

MySQL 圧縮パッケージ版 zip インストール設定方法

圧縮版の記事ではデータの初期化がされていないなどいくつか問題があったため、Windows にインスト...

LinuxベースのApacheウェブサイトサービス構成の詳細な説明

オープンソース ソフトウェアである Apache は、最も広く使用されている Web アプリケーショ...

ウェブページのカラーマッチングスキルについての簡単な説明(フロントエンド開発者必読)

一般的に、Web ページの背景色は、より柔らかく、よりシンプルで、より明るく、暗いテキストとマッチし...

20個のJavaScriptワンラインコードを共有する

目次1. ブラウザのクッキーの値を取得する2. RGBを16進数に変換する3. クリップボードにコピ...

優れたウェブワイヤーフレーム設計・制作ツール13選を紹介

プロジェクトの作業を開始するときは、ワイヤーフレームを使用してアイデアをスケッチすることが重要です。...

MySQL の order by ステートメントの最適化方法の詳細な説明

この記事では、ORDER BY文の最適化について学びます。その前に、インデックスの基礎的な理解が必要...

MYSQLが中国語を認識できない問題の恒久的な解決策

ほとんどの場合、MySQL はインストールしたばかりのときは中国語をサポートしません。これはエンコー...

Vue で PC 解像度の適応を実装するためのサンプルコード

目次プラン依存関係をインストールする依存関係の導入pxをremに変換するFlexible.jsを変更...

HTML テーブル マークアップ チュートリアル (18): テーブル ヘッダー

<br />ヘッダーはテーブルの最初の行を参照します。ヘッダー内のテキストは中央揃えで太...

CentOS8でのnmcliの使い方の詳しい説明

RHEL8/CentOS8 に基づく一般的な nmcli コマンド # IP を表示する (ifco...

HTML thead タグの定義と使用法の詳細な紹介

コードをコピーコードは次のとおりです。 <thead> <!– 最初の 2 行をヘ...

Vue プロジェクトの最初の画面のパフォーマンス最適化コンポーネントの実践ガイド

目次Vue ファースト スクリーン パフォーマンス最適化コンポーネント説明するインターセクションオブ...

大規模なデータテーブルのコピー効率を向上させるMySQLソリューション

序文この記事では主に、MySQL で大規模なデータ テーブルのコピーの効率を向上させることに関する関...

ROS2のインストールとdocker環境の使い方について

目次Docker を使用する理由は何ですか? DockerのインストールROSイメージを取得するRO...