Mysql と Oracle でよく使用される複数テーブルの変更ステートメントの概要

Mysql と Oracle でよく使用される複数テーブルの変更ステートメントの概要

今日、SQLトレーニングの質問バンクでこの質問を見ました。これは、非常に代表的なマルチテーブル変更の質問です。実際、この問題を解くのは難しくありません。MySQLとOracleの両方に多くの解決策があります。次に、これらの解決策をまとめます。

msyql での複数のテーブルの変更

MySQL でよく使用されるマルチテーブル変更ステートメントについて、例を使用して説明しましょう。

//テーブルを作成する create table aaa(id int,value1 int(5),value2 int(5),value3 int(5),value4 int(5));
aaaのようなテーブルbbbを作成します。
//aaa に値 (1,0,0,0,0),(2,0,0,0,0),(3,0,0,0,0),(4,0,0,0,0),(5,0,0,0,0),(6,0,0,0,0),(7,0,0,0,0); を挿入します。
bbbの値(1,11,12,13,14),(3,31,32,33,34),(5,51,52,53,54)を挿入します。
//バックアップテーブル a1 を作成します。select * from aaa;
テーブル b1 を作成し、bbb から * を選択します。

一般的なマルチテーブルの変更: (MySQL と Oracle の両方に適用可能。Oracle については後述)

//一般的なマルチテーブルの変更 update a1 set a1.value1 = (select b1.value1 from b1 where a1.id = b1.id),
a1.value2 = (a1.id = b1.id の場合、b1 から b1.value2 を選択)。

テーブル関連付けの複数テーブルの変更 (これは MySQL にのみ適用されます)

//テーブル関連付けマルチテーブル変更 a1 を更新、b1 を a1.id = b1.id で結合、a1.value1 = b1.value1 に設定、
a1.値2 = b1.値2、a1.値3 = b1.値3;

Oracle での複数のテーブルの変更

--テーブルを作成します。create table aaa(id number,value1 number,value2 number,value3 number,value4 number);
テーブル bbb(id 数値、value1 数値、value2 数値、value3 数値、value4 数値) を作成します。
--データを挿入します。aaa 値に挿入します (1,0,0,0,0);aaa 値に挿入します (2,0,0,0,0);aaa 値に挿入します (3,0,0,0,0);
aaa 値に挿入(4,0,0,0,0);aaa 値に挿入(5,0,0,0,0);aaa 値に挿入(6,0,0,0,0);
aaa値(7,0,0,0,0)に挿入します。bbb値(1,11,12,13,14)に挿入します。
bbb 値に挿入します (3,31,32,33,34);bbb 値に挿入します (5,51,52,53,54);
-- バックアップ create table a1 as select * from aaa;
select * from bbb としてテーブル b1 を作成します。

一般的なマルチテーブルの変更:

上記の MySQL ステートメントと同様に、この書き方は比較的理解しやすいですが、効率は本当に不十分です。複数のテーブルの変更で 1 つの列のみを変更する必要がある場合 (一番上の質問のように)、この書き方は問題ありません。

//一般的なマルチテーブルの変更 update a1 set a1.value1 = (select b1.value1 from b1 where a1.id = b1.id),
a1.value2 = (a1.id = b1.id の場合、b1 から b1.value2 を選択)。

ただし、複数列の変更に関しては、これはあまり実用的ではありません。Oracle では、複数のテーブルを変更および追加できる構文が提供されています。

合併する

merge into は update 文と insert 文を組み合わせたもので、update と insert の機能を同時に実現できます。ここでは説明しませんが、merge into の構文を簡単に紹介します。

merge into target table a --- into で指し示されるターゲット テーブルは、更新するテーブルです。
ソース テーブル b の使用 --- using によってポイントされるテーブルは変更できません。ビュー、結果セットなどにもできます。
on(a.id = b.id) --- on() には、ターゲット テーブルとソース テーブルを一致させるための条件が含まれます。条件が満たされると、一致は成功します。
一致した場合は --- 一致した場合は、その後に変更ステートメントが続きます。
	更新セット... 
一致しない場合は --- 一致しない場合は、新しいステートメントが続きます。
	値を挿入します(....);
b1を使用してa1にマージする 
オン(a1.id = b1.id) 
一致したら更新する 
	a1.value1 = b1.value1、a1.value2 = b1.value2、a1.value3 = b1.value3 を設定します。

複数テーブルの変更が存在する

EXISTS は MySQL および Oracle にも適用されます。テーブル B のデータに基づいてテーブル A を変更するという厳格な要件がない場合は、EXISTS を使用することもできます。 exists を使用した後の SQL 実行順序は、最初に外部クエリを実行し、次に内部クエリを実行するため、複数テーブルの変更でテーブル a1 の値をテーブル a2 の値に変更することはできません。

a1 を更新し、a1.value1 = 99、a1.value2 = 999、a1.value3 = 999 を設定します。 
存在する場所(a1.id = b1.id の場合、b1 から value1 を選択)。

これで、Mysql と Oracle でよく使用されるマルチテーブル変更ステートメントに関するこの記事は終了です。Mysql と Oracle でよく使用されるマルチテーブル変更ステートメントの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • mysql と oracle のデフォルトのトランザクション分離レベルの説明
  • 3つの主要データベース(Mysql、SqlServer、Oracle)の違いについて簡単に説明します。
  • mysql、mssql、oracle のページング クエリ メソッドの詳細な説明
  • 時系列転位修復ケースを実装するSQL

<<:  Docker クリーニングキラー/Docker オーバーレイ ファイルがディスク領域を大量に占有する

>>:  TypeScript 列挙の基本と例

推薦する

Vue フィルターの実装と適用シナリオの詳細な説明

1. 簡単な紹介Vue.js を使用すると、一般的なテキストの書式設定に使用できる独自のフィルターを...

ウェブデザイン研究における XHTML の応用の概要

<br />一般的に、「標準的な Web ページ」のファイル構成は XHTML CSS ...

JavaScript関数の使い方の詳細な説明

目次1. 関数を宣言する2. 関数の呼び出し3. 関数パラメータ4. 関数の戻り値5. 議論の使用6...

CSSでnグリッドレイアウトを実装する方法

一般的なアプリケーションシナリオ現在のアプリのインターフェースは基本的に同じであり、グリッドレイアウ...

Vue cli開発に基づく外部コンポーネントVantのデフォルトスタイルの変更の詳細な説明

目次序文1. 少ない2. コンポーネントをインポートする3. 設定ファイルを変更するステップ1: l...

圧縮パッケージを使用して Linux 環境に JDK 13 をインストールする方法

JDK とは何ですか?まあ、この質問がわからないのであれば、なぜこれをインストールするのか本当にわか...

Tencent Cloudでhive3.1.2を構築する方法を教えます

環境の準備操作を開始する前に、hadoop バージョンがインストールされていることを確認してください...

ウェブページのエクスペリエンス: ウェブページのカラーマッチング

<br />ウェブページの色はウェブサイトのイメージを確立する鍵の一つですが、ネットユー...

ローカル Docker に Postgres 12 + pgadmin をインストールする方法 (Apple M1 をサポート)

目次導入Intel CPUをサポートApple M1のサポートテスト導入このプロジェクトでは最近、P...

Vue3+TypeScriptは再帰メニューコンポーネントの完全な例を実装します

目次序文必要成し遂げる最初のレンダリングメニュー項目をクリックしますスタイルの区別デフォルトのハイラ...

Vue のスロットスコープの詳細な理解(初心者向け)

Baidu には slot-scope に関する記事が既にたくさんありますが、以前よく学習しておら...

Linux環境でログファイルを表示するコマンドの詳細な説明

目次序文1. catコマンド: 2. moreコマンド: 3. lessコマンド: 4. headコ...

VMware Workstation Pro は Win10 ピュア バージョンのオペレーティング システムをインストールします

この記事では、VMware Workstation Pro で Win10 オペレーティング システ...

Vueはキー表示のショートカットキー効果を取得する入力コンポーネントを実装します

ページ上でショートカットキーをカスタマイズする要件に遭遇し、ショートカットキーを設定して表示する場所...

マージンの重複問題を解決する方法

1. まず、2つ以上の隣接する通常フローブロック要素の垂直マージンの崩壊を引き起こす原因を知る必要が...