CROSS MySQLのチュートリアルのJOINのアプリケーションを紹介

@
このブログは2つのブログから翻訳されています。

  • http://www.mysqltutorial.org/mysql-cross-join/
  • https://www.w3resource.com/mysql/advance-query-in-mysql/mysql-cross-join.php

    1.クロスは、はじめに参加します

    MySQLのクロス結合は、内側と外側のジョイン異なるMySQLで接続され、相互の接続は、結合、実際には、直交接続を使用することです。MySQLでは、句クロス結合WHERE、クロス結合を使用しない場合、結果セットは、二列の対応テーブルの生成物である、結果セットを生成します。典型的には、各テーブルにはn行mを有する場合、結果セットは、n * m個の行を有することになります

Https://www.w3resource.com/mysql/advance-query-in-mysql/mysql-cross-join.php参照ピクチャは、クロスジョインのプロセスのデモンストレーションとして、このプロセスは、実際に、デカルト結合問合せであります
ここに画像を挿入説明

2.クロスは、使用に参加します

クロスは、使用法に参加します:

SELECT * FROM t1
CROSS JOIN t2;

注意:時間やキーワードを使用して必要とされていない参加渡り、これは内部の異なる参加し、参加

T1およびT2における句条件は関係テーブルを有する場合追加する場合は、作業クロスINNERは、以下に示すクエリに類似句をJOIN JOIN。

SELECT * FROM t1
CROSS JOIN t2
WHERE t1.id = t2.id;

[OK]を、その後、クロスはテーブルの一例として導出されたテーブルに参加含まクリック

SELECT * 
FROM table111
LEFT JOIN(table112 CROSS JOIN table113)
ON table111.id=table113.id;

OK、それはクロスの簡単な使用を導入するhttp://www.mysqltutorial.org/mysql-cross-join/例を取る今すぐ登録導入されています。

まず、新しいデータベースsalesdbを作成します。

CREATE DATABASE IF NOT EXISTS salesdb;

第二に、新しいデータベースTESTDBに電流スイッチングデータ:

USE testdb;

Salesdbは、データベースに新しいテーブルを作成します。

  • 商品マスタデータテーブルには、製品ID、製品名や販売価格などの製品が含まれています。
  • テーブルには、店が製品を販売しています。
  • 表には、特定の店舗に番号と日付によって販売された製品の売上高が含まれています。

CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    product_name VARCHAR(100),
    price DECIMAL(13,2 )
);
 
CREATE TABLE stores (
    id INT PRIMARY KEY AUTO_INCREMENT,
    store_name VARCHAR(100)
);
 
CREATE TABLE sales (
    product_id INT,
    store_id INT,
    quantity DECIMAL(13 , 2 ) NOT NULL,
    sales_date DATE NOT NULL,
    PRIMARY KEY (product_id , store_id),
    FOREIGN KEY (product_id)
        REFERENCES products (id)
        ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (store_id)
        REFERENCES stores (id)
        ON DELETE CASCADE ON UPDATE CASCADE
);

3つの表にデータ。我々は3つの製品2北と南で販売iPhone、iPadとMacBook Proのショップがあるとします。

INSERT INTO products(product_name, price)
VALUES('iPhone', 699),
      ('iPad',599),
      ('Macbook Pro',1299);
 
INSERT INTO stores(store_name)
VALUES('North'),
      ('South');
 
INSERT INTO sales(store_id,product_id,quantity,sales_date)
VALUES(1,1,20,'2017-01-02'),
      (1,2,15,'2017-01-05'),
      (1,3,25,'2017-01-05'),
      (2,1,30,'2017-01-02'),
      (2,2,35,'2017-01-05');

OK、ビジネスシナリオ:今各商品の売上高は、各ストアの統計の合計は、どのくらいのお金ですか?

明らかに、あなたは、このSQL良いを書くことができますどのようなことで、その後SUM(数量*価格)、グループと

SELECT 
  sto.`store_name`,
  pro.`product_name`,
  SUM(quantity * price) AS revenue
FROM
  sales sal 
  INNER JOIN stores sto 
    ON sto.`id` = sal.`store_id`
  INNER JOIN products pro
    ON sal.`product_id` = pro.`id`
  GROUP BY sto.`store_name`,pro.`product_name`;

ここに画像を挿入説明
[OK]を、商品を考え出していない販売していないので、彼はビジネスのビジネスニーズを満たしていませんでしたが、すべての店舗の商品を数えることであるので、あなたはすべての店舗の商品ミックスを来る、デカルトに参加相互に接続することができます見てましたデータ

デカルト結合されたデータのクエリSQL:

SELECT 
  a.`store_name`,
  b.product_name
from stores cross join products

ここに画像を挿入説明

統計フロントSQLはすでに持っているので、関連のSQLおよびSQLデータの統計情報の組み合わせ:

SELECT 
  a.`store_name`,
  b.product_name,
  IFNULL(c.revenue, 0) AS revenue 
FROM
  stores a 
  CROSS JOIN products b 
  LEFT JOIN 
    (SELECT 
      sto.`id` AS store_id,
      pro.`id` AS product_id,
      sto.`store_name`,
      pro.`product_name`,
      SUM(quantity * price) AS revenue 
    FROM
      sales sal 
      INNER JOIN stores sto 
        ON sto.`id` = sal.`store_id` 
      INNER JOIN products pro 
        ON sal.`product_id` = pro.`id` 
    GROUP BY sto.`store_name`,
      pro.`product_name`) c 
    ON a.id = c.store_id 
    AND b.id = c.product_id 
ORDER BY a.store_name ;

ここに画像を挿入説明

収入は(店舗の場合には売れなかった)NULLであれば、機能を使用してクエリが0を返す、IFNULLに注意してください。

CROSSは、この句によって、このように使用JOINを、あなたは営業担当者が特定の月に販売していない場合でも、例えば、営業担当者によって、1月の売上高を見つけるために、幅広い問題に答えることができます。

[OK]を、このブログは2つの、英語のブログの翻訳です。

  • http://www.mysqltutorial.org/mysql-cross-join/
  • https://www.w3resource.com/mysql/advance-query-in-mysql/mysql-cross-join.php

[OK]を、この2つのブログの内容はこのブログを終え、特定の英語のブログから翻訳、しかし、ブログのこの2つの例が良いので、クロス結合引用し、この中国のブログに統合2つのブログの内容に理解されるであろうそのデカルトの接続の性質上、また、一括書き込みデータに使用することができますので、一般的な使用シナリオは、もちろん、上げ2つのブログの利用に加えて、クロスが参加し、対応するバッチ文言は、MySQLは私の以前のブログを参照することができ、このブログは、翻訳の本質に属していますので、ソースを明記してください

おすすめ

転載: www.cnblogs.com/mzq123/p/11783698.html