複数テーブルクエリ 複数のテーブルから関連するクエリ結果を取得するには、単一の SELECT ステートメントを使用します。通常、複数テーブルの結合は、相互関係を持つ親子テーブルで確立されます。 1 クロスコネクト 最初のテーブルのすべての行と 2 番目のテーブルのすべての行を乗算した直積により、消費者と顧客のテーブルが作成されます。 -- テーブル customers を作成します( --id int 主キー auto_increment, -- 名前 VARCHAR(20) が null ではない、 --address VARCHAR(20) NULLではない --); -- テーブルordersを作成する( --order_namre VARCHAR(20) 主キー、 -- num char(20) がNULLではない、 --price int が null ではない、 -- 顧客ID int, -- 制約 cus_ord_fk 外部キー(customers_id) 参照 customers(id) -- ) 自分でデータを挿入するだけです。 文法: 暗黙の構文 (キーワードを使用しない): select * from customers,orders; 結果は次のとおりです。 明示的な構文 (キーワードを使用): select * from customers c INNER JOIN orders o ON c.id=o.customer_id; 2 つの実行結果は同じですが、直交積が間違っています。次の方法を使用して修正できます。 2 内部結合 クロス結合によって取得された結果セットが間違っているためです。したがって、内部結合はクロス結合に基づいており、接続条件に一致する接続テーブル内のデータ行のみがリストされます。一致しないレコードはリストされません。 文法: 暗黙の構文: customers.id=orders.customers_id の場合、customers、orders から * を選択します。 明示的な構文: customers c から * を選択し、 INNER JOIN orders o ON c.id=o.customer_id; 結果は以下のとおりです プログラムにエイリアスを付けることもできます: c.id=o.customers_id で、 customers から c,orders o として * を選択します。 SELECT * from customers as c inner join orders o on c.id=o.customers_id; 3 外部結合 内部接続には、製品を購入したすべてのユーザーの情報のみがリストされ、製品を購入していないユーザーはリストされません。 文法: customers c から * を選択します。LEFT JOIN orders o ON c.id=o.customer_id; 右外部結合: キーワードの右側のテーブルがベーステーブルです 文法: orders o から * を選択します。RIGHT JOIN customers c ON c.id=o.customer_id; 4 サブクエリ クエリを実行する際に、別の選択ステートメントの結果が条件として必要な場合があります。このとき、サブクエリが使用されます。メインクエリ (外部クエリ) にデータを提供するために最初に実行されるクエリ (内部クエリ) をサブクエリと呼びます。サブクエリは、ネストされたサブクエリと相関サブクエリに分けられます。 ネストされたサブクエリ: 内部クエリの実行は外部クエリとは独立しています。内部クエリは 1 回だけ実行され、実行完了後にその結果が外部クエリの条件として使用されます (ネストされたサブクエリ内のサブクエリ ステートメントを取り出して個別に実行できます)。 文法と演習: ID 1 の教師が指導するすべての生徒を照会します。 id が 1 である students から * を選択します (teacher_student から s_id を選択し、 t_id=1 である teacher_student から s_id を選択します); 相関サブクエリ: 内部クエリの実行は外部クエリのデータに依存します。外部クエリが実行されるたびに、内部クエリも実行されます。毎回、最初に外部クエリが実行され、外部クエリ テーブル内のタプルが取り出され、現在のタプル内のデータが内部クエリに渡され、次に内部クエリが実行されます。内部クエリの実行結果に基づいて、現在のタプルが外部クエリの where 条件を満たしているかどうかを判断します。満たしている場合、現在のタプルは要件を満たすレコードであり、満たしていない場合は要件を満たしていません。その後、外部クエリは次のタプル データの取得を継続し、すべてのタプルが処理されるまで上記の操作を実行します。 テーブルteacher1を作成( id int 主キー auto_increment, 名前char(20)がNULLではない、 件名char(20)がnullでない ); – 生徒テーブルを作成する テーブルstudent1を作成( id int 主キー auto_increment, 名前 char(20) 一意 null ではない、 年齢 int null ); – 3番目のテーブルを作成する テーブル tea_stu を作成します( id int 主キー、 名前 char(20)、 t_id 整数、 s_id 整数、 スコア int が null ではない、 制約teacher1_id_fk外部キー(t_id)はteacher1(id)を参照します。 制約 student_id_fk 外部キー(s_id) は student1(id) を参照します。 ); 演習 1. ID 1 の教師が指導するすべての生徒を照会します。 方法 1: 別々の方法で書き出す: t_id=1 の場合、tea_stu から s_id を選択します。 idが(2,3)であるstudent1から*を選択します。 方法2: id が 1 である student1 から * を選択します (t_id=1 である tea_stu から s_id を選択)。 相関サブクエリ: 内部クエリの実行は外部クエリのデータに依存します。外部クエリが実行されるたびに、内部クエリも実行されます。毎回、最初に外部クエリが実行され、外部クエリ テーブル内のタプルが取り出され、現在のタプル内のデータが内部クエリに渡され、次に内部クエリが実行されます。内部クエリの実行結果に基づいて、現在のタプルが外部クエリの where 条件を満たしているかどうかを判断します。満たしている場合、現在のタプルは要件を満たすレコードであり、満たしていない場合は要件を満たしていません。その後、外部クエリは次のタプル データの取得を継続し、すべてのタプルが処理されるまで上記の操作を実行します。 tea_stu から * を a として選択します。ここで、a.score>(tea_stu から avg(b.score) を b として選択します。ここで、a.s_id=b.s_id); 上記は、編集者が紹介したMySQLマルチテーブルクエリの詳細な統合です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: Zabbix redis 自動ポート検出スクリプトは json 形式を返します
>>: Vue3 における ref と reactive の詳細な説明と拡張
昨日、円形のプログレスバー (Vue 円形プログレスバーを参照してください) についてブログを書きま...
以下のように表示されます。 table1 を z として更新し、table2 を zb として結合し...
エラー: Connection to blog0@localhost failed. [08001]...
目次1. 矢印関数の使用1. 通常関数から矢印関数へ2. 中括弧を省略してリターンする3. 括弧を省...
この記事では、CSS 画像アニメーション効果(フォトフレーム)のサンプルコードを紹介し、皆さんと共有...
最近、電子アーカイブに取り組んでおり、バックエンドではファイルの Huawei Cloud OSS ...
MySQL クエリ キャッシュを設定する目的は次のとおりです。クエリ結果をキャッシュしておくと、次回...
ハイパーリンク a タグはリンク ポイントを表し、英語の単語「anchor」の略語です。その機能は、...
計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...
1. 親コンポーネントはpropsを通じて子コンポーネントにデータを渡すことができる2. 子コンポー...
1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...
目次1. マスタースレーブレプリケーションマスタースレーブレプリケーション3スレッドマスタースレーブ...
ここでは比較的簡単なインストール方法のみを紹介します。 1. yumを使用してインストールするyum...
序文まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived ...
1. Pythonのインストール1. フォルダーを作成します。 mkdir python フォルダ...