mysqlマルチテーブル接続クエリ操作の例

无忌哥哥
リリース: 2018-07-18 10:00:54
オリジナル
2210 人が閲覧しました

実際のプロジェクトでは、複数のテーブル間にリレーションシップが存在します。 1 つのテーブル内のすべてのデータを取得することは不可能です。テーブル接続がない場合は、多くの操作が必要になります。たとえば、テーブル B からデータを取得するには、テーブル A から制限条件を見つける必要があります。複数のテーブルを操作する必要があるだけでなく、あまり効率的でもありません。たとえば、本の例:

コードは次のとおりです:

SELECT FId
FROM T_Customer
WHERE FName='MIKE'
ログイン後にコピー

この SQL ステートメントは 2 を返します。つまり、MIKE という名前の顧客の FId 値は 2 です。このようにして、FCustomerId が等しいレコードが返されます。から 2 までは T_Order から取得できます:

コードは次のとおりです:

SELECT FNumber,FPrice
FROM T_Order
WHERE FCustomerId=2
ログイン後にコピー

テーブルの接続を詳しく見てみましょう。テーブル結合には、クロス結合 (CROSS JOIN)、内部結合 (INNER JOIN)、外部結合 (OUTTER JOIN) など、さまざまな種類があります。

(1) INNER JOIN: 内部結合は 2 つのテーブルを結合し、2 つのテーブルの接続条件を満たすデータのみを取得します。

コードは次のとおりです:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId
ログイン後にコピー

注: ほとんどのデータベース システムでは、INNER JOIN の INNER はオプションであり、INNER JOIN がデフォルトの接続方法です。

テーブル結合を使用する場合、多くのテーブルにアクセスする必要がある状況が多くあるため、2 つのテーブルのみを結合することに限定されません。たとえば、必要な情報を取得するには、T_Order テーブルも T_Customer テーブルと T_OrderType テーブルに接続する必要があります。次の SQL ステートメントを記述するだけです:

コードは次のとおりです:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId
INNER JOIN T_OrderType
ON T_Order.FTypeId= T_OrderType.FId
ログイン後にコピー

(2) クロス接続 (CROSS JOIN)。 ): 相互接続 関連するすべてのテーブルのすべてのレコードが結果セットに含まれます。相互接続は、暗黙的接続と明示的接続という 2 つの方法で定義できます。

暗黙的な例を見てみましょう:

コードは次のとおりです:

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer, T_Order
ログイン後にコピー

明示的な接続を使用する場合は、CROSS JOIN を使用する必要があります。 例は次のとおりです:

コードは次のとおりです。

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer
CROSS JOIN T_Order
ログイン後にコピー

(3) OUTTER JOIN : 内部接続は接続条件を満たすデータのみを取得しますが、外部接続は主にそのようなシナリオを解決します。条件を満たすデータが取得されることは間違いありません。外部接続では、条件を満たさないデータを NULL で埋めるという別のデータも取得されます。まず、外部結合の分類を見てみましょう。左外部結合 (LEFT OUTER JOIN)、右外部結合 (RIGHT OUTER JOIN)、完全外部結合 (FULLOUTER JOIN) です。

I. LEFT OUTER JOIN: 前述したように、条件を満たさないデータは NULL で埋められます。では、接続条件のうち、左外部結合では、条件を満たす左側のテーブルのデータが右側のテーブルに対応する一致がない場合、対応する右側のテーブルのフィールドを NULL で埋める必要があるのでしょうか? NULL 値で埋められます。つまり、左外部接続の本体は左のテーブルであり、右のテーブルはそれに対応します。

コードは次のとおりです:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
ログイン後にコピー

注: 左外部結合を使用すると、where ステートメントに一致しないデータをフィルタリングできます。左外部結合の逆で、左側のテーブルのフィールドには次の値が入力されます。 NULL 値。つまり、右外部接続の主語は右テーブルであり、左テーブルはそれに一致します。

コードは次のとおりです:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
WHERE o.FPrice>=150
ログイン後にコピー

注: 左外部結合と同様に、where ステートメントを使用してフィルタリングできます

III: 完全外部結合は、左外部結合と右外部結合のコレクションです。外部結合。つまり、左外部接続の結果セットと右外部接続の結果セットの両方が含まれます。

コードは次のとおりです:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
ログイン後にコピー

結果は次と同等です:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
FULL OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
ログイン後にコピー

============================== ==== ============================================ ==== ===

マルチテーブルクエリの様々なSQL記述方法: (以下は2つのテーブルからのクエリ、テーブルv_goods内のすべてのフィールドを表示、 admin2テーブルの表示 表示テーブルのnameフィールドを加算器として使用し、表示テーブルadmin2テーブルのnameフィールドを演算子として使用します) 複数テーブルのクエリは以下の3つの例文に従って記述できます sql

リーリー

以上がmysqlマルチテーブル接続クエリ操作の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート