MySQLのINNER導入JOIN句

MySQLのINNER導入JOIN句

MySQLのINNER JOIN行と列内の他の表に句マッチング表の行は、クエリは、2つのテーブルの行が含まれてできるようにします。

INNER JOIN句は、SELECTそれがに表示され、文のオプション部分FROM句の後に。

使用時にはINNER JOIN句の前に、あなたは以下の条件を指定する必要があります。

  • まず、FROM句で指定された主テーブル。
  • 第二に、接続したいメインテーブルのテーブルには、に表示されますINNER JOIN句。理論的には、複数の他のテーブルを接続することができます。しかし、より良いパフォーマンスを得るために、あなたは、テーブルの数は、(好ましくは3以下の表)に接続されるように制限する必要があります。
  • 第三に、接続状態、または述語に参加。結合条件に現れるINNER JOIN句のONキーワードの後に。つまり、テーブル内の他の行とテーブル内の行に一致するメインルールに接続されています。

INNER JOIN次のように句の構文は次のとおりです。

SELECT column_list
FROM t1
INNER JOIN t2 ON join_condition1
INNER JOIN t3 ON join_condition2
...
WHERE where_conditions;
SQL

仮定INNER JOIN句は、2つのテーブルを結合しますt1t2、のが上記の構文を簡素化してみましょう。

SELECT column_list
FROM t1
INNER JOIN t2 ON join_condition;
SQL

以下のためにt1テーブルの各行、INNER JOIN句はt2、それらが結合条件を満足するかどうかを確認するために、表の各行を比較します。接続条件が満たされた場合、INNER JOINのリターンt1t2テーブルの列に新しい行。

注意して、してくださいt1t2、テーブル内の行は、接続条件に応じて適合させなければなりません。一致が見つからない場合、クエリが空の結果セットを返します。場合は上の接続2タイムテーブルは、また、このロジックに適用されます。

以下のベン図を示しINNER JOIN原則句を。結果セットは、テーブルに2列に現れなければならないt1し、t2二つの円に示すように、断面-

IMG

MySQLのINNERでエラーに記載されている避け登録しよう

同じ列名を持つテーブルを複数接続する場合は、参照テーブルの修飾子を使用しなければならないSELECTONエラーを回避するために、列を句の列を。

例えば、場合t1t2テーブルが指名したc同じ列名必須SELECTON使用されるような、句テーブル修飾子t1.cまたはt2.cで参照されるテーブルで指定されたcカラム。

テーブル修飾子を書いて時間を節約するためには、クエリでテーブルの別名を使用することができます。たとえば、長い名前を付けることができverylonglonglong_tablename、リストの使用テーブルの別名を、そして使用しt.column、その列の参照を、代わりに使用したのverylonglonglong_tablename.columnが、あなたは、このような長いテーブル名を書いたり、使用したい場合、また、あなたの開発パートナーは、いくつかの類似したあなたを呼び出すことができなければならない:吸盤 -このようなそして!

MySQLのINNER例のJOIN

のは、見てみましょうサンプルデータベース(yiibaidb)製品(products)と製品ライン(productlines)テーブル。彼らのER図は以下の-

IMG

上記の図では、productsテーブルは、productLine参照のリストされたproductlinesテーブルのproductline列が。products表のproductLine列と呼ばれる外部キー列を。

一般的に、コネクタは、製品ライン(として、外部キー関係のテーブルを有するproductlines)、生成物(products)表。さて、あなたは次のようなデータを取得する場合-

  • 取得productsテーブルproductCodeproductName列の値を。
  • 取得productlines-説明製品ラインtextDescription列を。

この目的のために、使用することにより、INNER JOIN節のproductline下に示すように、2つのテーブルのクエリデータに一致する行の文字列を選択します。

SELECT 
    productCode, 
    productName, 
    textDescription
FROM
    products t1
        INNER JOIN
    productlines t2 ON t1.productline = t2.productline;
SQL

その結果、次の上記のクエリの実行、(一部) -

IMG

:テーブルは、2つの列と同じを使用してカラムに接続されているのでproductline、したがって、以下の構文を使用することができます。

SELECT 
    productCode, 
    productName, 
    textDescription
FROM
    products
        INNER JOIN
    productlines USING (productline);
SQL

上記の文は、エイリアステーブルを使用せずに、この構文を使用して、同じ結果セットを返しますが、。

MySQLはINNER JOINのGROUP BYを子句

以下の注文や注文の詳細テーブルを参照してください、ordersテーブルとorderdetails次のようにテーブル構造があります-

IMG

使用することが可能で、GROUP BYINNER JOINから句をordersし、orderdetails次のように、注文番号、注文状況、及び総売上テーブルを取得します。

SELECT 
    T1.orderNumber,
    status,
    SUM(quantityOrdered * priceEach) total
FROM
    orders AS T1
        INNER JOIN
    orderdetails AS T2 ON T1.orderNumber = T2.orderNumber
GROUP BY orderNumber;
SQL

上記のクエリを実行し、結果(パート)で表されます -

IMG

上記と同様の結果を得るために同様に、以下の問合せ文:

SELECT 
    orderNumber,
    status,
    SUM(quantityOrdered * priceEach) total
FROM
    orders
        INNER JOIN
    orderdetails USING (orderNumber)
GROUP BY orderNumber;
SQL

MySQLのINNERは、等価演算子以外の使用を登録しよう

これまでのところ、あなたは同じ述語演算子を(使用して接続を見てきました=ラインに一致するように)。しかし、より多くを使用することができる(>)、未満(<)と(等しくない<>結合述語を形成する)他のオペレータ演算子。

次の問合せは、(より少ない使用しています<以下のコードを見つけるために)接続S10_1678製品メーカー希望小売価格(の販売価格MSRPすべての製品のを)。

SELECT 
    orderNumber, 
    productName, 
    msrp, 
    priceEach
FROM
    products p
        INNER JOIN
    orderdetails o ON p.productcode = o.productcode
        AND p.msrp > o.priceEach
WHERE
    p.productcode = 'S10_1678';
SQL

上記のクエリの実装、次の出力 -

mysql> SELECT 
    orderNumber, 
    productName, 
    msrp, 
    priceEach
FROM
    products p
        INNER JOIN
    orderdetails o ON p.productcode = o.productcode
        AND p.msrp > o.priceEach
WHERE
    p.productcode = 'S10_1678';
+-------------+---------------------------------------+------+-----------+
| orderNumber | productName                           | msrp | priceEach |
+-------------+---------------------------------------+------+-----------+
|       10107 | 1969 Harley Davidson Ultimate Chopper | 95.7 | 81.35     |
|       10121 | 1969 Harley Davidson Ultimate Chopper | 95.7 | 86.13     |
|       10134 | 1969 Harley Davidson Ultimate Chopper | 95.7 | 90.92     |
|       10145 | 1969 Harley Davidson Ultimate Chopper | 95.7 | 76.56     |
|       10159 | 1969 Harley Davidson Ultimate Chopper | 95.7 | 81.35     |
|       10168 | 1969 Harley Davidson Ultimate Chopper | 95.7 | 94.74     |
|       10399 | 1969 Harley Davidson Ultimate Chopper | 95.7 | 77.52     |
|       10403 | 1969 Harley Davidson Ultimate Chopper | 95.7 | 85.17     |
... ...
|       10417 | 1969 Harley Davidson Ultimate Chopper | 95.7 | 79.43     |
+-------------+---------------------------------------+------+-----------+
26 rows in set

:元[ケイシーチュートリアル]、元のリンクからhttps://www.yiibai.com/mysql/inner-join.html

おすすめ

転載: www.cnblogs.com/ubantu/p/11280429.html