Oracle Database 19cで、エラーにならないSQL文はどれですか。2つ選択してください。
ASELECT department_id AS dept, COUNT(*) FROM employees GROUP BY dept;
BSELECT department_id, COUNT(*) FROM employees GROUP BY 1;
CSELECT department_id AS dept, COUNT(*) FROM employees GROUP BY department_id ORDER BY dept;✓
DSELECT department_id, COUNT(*) FROM employees GROUP BY department_id ORDER BY 2;✓
正解:C・D解説
SELECT文の各句は、おおむね次の順序で処理されます。
SELECT文の処理順序
| 順序 | 句 |
|---|---|
| 1 | FROM |
| 2 | WHERE |
| 3 | GROUP BY |
| 4 | HAVING |
| 5 | SELECT |
| 6 | ORDER BY |
列別名はSELECT句で定義されるため、SELECT句より後に処理されるORDER BY句でだけ使用できます。
各選択肢の検討
- A(誤):GROUP BY句の時点では列別名
deptがまだ定義されていないためエラーになります。 - B(誤):Oracle Database 19cでは、GROUP BY句の
1は列番号ではなく定数として扱われます。department_idでグループ化されないためエラーになります。 - C(正):ORDER BY句では列別名を使用できます。
- D(正):ORDER BY句では、SELECT句の何番目の列か(列番号)で並び順を指定できます。