以下の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_ID | SALARY | 該当する等級 |
|---|---|---|
| 201 | 2500 | A(1000〜2999) |
| 202 | 3000 | B(3000〜4999) |
| 203 | 5000 | C(5000〜9999) |
| 204 | 12000 | 該当なし |
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になります。