ホームページ >データベース >mysql チュートリアル >オプションの外部結合を使用して複数の MySQL テーブルからデータを取得し、NULL 値を処理する方法

オプションの外部結合を使用して複数の MySQL テーブルからデータを取得し、NULL 値を処理する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-21 15:34:10169ブラウズ

How to Retrieve Data from Multiple MySQL Tables Using Optional Outer Joins and Handle NULL Values?

MySQL のオプションの外部結合を使用して複数のテーブルからデータを取得する

複数のテーブルからデータをクエリする場合、すべてのテーブルが取得できない状況がよく発生します。あるテーブルの行には、別のテーブルにも対応する行があります。このような場合、欠落データにプレースホルダーを追加しながら、1 つのテーブルからすべての行を取得することが望ましいです。

次のシナリオを考えてみましょう。1 つはカテゴリ (「カテゴリ」というタイトル) 用、もう 1 つは製品用の 2 つのテーブルがあるとします。 (「製品」というタイトル)。 「products」テーブルには、「categories」テーブルの「id」列を参照する列「ownerid」があります。

クエリの例

すべてのカテゴリを選択し、それぞれの最小価格と最大価格を確認するには、次のクエリを使用できます:

SELECT
    sc.*,
    MIN(s.price) AS minp,
    MAX(s.price) AS maxp
FROM categories AS sc
LEFT JOIN products AS s
ON s.ownerid = sc.id
GROUP BY sc.id

Outer Join

ここでの重要な変更は、LEFT JOIN ステートメントの使用です。結合条件を満たす行のみを返す INNER JOIN とは異なり、OUTER JOIN は左側のテーブル (この場合は「カテゴリ」) からすべての行を返し、右側のテーブル (「製品」) の欠損値に NULL を設定します。 .

NULL 値の処理

ただし、NULL 値は望ましくない場合があります。特定のシナリオでは。製品のないカテゴリに対して NULL の代わりにデフォルト値 (0 など) を返すには、IFNULL 関数を使用できます。

SELECT
    sc.*,
    IFNULL(MIN(s.price), 0) AS minp,
    IFNULL(MAX(s.price), 0) AS maxp
FROM categories AS sc
LEFT JOIN products AS s
ON s.ownerid = sc.id
GROUP BY sc.id

考慮事項

最後に、アプリケーションの特定の要件に応じて、欠落データに対して NULL を使用するかデフォルト値を使用するかを決定することが重要です。 NULL 値は実際にはデータが存在しないことを示し、デフォルト値は想定されたデータを表します。この違いを理解することは、データの整合性を維持するために非常に重要です。

以上がオプションの外部結合を使用して複数の MySQL テーブルからデータを取得し、NULL 値を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。