複数テーブルクエリ 複数のテーブルから関連するクエリ結果を取得するには、単一の 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 の詳細な説明と拡張
ここでは、MySQL の使用中に発生するいくつかの問題とその解決策を示します。 sql_mode=o...
インターネット上には多くのインポート方法があり、公式も3つのインポート方法を提供していますが、インポ...
目次Vue3 カプセル化メッセージプロンプトインスタンス関数スタイルレイアウトカプセル化メッセージ....
序文以前、画像とテキストの垂直方向のずれの問題について説明しました。ここで示した小さな例では、小さな...
ブラウザ (Web ドライバー) ベースの Selenium テクノロジを使用してデータをクロールす...
目次gzip 圧縮を使用する理由は何ですか? nginxはgzipを実装するgzip処理nginx ...
1. mysqldump の紹介mysqldump は、MySQL に付属する論理バックアップ ツー...
序文プロセス管理の役割:サーバーの健全性状態を判定する: プロセスの状態 (メモリ、CPU 占有率な...
導入いつものように、シーンから始めましょう〜インタビュアー:「トランザクションの4つの特性をご存知で...
今日は、Linux でリモート アクセス用に MySQL データベースを構成する方法について質問があ...
目次序文オプション1:オプション2:オプション3:オプション4(最終的に採用されたオプション):要約...
この記事では、例を使用して、MySQL データベースの最適化のためのインデックス実装の原則と使用方法...
この記事では、React Native ScrollViewのプルダウンリフレッシュ効果の具体的なコ...
ロケーションは「位置指定」を意味し、主にさまざまな位置指定のための URI に基づいています。これは...
コードをコピーコードは次のとおりです。 <!--[IEの場合]><script t...