助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26526
問題を開く
PROD表とOLDPROD表の構造とデータを確認して下さい。




次の問合せの実行結果はどうなりますか。
SELECT category FROM prod
UNION
SELECT category FROM oldprod;




次の問合せの実行結果はどうなりますか。
SELECT category FROM prod
UNION
SELECT category FROM oldprod;
正解
解説
設問のSQL文はUNION演算子を用いて複合問合せを行なっています。
UNION演算子を用いた複合問合せでは、2つの問合せの結果から重複行を排除して表示されます。したがって、問合せの結果は、2つの問合せの結果からPROD表とOLDPROD表で重複している"10, 40, NULL"の値を排除したものが表示されます。
以上より、

が正解となります。
参考:
UNION演算子を用いた複合問合せでは、2つの問合せの結果から重複行を排除して表示します。



UNION演算子による複合問合せでは、内部的に、問合せ結果をSELECT句の1番目に指定されている列の昇順にソートし(1番目に指定されている列に同値がある場合は、さらに2つ目に指定されている列の昇順にソートします)、重複行を排除して結果を表示します。


なお、複合問合せでは問合せの結果にNULL値が含まれていてもNULL値を無視しません。
UNION演算子での演算の結果にNULL値が含まれている場合、重複するNULL値は排除されます(NULL値が1つだけ表示されます)。

UNION演算子を用いた複合問合せでは、2つの問合せの結果から重複行を排除して表示されます。したがって、問合せの結果は、2つの問合せの結果からPROD表とOLDPROD表で重複している"10, 40, NULL"の値を排除したものが表示されます。
以上より、

が正解となります。
参考:
UNION演算子を用いた複合問合せでは、2つの問合せの結果から重複行を排除して表示します。


SQLを表示
SELECT job_id FROM jobs;
SELECT DISTINCT job_id FROM employees;
SELECT DISTINCT job_id FROM employees;

SQLを表示
SELECT job_id FROM JOBS
UNION
SELECT job_id FROM employees;
UNION
SELECT job_id FROM employees;
UNION演算子による複合問合せでは、内部的に、問合せ結果をSELECT句の1番目に指定されている列の昇順にソートし(1番目に指定されている列に同値がある場合は、さらに2つ目に指定されている列の昇順にソートします)、重複行を排除して結果を表示します。

SQLを表示
SELECT department_id, manager_id
FROM departments
UNION
SELECT department_id, employee_id
FROM employees;
FROM departments
UNION
SELECT department_id, employee_id
FROM employees;

SQLを表示
SELECT manager_id FROM employees;
SELECT manager_id FROM employees
UNION
SELECT 9999 FROM dual;
SELECT manager_id FROM employees
UNION
SELECT 9999 FROM dual;
なお、複合問合せでは問合せの結果にNULL値が含まれていてもNULL値を無視しません。
UNION演算子での演算の結果にNULL値が含まれている場合、重複するNULL値は排除されます(NULL値が1つだけ表示されます)。

SQLを表示
SELECT salary from employees;
SELECT salary from employees
UNION
SELECT salary from employees;
SELECT salary from employees
UNION
SELECT salary from employees;
NULLについて
投稿日 2026/05/13
UNIONは第一引数と第一引数と重複してない値第二引数の値をあわせて出力すると思いますが、問題では、NULLが重複してるのにも関わらず表示されています。どういうことでしょうか
r
rink_rew
2026/05/16 14:32
UNION演算子の挙動は、解説に記載のあるとおり以下のようになります。
UNION演算子を用いた複合問合せでは、2つの問合せの結果から重複行を排除して表示されます。したがって、問合せの結果は、2つの問合せの結果からPROD表とOLDPROD表で重複している"10, 40, NULL"の値を排除したものが表示されます。
1つ目の問合せ結果と2つ目の問合せ結果、それぞれを合わせたものを戻し(つまり和集合を戻す)、重複は排除します。
この問題では、重複しているのは「NULL」だけでなく、「10」と「40」も重複しています。
なので、これらは重複が排除され、すべて1件ずつ表示されているということで良いのではないですか?
ご質問の意図が理解できていなかったらすみません。
コメント
この投稿に対して返信しませんか?