1. サブクエリ MySQL 4.1以降はサブクエリをサポートしています サブクエリ:別のクエリ内にネストされたクエリ。 サブクエリの役割: 1. フィルター: 例1: 商品TNT2を注文したすべての顧客のIDを取得する
一般的に、WHERE 句にネストできるサブクエリの数に制限はありません。ただし、実際の使用では、パフォーマンスの制限により、サブクエリをあまり多くネストすることはできません。 例2: 製品TNT2を注文した顧客のリストを返す ![]() この例をより効率的にクエリするには、結合を使用します。 ![]() 注: 接続に関する詳細は以下にまとめます。 2. 計算フィールドを作成します。 相関サブクエリ: 外部クエリを含むサブクエリ。列名があいまいになる可能性がある場合は、この構文を使用する必要があります。 ![]() 要約: 2. テーブルを結合する 結合テーブルはSQLの最も強力な機能の1つです 1. 関連する基本的な知識の蓄積: リレーショナル テーブル: 情報が複数のテーブルに分割され、データの種類ごとに 1 つのテーブルが作成されます。テーブルは、いくつかの共通の値(リレーショナル設計ではリレーショナル)を通じて相互に関連付けられます。時間とストレージスペースを節約し、データの変更と更新を容易にします。したがって、リレーショナル データベースのスケーラビリティは、非リレーショナル データベースよりもはるかに優れています。 結合は物理的なエンティティではなく、実際のデータベース テーブルには存在しません。結合は必要に応じて MySQL によって確立され、クエリの実行中は存在します。 2. 基本接続: 例1: ![]() 2 つのテーブルは WHERE 句を使用して正しく結合されます。WHERE 句は、MySQL に vendors テーブルの vend_id を products テーブルの vend_id と一致させるように指示します。注: あいまいになる可能性がある列を参照する場合は、完全修飾列名 (ドットで区切られたテーブル名と列名) を使用する必要があります。 デカルト積: 結合条件のないテーブル関係によって返される結果。取得される行数は、最初のテーブルの行数に 2 番目のテーブルの行数を掛けた数になります。フォークジャンクションと呼ばれることもあります。 例2: 注文番号20005の商品を表示する ![]() すべての結合に WHERE 句があることを確認する必要があります。そうしないと、MySQL は必要な量よりもはるかに多くのデータを返します。 等価結合: 2 つのテーブル間の等価性テストに基づきます。内部結合とも呼ばれます。 (最も一般的に使用される接続方法) 例: ![]() ANSI SQL 仕様では、INNER JOIN 構文が推奨されます。さらに、WHERE 句を使用して結合を定義する方が確かに簡単ですが、明示的な結合構文を使用すると、パフォーマンスに影響を与える可能性のある結合条件を忘れることがなくなります。 3. 高度な接続: 例1: テーブルに別名を付ける(列に別名を付けるのと同じ) ![]() 注: テーブル別名はクエリ実行時にのみ使用されます。列エイリアスとは異なり、テーブルエイリアスはクライアントに返されません。 テーブルエイリアスを使用する主な理由の1つは、単一のSELECTステートメントで同じテーブルを複数回参照できるようにすることです。例2:生産ID DTNTRのアイテムのサプライヤーによって生産された他のアイテムを照会します。 ![]() 上記のソリューションは自己結合であり、通常は同じテーブルからデータを取得するときに使用されるサブクエリ ステートメントを置き換える外部ステートメントとして使用されます。この例はサブクエリを使用して解決することもできます。最終結果は同じですが、結合はサブクエリよりもはるかに高速に処理できる場合があります。問題を解決するときに、2 つのアプローチを試して、どちらがより効果的かを判断することができます。 自然結合:複数の出現を排除して、各列が 1 回だけ返されるようにします。一般的に、私たちが使用する内部接続は自然な接続です。 例3: 自然なつながり ![]() 自然結合は通常、1 つのテーブルに対してワイルドカード (SELECT *) を使用し、他のすべてのテーブルの列の明示的なサブセットを使用して実行されます。 外部結合:結合には、関連テーブルに関連付けられた行がない行が含まれます。 例4: 注文のない顧客も含め、すべての顧客を取得する ![]() 使用方法は内部結合と似ており、結合の種類を指定するためにキーワード OUTER JOIN が使用されます。ただし、2 つのテーブルの行を関連付ける内部結合とは異なり、外部結合には関連する行がない行も含まれます。 外部結合には、左外部結合と右外部結合という 2 つの基本的な形式があります。 OUTER JOIN 構文を使用する場合は、RIGHT または LEFT キーワードを使用して、すべての行を含むテーブルを指定する必要があります (RIGHT は OUTER JOIN の右側のテーブルを参照し、LEFT は OUTER JOIN の左側のテーブルを参照します)。上記の例では、LEFT OUTER JOIN を使用して、FROM 句の左側のテーブル (customers テーブル) からすべての行を選択します。 例 5: すべての顧客と各顧客の注文数を取得する (注文していない顧客も含む) ![]() 集計関数は、さまざまな結合タイプで便利に使用できます。 結合と結合条件の使用:
3. 複合クエリ 複合クエリ: 複数のクエリ (複数の SELECT ステートメント) を実行し、結果を単一のクエリ結果セットとして返します。これらの結合クエリは、多くの場合、ユニオン クエリまたは複合クエリと呼ばれます。 複合クエリが必要なのはなぜですか?
1. 複合クエリを作成する キーワード: UNION 演算子 例 1: 価格が 5 以下のすべてのアイテムのリストを取得し、サプライヤー 1001 および 1002 によって製造されたすべてのアイテムを含めます (価格に関係なく)。 ![]() UNION は、MySQL に 2 つの SELECT ステートメントを実行し、出力を 1 つのクエリ結果セットに結合するように指示します。このソリューションは、where prod_price<=5 OR vend_id in(1001,1002); と同等であり、注意すべきルールは次のとおりです。
単純なケースでは、UNION を使用する方が WHERE 句を使用するよりも複雑になる場合があります。 ただし、より複雑なフィルタリング条件の場合、または複数のテーブル (単一のテーブルではなく) からデータを取得する場合は、UNION を使用するとプロセスが簡単になる場合があります。 注: UNION は、ほとんどの場合、複数の WHERE 条件と同じ機能を実現します。 UNION ALL は、WHERE 句で完了できない作業を完了する UNION の形式です。各条件に一致するすべての行(重複行を含む)を表示する必要がある場合は、WHERE ではなく UNION ALL を使用する必要があります。 例2: 結合されたクエリ結果を並べ替える ![]() UNION を使用してクエリを結合する場合、使用できる ORDER BY 句は 1 つだけであり、最後の SELECT ステートメントの後に表示される必要があります。結果セットでは、ある部分が 1 つの方法でソートされ、別の部分が別の方法でソートされる状況はないため、複数の ORDER BY 句は許可されません。 ORDER BY 句は、すべての SELECT ステートメントによって返されるすべての結果をソートします。 上記は、エディターが紹介したMySQLサブクエリ(ネストされたクエリ)、結合テーブル、複合クエリの詳細な統合です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。エディターがすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: Centos6.5 でのスーパーバイザーのアップグレード、インストール、および構成に関するチュートリアル
1. 問題の説明今日、システム ログ ファイルを確認する必要がありますが、/var/log/mess...
目次不規則なフォームの実装透明な部分をクリックする不規則なフォームの実装ここでは円形フォームを実装し...
1 yumでソフトウェアをインストールしたときにダウンロードしたrpmパッケージを保存しますyum ...
CSS フォント プロパティは、テキストのフォント ファミリ、サイズ、太字、スタイル (斜体など)...
フロントエンド開発者にとって、さまざまな主要ブラウザのさまざまなバージョンでコードが適切に動作するこ...
1. vue2 での従来の書き方 // 親コンポーネントは 'foo' を提供します...
目次序文システム環境現在のシステムパーティションレイアウトデータのバックアップレスキューモードに入る...
<body style="scroll:no"> <テーブルの...
プロジェクトで frameset 属性を使用したことがあるかどうかはわかりません。昨年、オンライン ...
序文最近、MySQL に関するメモをいくつか尋ねる人がいたので、ブログ記事を書かなければなりません。...
1. タイトルHTML では、<h1></h1> から <h6>...
MySQL における一般的な utf8mb4 ソート規則は次のとおりです。 utf8mb4_0900...
Docker に Tomcat をインストールする場合、大きなファイルをダウンロードするときなど、場...
今日はメニューボタンを作りました。マウスをボタンに移動するすると、ドロップダウンサブメニューが表示さ...
最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...