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つのテーブルを結合しますt1
とt2
、のが上記の構文を簡素化してみましょう。
SELECT column_list
FROM t1
INNER JOIN t2 ON join_condition;
SQL
以下のためにt1
テーブルの各行、INNER JOIN
句はt2
、それらが結合条件を満足するかどうかを確認するために、表の各行を比較します。接続条件が満たされた場合、INNER JOIN
のリターンt1
とt2
テーブルの列に新しい行。
注意して、してくださいt1
とt2
、テーブル内の行は、接続条件に応じて適合させなければなりません。一致が見つからない場合、クエリが空の結果セットを返します。場合は上の接続2
タイムテーブルは、また、このロジックに適用されます。
以下のベン図を示しINNER JOIN
原則句を。結果セットは、テーブルに2列に現れなければならないt1
し、t2
二つの円に示すように、断面-
MySQLのINNERでエラーに記載されている避け登録しよう
同じ列名を持つテーブルを複数接続する場合は、参照テーブルの修飾子を使用しなければならないSELECT
とON
エラーを回避するために、列を句の列を。
例えば、場合t1
とt2
テーブルが指名したc
同じ列名必須SELECT
とON
使用されるような、句テーブル修飾子t1.c
またはt2.c
で参照されるテーブルで指定されたc
カラム。
テーブル修飾子を書いて時間を節約するためには、クエリでテーブルの別名を使用することができます。たとえば、長い名前を付けることができverylonglonglong_tablename
、リストの使用テーブルの別名を、そして使用しt.column
、その列の参照を、代わりに使用したのverylonglonglong_tablename.column
が、あなたは、このような長いテーブル名を書いたり、使用したい場合、また、あなたの開発パートナーは、いくつかの類似したあなたを呼び出すことができなければならない:吸盤 -このようなそして!
MySQLのINNER例のJOIN
のは、見てみましょうサンプルデータベース(yiibaidb)製品(products
)と製品ライン(productlines
)テーブル。彼らのER図は以下の-
上記の図では、products
テーブルは、productLine
参照のリストされたproductlines
テーブルのproductline
列が。products
表のproductLine
列と呼ばれる外部キー列を。
一般的に、コネクタは、製品ライン(として、外部キー関係のテーブルを有するproductlines
)、生成物(products
)表。さて、あなたは次のようなデータを取得する場合-
- 取得
products
テーブルproductCode
とproductName
列の値を。 - 取得
productlines
-説明製品ラインtextDescription
列を。
この目的のために、使用することにより、INNER JOIN
節のproductline
下に示すように、2つのテーブルのクエリデータに一致する行の文字列を選択します。
SELECT
productCode,
productName,
textDescription
FROM
products t1
INNER JOIN
productlines t2 ON t1.productline = t2.productline;
SQL
その結果、次の上記のクエリの実行、(一部) -
:テーブルは、2つの列と同じを使用してカラムに接続されているのでproductline
、したがって、以下の構文を使用することができます。
SELECT
productCode,
productName,
textDescription
FROM
products
INNER JOIN
productlines USING (productline);
SQL
上記の文は、エイリアステーブルを使用せずに、この構文を使用して、同じ結果セットを返しますが、。
MySQLはINNER JOINのGROUP BYを子句
以下の注文や注文の詳細テーブルを参照してください、orders
テーブルとorderdetails
次のようにテーブル構造があります-
使用することが可能で、GROUP BY句INNER 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
上記のクエリを実行し、結果(パート)で表されます -
上記と同様の結果を得るために同様に、以下の問合せ文:
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