インラインビューとインラインテーブルの違いを誰かに教えてもらえますか?
SQLコードによる説明は、概念を簡単に理解するのに役立つかもしれません。
「この質問はインタビューで私に尋ねられました。」
これはよく耳にします。この種の質問の問題は、間違った人に質問していることです。面接官に「申し訳ありませんが、「インラインテーブル」という用語に慣れていないので、説明してください」と言う勇気が必要です。それ?"
代わりにあなたは私たちに尋ねます、そして問題は、私たちはインタビューが何を考えていたのかわかりません。「インラインテーブル」に最も近いのは、ネストされたテーブルコレクションをクエリするためのTABLE()関数であるというアレックスに同意しますが、これは標準的な用語ではありません。
私は何度も面接テーブルの反対側にいました。私は常に、質問を明確にするように私に求めた候補者を称賛します。私はいつも怒鳴る候補者をマークダウンします。
世界はデータベースクエリの最適化に苦労しているので、私もそうです。アプリケーションを80%まで高速化できるものがあると言えば、適切な状況で使用すると、何と言いますか...ここで問題は、部門全体の最低給与と最高給与を、それぞれのマネージャーの従業員の名前で計算するとします。これを行う1つの方法は、従業員の総給与を含む一時テーブルを作成することです。
create table tmp_emp_sal as select t.emp_id,max(t.sal) as maxsal,min(t.sal) as minsal,avg(t.sal) as avgsal from sal t group by t.emp_id
その後、さらにクエリで使用します。
select concat(e.last_nm, e.first_nm) as employee_name,concat(m.last_nm,m.first_nm) as manager_name,tt.maxsal,tt.minsal,tt.avgsal from emp e,emp m,dept d,tmp_test tt where e.dept_id = d.dept_id and s.emp_id = tt.emp_id and e.mgr_id = m.emp_id order by employee_name, manager_name
次に、2つのDML操作とDDL操作を1つのDMLクエリにマージして、上記のコードを最適化します。
concat(e.last_nm、e.first_nm)as employee_name、concat(m.last_nm、m.first_nm)as manager_name、tt.maxsal、tt.minsal、tt.avgsal from emp e、emp m、dept d、(select t.emp_id、max(t.sal)as maxsal、min(t.sal)as minsal、avg(t.sal)as avgsal from sal t group by emp_id)ttここで、e.dept_id=d.dept_idおよびs.emp_id =tt.emp_idおよびe.mgr_id=m.emp_idのemployee_name、manager_nameによる順序
上記のクエリは、次の欠点からユーザーを救います:-高価なDDLステートメントを排除します。データベースサーバーへのラウンドトリップを排除します。メモリ使用量は、中間ステップではなく最終結果のみを保存するため、はるかに軽量です。したがって、一時テーブルの代わりにインラインビューを使用することをお勧めします。