これは複雑な質問ですので、シナリオを設定する際はご容赦ください。
次のような単純化されたテーブル設定があるとします。
table 1(employee): {
employee_id, -primary key
first_name,
last_name,
days_of_employment
}
with data:
employee_id first_name last_name days_of_employment
111 Jack Stevens 543
222 Clarice Bobber 323
333 Roy Cook 736
444 Fred Roberts 1000
...
table 2(teams): {
team_code, --primary key
description
}
with data:
team_code description
ERA Enrollment Records Assoc.
RR Rolling Runners
FR French Revolution
...
table 3(employees_teams):{
employee_id, --primary key
team_code --primary key
}
with data:
employee_id team_code
111 RR
111 FR
222 FR
222 ERA
333 FR
...
これらの表が何であるか、またその目的について明確であることを願っています。要件からの私のシナリオは次のとおりです。「Rolling Runners and Enrollment Records Assoc. チームの従業員の平均雇用日数が必要です。」このクエリの書き方を知っている方法は 2 つありますが、どちらも十分に機能しているように見えますが、本当に知りたいのは、どちらが oracle データベースの処理速度が速いかということです。これらのクエリは、平均計算を台無しにする重複行を生成しないように記述されていることに注意してください。
クエリ 1:
SELECT AVG(e.days_of_employment) avg_days_of_employment
FROM employee e,
(
SELECT DISTINCT employee_id
FROM employees_teams
WHERE team_code IN ('ERA','RR')) available_employees
WHERE e.employee_id = available_employees.employee_id
クエリ 2:
SELECT AVG(e.days_of_employment) avg_days_of_employment
FROM employee e
WHERE EXISTS(
SELECT 1
FROM employees_teams et
WHERE et.team_code IN ('ERA','RR')
AND et.employee_id = e.employee_id)
このサンプル データを使用して、この状況が最初から意味をなさない可能性がありますが、どのクエリを使用するのが「より良い」かを知りたいと考えています。