実際のプロジェクトでは、複数のテーブル間に関係が存在します。 1 つのテーブル内のすべてのデータを取得することは不可能です。テーブル接続がない場合、多くの操作が必要になります。たとえば、テーブル B からデータを取得するには、テーブル A から制限条件を見つける必要があります。操作には複数のテーブルが必要なだけでなく、効率も高くありません。たとえば、この本では次のように書かれています。 コードは次のとおりです。 FIdを選択 T_Customerより FName='MIKE' の場合 この SQL ステートメントは 2 を返します。これは、MIKE という名前の顧客の FId 値が 2 であることを意味します。このようにして、T_Order で FCustomerId が 2 であるレコードを取得できます。 コードは次のとおりです。 FNumber、FPrice を選択 T_Orderから FCustomerId=2の場合 テーブル結合について詳しく見てみましょう。テーブル結合には、クロス結合 (CROSS JOIN)、内部結合 (INNER JOIN)、外部結合 (OUTTER JOIN) など、さまざまな種類があります。 (1)内部結合:内部結合は2つのテーブルを結合し、2つのテーブルの結合条件を満たすデータのみを取得します。 コードは次のとおりです。 o.FId、o.FNumber、o.FPrice を選択、 c.FId、c.FName、c.FAge T_Order o から T_Customer c に参加 ON o.FCustomerId= c.FId 注: ほとんどのデータベース システムでは、INNER JOIN の INNER はオプションであり、INNER JOIN がデフォルトの接続方法です。 テーブル結合を使用する場合、多くのテーブルを接続する必要があるケースが多いため、2 つのテーブルのみの結合に限定されません。たとえば、T_Order テーブルは、必要な情報を取得するために、T_Customer テーブルと T_OrderType テーブルにも接続する必要があります。次の SQL ステートメントを記述できます。 コードは次のとおりです。 o.FId、o.FNumber、o.FPrice を選択、 c.FId、c.FName、c.FAge T_Order o から T_Customer c に参加 ON o.FCustomerId= c.FId 内部結合 T_OrderType T_Order.FTypeId = T_OrderType.FId の場合 (2)クロス結合:クロス結合に関係するすべてのテーブルのすべてのレコードが結果セットに含まれます。クロス結合を定義する方法は、暗黙的と明示的の 2 つがあります。 暗黙的な例を見てみましょう: コードは次のとおりです。 T_Customer.FId、T_Customer.FName、T_Customer.FAgeを選択します。 T_Order.FId、T_Order.FNumber、T_Order.FPrice T_Customer、T_Order から 明示的な結合を使用するには、次に示すように CROSS JOIN を使用する必要があります。 コードは次のとおりです。 T_Customer.FId、T_Customer.FName、T_Customer.FAgeを選択します。 T_Order.FId、T_Order.FNumber、T_Order.FPrice T_Customerより クロス結合 T_Order (3)外部結合:内部結合は結合条件を満たすデータのみを取得しますが、外部結合は主にこのようなシナリオを解決するために使用されます。条件を満たすデータが取得されます。これについては疑いの余地はありません。外部接続ではデータの別の部分も取得されます。つまり、条件を満たさないデータは NULL で埋められます。まず、外部結合の分類(LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN)を見てみましょう。 I. LEFT OUTER JOIN: 前述のように、条件を満たさないデータは NULL で埋められます。では、どの項目を NULL で埋める必要がありますか? 左外部結合の場合、条件を満たす左のテーブルのデータに対応する一致が右のテーブルにない場合、対応する右のテーブルのフィールドに NULL 値を埋める必要があります。つまり、左外部結合の本体は左側のテーブルであり、右側のテーブルはそれに連携します。 コードは次のとおりです。 o.FNumber、o.FPrice、o.FCustomerId を選択します。 c.FName、c.FAge T_Orderから 左外部結合 T_Customer c オン o.FCustomerId=c.FId 注: 左外部結合を使用する場合は、where ステートメントに一致しないデータを除外できます。 コードは次のとおりです。 o.FNumber、o.FPrice、o.FCustomerId を選択します。 c.FName、c.FAge T_Orderから 左外部結合 T_Customer c オン o.FCustomerId=c.FId ここで o.FPrice>=150 II. 右外部結合: 右外部結合は左外部結合の逆です。左側のテーブルのフィールドには NULL 値が入ります。つまり、右外部結合の主体は右テーブルであり、左テーブルはそれに連動します。 コードは次のとおりです。 o.FNumber、o.FPrice、o.FCustomerId を選択します。 c.FName、c.FAge T_Orderから 右外部結合 T_Customer c オン o.FCustomerId=c.FId 注: 左外部結合と同様に、where文を使用してフィルタリングすることができます。 III. 完全外部結合: 完全外部結合は、左外部結合と右外部結合の組み合わせです。つまり、左外部結合の結果セットと右外部結合の結果セットの両方が含まれます。 コードは次のとおりです。 o.FNumber、o.FPrice、o.FCustomerId を選択します。 c.FName、c.FAge T_Orderから 完全外部結合 T_Customer c オン o.FCustomerId=c.FId 結果は次のようになります: o.FNumber、o.FPrice、o.FCustomerId を選択します。 c.FName、c.FAge T_Orderから 左外部結合 T_Customer c オン o.FCustomerId=c.FId 連合 o.FNumber、o.FPrice、o.FCustomerId を選択します。 c.FName、c.FAge T_Orderから 右外部結合 T_Customer c オン o.FCustomerId=c.FId 複数テーブルクエリ用の複数の SQL ステートメント: (以下は 2 つのテーブルからのクエリです <3 つのテーブルからのクエリとも見ることができます>。v_goods テーブルのすべてのフィールドを表示し、admin2 テーブルの名前フィールドを追加された人物として表示し、admin2 テーブルの名前フィールドを演算子として表示します) 複数テーブルクエリは、次の 3 つの例に従って SQL で記述できます。 SELECT v.*,(SELECT a.name FROM admin2 a WHERE a.adminId=v.loadInId) AS aname,(SELECT a.name FROM admin2 a WHERE a.adminId=v.operatorId) AS uname FROM v_goods v where 1=1; SELECT v.*,a.name aname,b.name uname FROM v_goods v,admin2 a,admin2 b WHERE a.adminId=v.loadInId AND b.adminId=v.operatorId; v_goods v から v.*、a.name aname、b.name uname を選択し、 admin2 a を a.adminId=v.loadInId で LEFT JOIN し、 admin2 b を b.adminId=v.operatorId で LEFT JOIN します。 以下もご興味があるかもしれません:
|
<<: Javascript における非同期待機の詳細な理解
>>: Nginx の負荷分散アルゴリズムとフェイルオーバー分析
序文WeChat ミニプログラム プロジェクトでユーザー情報を取得し、ユーザー ログインを実装する場...
目次if判定の最適化1. 最も簡単な方法:判断2. より良い方法: スイッチ3. より良いアプローチ...
効果原理主にCSSグラデーションを使用して、切り取りを必要としない背景のくり抜きを実現します。クーポ...
今回は、私自身の開発経験を踏まえて、以下の観点で関連内容を解説します。ページからコンポーネントにデー...
目次回避策Vue2.0 で 2 つの配列の変更を監視できないのはなぜですか?ソースコード分析ヴュー3...
前回の記事では、MySQL 5.7でルートパスワードを忘れた場合と、MySQL 5.7でルートパスワ...
目次概要プロミスレースメソッド約束の再パッケージ化中止コントローラAxiosプラグインにはキャンセル...
目次キャンバス関連文書エフェクト画像表示ケースの完全なコード親コンポーネントコードサブコンポーネント...
前に書いた内容: ビジネス ロジックの判断を行うために、最新のトランザクション ID を表示する必要...
1. トランザクションはACID特性を持つ原子性: トランザクションは、トランザクションによって分割...
VC6.0は確かに古すぎるVC6.0は昔の開発ツールです。現在のwin10では対応していません。しか...
目次MySQLがmy.cnfを読み込む順序1. mysql.server の起動方法2. mysql...
Mysql を完全にアンインストールするにはどうすればいいですか?以下の手順に従って実行してくださ...
背景同僚がセキュリティ プロジェクトに取り組んでおり、AWS サーバーに秘密兵器を展開する必要があり...
導入EXISTS は、サブクエリが少なくとも 1 行のデータを返すかどうかを確認するために使用されま...