最初のクエリの方が優れています。
リレーショナルデータベースは、使用している実際のDBMSに関係なく、その方法でデータを結合し、where句でデータをフィルタリングするように正確に構築されています。それは彼らのパンとバターです。2番目のクエリでは、サブクエリを使用して追加のデータを収集しています。それは完全にクールであり、リレーショナルデータベースもそれをうまく処理します。ただし、サブクエリを使用すると、この特定のケースでは、2つのクエリが発生します。1つはUデータを取得し、次に外部クエリが発生し、サブクエリのデータを使用してRデータを設定します。
ただし、ここに注意が必要です。クエリでは、サブクエリは完全に別のテーブルを参照します。だからそれはまだ速いでしょう。そのサブクエリは、Uデータのみに含まれています。2つのクエリを取得します。Uデータを取得してから、Uデータを使用してRデータを更新します。ただし、サブクエリがRからのデータを参照する同様のクエリを作成した場合、2つの個別のクエリを取得することはできません。Rのすべてのデータの全表スキャンを実行することになりますが、これはかなり遅くなります。
より完全にするための編集:他の人が言っているように、それの多くはあなたが使用しているDBMSとそれが最も得意なものに帰着します。そして、SQLを最初に学んだとき(私は決して専門家ではありません)、ハードルの1つは、同じことを行い、同じ結果を得る方法が非常に多く、最終的に同じものに最適化されることに気付くことです。 。したがって、明確な「正しい」方法がないため、「正しい」方法を見つけることはしばしば無駄です。私は正確さとスピードだけでなく、保守性のためにも書き込もうとしています-そして、サブクエリは必要以上に脳で難しいことがあることがわかりました。私はそれらを避けることができればそれらなしでやろうとします(代替がカーソルか何かでない限り:-D)。