複数の表からのデータの表示24 / 50 問

以下のSQL文で、何行のデータが返されますか。

SELECT employee_id, salary FROM employees;

EMPLOYEE_ID  SALARY
------------ -------
201          2500
202          3000
203          5000
204          12000

SELECT grade_level, lowest_sal, highest_sal FROM job_grades;

GRADE_LEVEL  LOWEST_SAL  HIGHEST_SAL
------------ ----------- ------------
A            1000        2999
B            3000        4999
C            5000        9999

SELECT e.employee_id, e.salary, g.grade_level
FROM employees e JOIN job_grades g
  ON e.salary BETWEEN g.lowest_sal AND g.highest_sal;
A2行
B3行✓
C4行
Dエラーになる
正解:B解説

=以外の演算子(BETWEEN、>=、<など)を結合条件に使う結合を非等価結合といいます。
BETWEEN 下限 AND 上限は下限と上限の値を含むため、各従業員は次の等級に結合されます。

EMPLOYEE_IDSALARY該当する等級
2012500A(1000〜2999)
2023000B(3000〜4999)
2035000C(5000〜9999)
20412000該当なし

204は給与がどの範囲にも含まれないため、内部結合では返されません。そのため3行が返されます。

SELECT e.employee_id, e.salary, g.grade_level
FROM employees e JOIN job_grades g
  ON e.salary BETWEEN g.lowest_sal AND g.highest_sal;

EMPLOYEE_ID  SALARY  GRADE_LEVEL
------------ ------- ------------
201          2500    A
202          3000    B
203          5000    C

該当する等級がない従業員も返したい場合は、LEFT OUTER JOINを使用します。その場合、204のGRADE_LEVELはNULLになります。

前後の問題