Oracle Database 12C SQL基礎知識

Oracle Database 12C SQL基礎知識

"星空"

間違いやすい問題

〇がある回答:正確回答 〇が無い回答:間違い回答

1、正規化とは、データの重複を排除し、データ間の正しいリレーションシップを設定してデータを一元管理できるようにすることです。

・非正規形
非正規形は正規化されていないデータです。

・第1正規形
第1正規化は、非正規形の表に次の作業を行います。
・主キーを設定する
・繰り返し現れる列のデータをグループ化して、別の表に切り離す
・導出項目(他の属性から算出できる項目)を削除する

・第2正規形
第2正規化は、第1正規形の表から部分関数従属性であるものを除きます。

・第3正規形
第3正規化は、第2正規形から推移関数従属性を除きます。

2、EMPLOYEES表のDEPARTMENT_IDが1以外の従業員を検索する条件として、正しいものを全て選択して下さい。

WHERE department_id <>= 1
WHERE department_id <> 1 〇
WHERE department_id = 1
WHERE department_id IS NOT 1
WHERE department_id ^= 1 〇
WHERE department_id != 1 〇

3、次のSQL関数の実行結果として正しいものを1つ選択して下さい。

LENGTH(‘Oracle Web問題集’)

LENGTH関数に全角文字は指定できないためエラーとなる
13 〇
12
20
16

解説
LENGTH関数は引数で指定された文字列の長さを返す関数です。
“Oracle Web問題集”のように文字列に全角文字やスペースが含まれている場合、全角文字やスペースも1文字としてカウントされます。

4、単一行関数は、文字関数、数値関数、日付関数、変換関数と汎用関数を含みます。

5、次のSQL文のうち、正しいものを全て選択して下さい。

SELECT q’=I’m fine.=’ FROM dual; 〇
SELECT Q’[I’m fine.[‘ FROM dual;
SELECT Q’aI’m fine.a’ FROM dual; 〇
SELECT q’{I’m fine.}’ FROM dual; 〇
SELECT q’XI’m fine.x’ FROM dual;

解説
代替引用符q演算子の引用符デリミタとして、[],<>,(),{}の記号を使用する場合は、括弧開き/括弧閉じの組合せで使用します。
また、引用符デリミタとして英文字を使用する場合、大文字と小文字は区別されるため、どちらか1つに統一しなければなりません。

6、ROUND(9876.54321, -3)の結果は10000である
ROUND(8876.54321, -3)の結果は8900である

7、次のSQL関数の実行結果として正しいものを1つ選択して下さい。

SELECT INSTR(‘Oracle Web問題集’, ‘WEB’)
FROM dual;

「0」と表示される 〇
「-1」と表示される
「8」と表示される
文字列が見つからないのでエラーとなる

8、SQL*Plusなどで表の構造を表示するためのコマンドとして、正しいものはどれですか(該当するものをすべて選択してください)。

DISTINCT
DEFAULT
DESCRIBE 〇
DESC 〇
DECODE

9、EMPLOYEES表の検索結果を以下の形式で表示させるためには、どの問い合わせを実行しますか(該当するものをすべて選択してください)。

社員No 社員名 給与(月給)


1001 山田次郎 500000
1002 佐藤書府 500000

SELECT employee_id “社員No”, employee_name 社員名, salary “給与(月給)” FROM employees; 〇
SELECT employee_id 社員No, employee_name 社員名, salary 給与(月給) FROM employees;
SELECT employee_id AS “社員No”, employee_name AS “社員名”, salary AS “給与(月給)” FROM employees; 〇
SELECT “社員No” AS employee_id, “社員名” AS employee_name, 給与(月給) AS salary FROM employees;
SELECT employee_id AS ‘社員No’, employee_name AS ‘社員名’, salary AS ‘給与(月給)’ FROM employees;

10、現在の日時は2010年12月25日14時40分です。
TRUNC関数の結果として正しいものはどれですか(該当するものを全て選択して下さい)。
ただし、日付の表示書式はRR-MM-DDとします。

TRUNC(SYSDATE, ‘YEAR’)の結果は”10-01-01”である 〇
TRUNC(SYSDATE)の結果は”10-01-01”である
TRUNC(SYSDATE, ‘DD’)の結果は”10-12-26”である
TRUNC(SYSDATE, ‘YEAR’)の結果は”11-01-01”である
TRUNC(SYSDATE, ‘DD’)の結果は”10-12-25”である 〇
TRUNC(SYSDATE, ‘MONTH’)の結果は”10-12-01”である 〇

11、実行結果に”Oracle”が表示されるのはどの問い合わせですか(該当するものを全て選択して下さい)。

SELECT SUBSTR(‘Oracle Master’, -6) FROM dual;
SELECT SUBSTR(‘Oracle Master’, 1, 6) FROM dual; 〇
SELECT INSTR(‘Oracle Master’, ‘Master’) FROM dual;
SELECT TRIM(REPLACE(‘Oracle Master’, ‘Master’)) FROM dual; 〇
SELECT INITCAP(‘oracle’) FROM dual; 〇
SELECT CONCAT(‘Oracle ‘, ‘Master’) FROM dual;
SELECT TRIM(RPAD(‘Oracle Master’, 7, ‘ ‘)) FROM dual; 〇

12、単一行関数の説明として正しい記述はどれですか(該当するものを全て選択して下さい)。

SELECT句でしか使用できない
引数として入力したデータと常に同じデータ型の値を返す
引数には常に列名を指定する
1行ごとに1つの結果を返す 〇
ネストレベルに制限はない 〇

解説
単一行関数とは、行ごとに処理を行い、1行につき1件の結果を返す関数です。SELECT句、WHERE句、HAVING句、ORDER BY句などで使用することができます。
単一行関数のネストレベルには制限ありません。また、指定した引数と返される結果のデータ型は、必ずしも一致するとは限りません。

13、ORDER BY句によるソートの説明として間違っているものはどれですか。

数値型の昇順では値の小さいものから順に表示される
ソート項目にNULL値が混在していた場合のソート結果は不定である 〇
日付型の降順では新しい日付から順に表示される
文字型のソートでは、大文字と小文字は区別される

14、次の問い合わせを確認してください。

 SELECT customer_id, cust_last_name, cust_first_name
 FROM customers
 WHERE 1 = 5;

この問い合わせの実行結果はどうなりますか。

全てのデータが検索される
department_idが「5」であるデータが検索される
エラーとなる
データは1件も検索されない 〇
customer_idが「5」であるデータが検索される

15、列別名を指定したSQL文のうち、エラーが無く実行されるのはどのSQL文ですか(該当するものをすべて選択してください)。

SELECT employee_name AS Employee Name, salary AS Salary FROM employees;
SELECT employee_name “Employee Name”, salary AS Salary FROM employees; 〇
SELECT employee_name, salary “Salary($)” FROM employees; 〇
SELECT employee_name 従業員名, salary AS ‘給与’ FROM employees;
SELECT employee_name AS EmployeeName, salary Salary($) FROM employees;
SELECT employee_name 従業員名, salary 給与 FROM employees; 〇

解説
SQL文の実行結果に表示される列見出しを変更したい場合は、SELECT句に列別名を指定します。列別名は算術式にも指定することができます。
列別名は項目名と列別名をスペースで区切るか、明示的にASキーワードで指定します。

列別名はオブジェクトのネーミング規則に従って命名されますが、大文字と小文字を区別したり、ネーミング規則に反する列別名(スペースを使用するなど)を使用する場合は、列別名を二重引用符(“)で囲まなければなりません。

16、SELECT句に指定された算術式に列別名を指定することはできますが、算術式の中で列別名を使用することはできません。

17、算術式を指定できる句として正しいものはどれですか(該当するものを全て選択してください)。

WHERE句 〇
GROUP BY句 〇
FROM句
HAVING句 〇
SELECT句 〇
ORDER BY句 〇

解説
算術式はSELECT句だけではなく、FROM句を除く任意の句で使用できます。

18、SQL関数に関する説明として誤っているものはどれですか。

グループ関数は行グループごとに1つの結果を返す
単一行関数は1行ごとに1つの結果を返す
単一行関数とグループ関数の2種類がある
SQL関数には常に引数が必要である 〇

解説
SQL関数とはOracleに予め用意されている関数のことです。
多くの関数が引数を必要としますが、SYSDATE関数など引数を必要としない関数もあります。

19、次のSQL文のうち、正常に実行されるものはどれですか(3つ選択して下さい)。
ただし、データベースの実行環境は日本語環境とします。

SELECT employee_name “EMPLOYEE NAME” FROM employees ORDER BY EMPLOYEE NAME;
SELECT employee_name AS “EMPNAME” FROM employees ORDER BY empname; 〇
SELECT employee_name “empname” FROM employees ORDER BY empname;
SELECT employee_name emp#name FROM employees ORDER BY emp#name; 〇
SELECT employee_name AS Employee_Name FROM employees ORDER BY “Employee_Name”;
SELECT employee_name “社員名” FROM employees ORDER BY 社員名; 〇

20、次の表示形式で検索結果を表示させるためには、どの問い合わせを実行しますか。
従業員番号 : 1001 従業員氏名 : 山田二郎

SELECT ‘従業員番号 : $employee_id 従業員氏名: $employee_name’, employee_id, employee_name FROM employees;
SELECT 従業員番号 : || employee_id || 従業員氏名 : || employee_name FROM employees;
SELECT “従業員番号 : “ || employee_id || “ 従業員氏名: “ || employee_name FROM employees;
SELECT ‘従業員番号 : ‘ + employee_id + ‘ 従業員氏名: ‘ + employee_name FROM employees;
SELECT ‘従業員番号 : ‘ || employee_id || ‘ 従業員氏名 : ‘ || employee_name FROM employees; 〇

21、日付値の特徴として誤っている記述はどれですか(該当するものを全て選択して下さい)。

日付値の表示形式は言語環境により決まっており、変更することはできない 〇
日本語環境のデフォルトの表示形式はRR-MM-DDである
日付値に対して数値を足したり引いたりできる
内部的には文字列で格納されている 〇
日付値+日付値の演算はエラーとなる

解説
日付値には以下のような特徴があります。

・日付値は世紀,年,月,日,時,分,秒を表す内部的な数値形式で格納されています。
・日付値のデフォルトの表示書式は言語環境により異なりますが、変更することができます。
・日付値に対して数値(日数)の加算,減算を行えます。また日付値-日付値で2つの日付値間の日数を求める事もできます。ただし、日付値+日付値の演算はできません。

22、実行結果が”12-04-01”と表示されるのはどの問い合わせですか(該当するものを全て選択して下さい)。
ただし、データベースの実行環境は日本語環境とし、日付書式はRR-MM-DDとします。
※ 2012年3月26日は月曜日です。

SELECT ADD_MONTHS(‘12-01-01’, 4) FROM dual;
SELECT TRUNC(TO_DATE(‘12-04-10’), ‘DD’) FROM dual;
SELECT ROUND(TO_DATE(‘12-04-10’), ‘DD’) FROM dual;
SELECT LAST_DAY(‘12-03-01’) + 1 FROM dual; 〇
SELECT NEXT_DAY(‘12-03-26’, ‘日’) FROM dual; 〇
SELECT ROUND(TO_DATE(‘12-04-10’), ‘MONTH’) FROM dual; 〇

23、TRIM関数は、引数で指定された文字列の前後にある削除文字を取り除いた文字列を返します。

TRIM([LEADING | TRAILING | BOTH] [削除文字] FROM 文字列)
または
TRIM(文字列)

LEADING,TRAILING,BOTHを省略した場合は、文字列の前後の削除文字が取り除かれます。
削除文字には任意の1文字を指定できますが、文字列は指定できません。

24、次のSQL文の実行結果として正しいものはどれですか。
ただし、日付書式は”RR-MM-DD”とします。

 DEFINE date = ‘10-04-01’

 SELECT department_id, employee_name, hiredate FROM employees
 WHERE hiredate > ‘&date’ AND department_id = &id;

「date」と「id」の入力を促される
「id」のみ入力を促される 〇
「date」は予約語のため、DEFINEコマンドでエラーとなる
「date」のみ入力を促される

25、現在の日時は2012年12月12日午後10時28分35秒です。
現在時刻を次の形式で表示するには、どのSQL文を実行しますか。
ただし、実行環境は日本語環境とします。

2012年12月12日(水) 午後 10時28分35秒

SELECT TO_CHAR(SYSDATE, ‘RRRR”年”MM”月”DD”日 (“DY”)” AM HH”時”MI”分”SS”秒”‘) FROM dual; 〇
SELECT TO_CHAR(SYSDATE, ‘YYYY”年”MM”月”DD”日 (“DAY”)” P.M. HH12”時”MI”分”SS”秒”‘) FROM dual;
SELECT TO_CHAR(SYSDATE, ‘RRR”年”MM”月”DD”日 (“DY”)” HH12”時”MI”分”SS”秒”‘) FROM dual;
SELECT TO_CHAR(SYSDATE, ‘YYY”年”MM”月”DD”日 (“DY”)” PM HH24”時”MI”分”SS”秒”‘) FROM dual;

26、TO_NUMBER関数で文字列を数値に変換します。正しく変換されるものはどれですか。
ただし、実行環境は日本語環境とします。

TO_NUMBER(‘$500,000’, ‘L999,999’)
TO_NUMBER(‘?500,000’, ‘L99999’)
TO_NUMBER(‘?500,000’, ‘999,999’)
TO_NUMBER(‘?500,000’, ‘L999,999’) 〇

27、数値書式のうち、負の値に関する書式とその説明として、正しいものはどれですか。

TO_CHAR(-123456, ‘999999’) は 123456 と表示される
TO_CHAR(-123456, ‘999999MI’) は 123456- と表示される 〇
TO_CHAR(-123456, ‘999999S’) は -123456 と表示される
TO_CHAR(-123456, ‘999999MI’) は -123456 と表示される
TO_CHAR(-123456, ‘999999PR’) は <123456> と表示される 〇
TO_CHAR(-123456, ‘999999PR’) は 123456- と表示される

28、各プロモーションの開始日(PROMO_BEGIN_DATE)と終了日(PROMO_END_DATE)が同じだったら、「同日終了」と表示します。
どの問合せを使用しますか(該当するものを全て選択して下さい)。

SELECT promo_name, NVL(TO_CHAR(promo_end_date - promo_begin_date), ‘同日終了’) status FROM promotions;
SELECT promo_name, NVL2(NULLIF(promo_begin_date, promo_end_date), NULL, ‘同日終了’) status FROM promotions; 〇
SELECT promo_name, CASE NULLIF(promo_begin_date, promo_end_date) WHEN NULL THEN ‘同日終了’ END status FROM promotions;
SELECT promo_name, DECODE(promo_begin_date - promo_end_date, 0, ‘同日終了’) status FROM promotions; 〇

解説
・SELECT promo_name, CASE NULLIF(promo_begin_date, promo_end_date) WHEN NULL THEN ‘同日終了’ END status FROM promotions;
単純CASE式ではNULL値の評価はできないため、NULL値の判定はTRUEとならず条件に該当しないことになります。エラーにはなりませんが、「同日終了」が表示されません。NULL値の評価は、検索CASE式でIS NULL演算子を使う必要があります。誤ったSQL文です。

29、次のSQL文の実行結果として、正しいものはどれですか。

 SELECT TO_NUMBER(‘-0.75’, ‘0.99999’) * 3
 FROM dual;

TO_NUMBER関数の結果を用いて演算を行うことはできないため、エラーとなる
正常に実行され、-2.25が表示される 〇
TO_NUMBER関数の数値書式に-(マイナス)記号が指定されていないため、エラーとなる
正常に実行され、2.25が表示される

30、NULLIF関数の説明で正しいものはどれですか(該当するものをすべて選択してください)。

2番目の引数にリテラルNULL値を指定できる 〇
2つの値を比較して、等しい場合はNULLを返す 〇
2つの値を比較して、等しい場合は第1引数の値を返す
2つの値を比較して、異なる場合はNULLを返す
1番目の引数にリテラルNULL値を指定できない 〇
2つの値を比較して、異なる場合は第2引数の値を返す

31、2009年12月31日以前に入社した従業員と2010年1月1日以降に入社した従業員の年収の合計をそれぞれ求めるために次のSQL文を実行しました。
実行結果として正しいものはどれですか。
ただし、従業員の年収はSALARY列の12倍にCOMMISSION列の値を加算したものとします。

SELECT SUM(CASE WHEN hiredate < TO_DATE(‘2010-01-01’, ‘YYYY-MM-DD’) THEN salary 12 + commission
ELSE NULL END) sum1,SUM(CASE WHEN hiredate >= TO_DATE(‘2010-01-01’, ‘YYYY-MM-DD’) THEN salary
12 + commission
ELSE NULL END) sum2
FROM employees;

正常に実行でき、期待したデータが表示される 〇
関数の中でCASE式を使用することはできないので、エラーとなる
CASE式のCASEとWHENの間に式が指定されていないので、エラーとなる
CASE式のデフォルトの戻り値にNULL値を指定することはできないので、エラーとなる

解説
CASE式には単純CASE式と検索CASE式の2種類がありますが、設問のSQL文で使用されているCASE式は検索CASE式です。

CASE式は関数の引数として記述することもできますし、デフォルトの戻り値にNULL値を指定することもできます。

32、CASE式では、WHEN句で比較条件やINやLIKEなどの演算子が使用できますが、DECODE関数では使用できません。
NVL関数の第2引数には、第1引数と同じデータ型の値を指定しなければなりません。
COALESCE関数で引数を順番に判定しNULL値以外の値を返そうとしていますが、引数は全て同じデータ型でなければなりません。

33、現在の日付は2012年06月23日です。
1999年4月1日から現在までの日数を求めるには、どのSQL文を実行しますか(該当するものをすべて選択してください)。
ただし、実行環境は英語環境とし、デフォルトの日付の表示形式は「RR-MM-DD」とします。

SELECT TO_CHAR(SYSDATE) - ‘99-04-01’ FROM dual;
SELECT SYSDATE - TO_DATE(‘99-04-01’, ‘RR-MM-DD’) FROM dual; 〇
SELECT SYSDATE - TO_DATE(‘01-Apr-99’) FROM dual;
SELECT SYSDATE - TO_DATE(‘99-04-01’, ‘YY-MM-DD’) FROM dual;
SELECT TO_DATE(SYSDATE, ‘RR-MM-DD’) - TO_DATE(‘99-04-01’, ‘RR-MM-DD’) FROM dual; 〇
SELECT SYSDATE - TO_DATE(‘1999-Apr-01’, ‘YYYY-Mon-DD’) FROM dual; 〇

32、日本語環境で日付書式のデフォルト値は「RR-MM-DD」です。例:12-05-21

33、次の2つのSQL文の結果として正しいものはどれですか。

NAME VARCHAR2(20)
ENDDATE DATE

 1) SELECT NVL(enddate, name) FROM prod;

 2) SELECT NVL2(enddate, name, name) FROM prod;

2)はエラーが発生し、1)は正常に実行できる
1),2)は正常に実行できるが、異なる結果が出力される
1)はエラーが発生し、2)は正常に実行できる 〇
1),2)は正常に実行でき、同じ結果が出力される

解説:
NVL関数は、第1引数の値がNULL値の場合は第2引数の値を返し、第1引数の値がNULL値以外の場合はそのまま第1引数の値を返します。
NVL2関数は、第1引数の値がNULL値以外の場合は第2引数の値を返し、第1引数の値がNULL値の場合は第3引数の値を返します。

また、NVL関数の第2引数に指定する式は、第1引数の式と同じデータ型でなければなりません。
NVL2関数の第3引数に指定する式は、第2引数の式と同じデータ型でなければなりませんが、第1引数とは異なるデータ型でも構いません。

34、次のSQL文を確認して下さい。

 SELECT employee_id, employee_name, hiredate
 FROM employees
 WHERE hiredate >= ‘30-APR-10’;

このSQL文に関して正しい記述はどれですか。
ただし、データベースの実行環境は日本語環境とし、日付書式は”RR-MM-DD”とします。

正常に実行され全てのデータが表示される
正常に実行されるがデータは1件も表示されない
正常に実行され該当するデータが表示される
エラーが発生する 〇

Oracle Databaseでは、データ型の変換が意味を持つ場合に、自動的にデータ型の変換が行われます(暗黙的なデータ変換といいます)が、次のような場合にはデータ変換は行われません。

・数値が期待されている箇所に’abc’などの文字列を指定する
・日付書式にあっていない日付リテラルを指定する

設問では、日本語環境で日付書式が”RR-MM-DD”であるのに対し、”DD-MON-RR”の形式で日付リテラルが指定されていますので、暗黙的なデータ変換が行われません。

35、次のSQL文のうち正常に実行されるものはどれですか(該当するものをすべて選択してください)。

SELECT employee_id, employee_name, DECODE(NULLIF(salary, 500000), salary, 250000*1.1, NULL, hiredate) sal FROM employees;
SELECT employee_id, employee_name, DECODE(NULLIF(salary, 500000), NULL, ‘-‘, salary) sal FROM employees; 〇
SELECT employee_id, employee_name, DECODE(NULLIF(salary, 500000), NULL, salary, ‘-‘) sal FROM employees;
SELECT employee_id, employee_name, DECODE(salary, salary > 400000, ‘High’, salary < 200000, ‘low’, ‘middle’) sal FROM employees;
SELECT employee_id, employee_name, DECODE(salary, NULL, 150000) sal FROM employees; 〇

解説:DECODE関数の条件に、WHERE句の条件に指定するような比較演算子を使用した条件を記述することはできません。
また、条件が複数指定された場合の戻り値のデータ型は、第3引数で指定された戻り値のデータ型が採用されます。したがってそれぞれの戻り値は、第3引数の戻り値のデータ型と同じデータ型の値を指定するか、暗黙的なデータ変換で第3引数の戻り値のデータ型と同じデータ型となるような値を指定しなければなりません。

・SELECT employee_id, employee_name, DECODE(NULLIF(salary, 500000), NULL, ‘-‘, salary) sal FROM employees;
上記のSQL文で、DECODE関数に指定された第3引数は文字データ(‘-‘)であるのに対し、デフォルトの戻り値として数値データ(salary)が指定されています。
データ型が異なるのにエラーとならずに正常に実行できるのは、数値データが暗黙的データ変換により文字データに変換されるためです。

36、データ型の変換に関して正しい記述はどれですか(該当するものを全て選択して下さい)。

データ型を変換する場合は必ず変換関数で変換しなければならない
TO_NUMBER関数は文字列または日付値を数値に変換する
TO_CHAR関数は数値または日付値を文字列に変換する 〇
日付値を数値に変換する関数はない 〇
TO_DATE関数は数値を日付値に変換する

解説:
・TO_CHAR:数値や日付値を文字列に変換する
・TO_DATE:文字列を日付値に変換する
・TO_NUMBER:文字列を数値に変換する

37、COALESCE関数で引数を順番に判定しNULL値以外の値を返そうとしていますが、引数は全て同じデータ型でなければなりません。

38、次のSQL文のうち、正常に実行されるものはどれですか(該当するものを全て選択して下さい)。
ただし、日付書式は”RR-MM-DD”とします。

SELECT startdate + ‘12-01-01’ FROM prod;
SELECT startdate + ‘10’ FROM prod; 〇
SELECT FROM prod WHERE startdate = ‘10-01-30’; 〇
SELECT ‘name:’ + name FROM prod;
SELECT
FROM prod WHERE startdate > ‘05/01/01’; 〇

解説:・SELECT * FROM prod WHERE startdate > ‘05/01/01’;
WHERE句に指定された文字リテラルが暗黙的データ変換でDATE型の値に変換され、条件に該当する列が取り出されます。
ここで、日付書式が”RR-MM-DD”であるのに、文字リテラルを”RR/MM/DD”の形式として、異なる区切り文字で指定しています。しかしOracle Databaseは区切り文字に関して一定の柔軟性を持って変換しますので、エラーとはなりません。

39、
複数行副問合せに関する説明として、正しいものはどれですか(該当するものを全て選択して下さい)。

複数行副問合せではGROUP BY句を指定することはできない
複数行副問合せをネストすることができる 〇
複数の列を返すこともできる 〇
複数行副問合せではグループ関数をネストすることができない
複数行副問合せは1件のデータを返す
複数行副問合せは複数件のデータを返す 〇

40、副問合せに関する説明として、正しいものはどれですか(2つ選択して下さい)。

必ず副問合せが実行された後で主問合せが実行される
複数行副問合せの比較演算子に単一行演算子=を使用するとエラーとなる 〇
必ず主問合せが実行された後で副問合せが実行される
副問合せは必ず比較演算子の右側に指定する
SELECT文で使用する副問合せは()括弧で囲む 〇

41、MINUS演算子に関する説明として、誤っているものはどれですか。

問合せの結果にNULL値が含まれている場合は、NULL値も表示する
問合せの結果がソートされる
1つ目の問合せと2つ目の問合せの順序を逆にしても結果は同じになる 〇
2つの問合せのSELECT句に指定する列や式の数は同じにする

42、次の問合せのうち、正しく実行されるものはどれですか(該当するものを全て選択して下さい)。

SELECT department_id dept FROM departments UNION SELECT employee_id emp FROM employees ORDER BY emp;
SELECT department_id FROM departments UNION SELECT employee_id FROM employees ORDER BY department_id; 〇
SELECT department_id FROM departments ORDER BY department_id UNION SELECT employee_id FROM employees;
SELECT department_id FROM departments UNION SELECT employee_id FROM employees ORDER BY employee_id;
SELECT department_id dept FROM departments UNION SELECT employee_id emp FROM employees ORDER BY dept; 〇

解説
集合演算子を用いて複合問合せを行う際にORDER BY句を指定する場合は、次のガイドラインに従います。

・ORDER BY句は複合問合せの最後の問合せに指定する
・ORDER BY句には最初の問合せに指定されている列名や列別名を指定する

43.MERGE文の説明として正しいものはどれですか(該当するものを全て選択して下さい)。

他の表とデータを入れ替える
行の挿入と更新を同時に行える 〇
DML文に分類される 〇
DDL文に分類される

解説
MERGE文は異なる表の行をマージできるDML文です。1つのMERGE文で、該当する行があればUPDATE、無ければINSERTというように、行の挿入と更新を同時に行えます。
MERGE文は次のように使用します。

44.PROD表の全てのデータを削除するには、どのSQL文を実行しますか(該当するものをすべて選択してください)。

TRUNCATE FROM prod;
TRUNCATE TABLE prod WHERE prodid > 1;
TRUNCATE TABLE prod; 〇
DELETE FROM prod WHERE prodid = 1;
DELETE FROM prod; 〇
DELETE prod; 〇

解説
表の全てのデータを削除するには、DELETE文を削除する行の条件を指定せずに実行するか、TRUNCATE文を実行します。

DELETE文のFROMキーワードは省略が可能です。

45.自動ロールバックされるイベントとして、正しいものはどれですか(該当するものを全て選択して下さい)。

システム障害時 〇
SAVEPOINT文実行時
EXIT文でSQL Plus終了時
SQL
Plusの異常終了時 〇
DDL文実行時

解説
Oracle Databaseでは次の場合に自動ロールバックされます。
・システム障害が発生した場合
・SQL *Plusを×ボタンで終了した時など異常終了した場合

46.次のSQL文の実行結果として、正しいものはどれですか。

 DELETE (SELECT department_id, employee_id FROM employees)
 WHERE salary > 400000;

表名の代わりに指定した副問合せのSELECT句に指定された列しかWHERE句に指定できないため、エラーとなる 〇
DELETE文では副問合せは使用できないため、エラーとなる
正常に実行されるが、行は削除されない
正常に実行され、行が削除される

47.排他ロックに関する説明として、正しいものはどれですか。

排他ロックでは表全体がロックされる
ロックがかかっている行に対して、DELETE文を実行すると待機せずに処理される
他のユーザーが更新中のデータを参照した場合、更新が完了するまで待機させられる
INSERT、UPDATE、DELETE文実行時、Oracleサーバーは排他ロックをかける 〇

解説
Oracle Databaseは複数のユーザーが同時に同じ行に対して変更処理(INSERT,UPDATE,DELETE)を行った場合に、データの矛盾が生じないよう、行毎に排他ロックをかけて変更処理を行います。
排他ロックがかかっている行に対して変更処理を行おうとすると、排他ロックが解除されるまで待機させられます。排他ロックはトランザクションの終了時に解除されます。

以上より、
・INSERT、UPDATE、DELETE文実行時、Oracleサーバーは排他ロックをかける
が正解となります。

その他の選択肢については次のとおりです。

・他のユーザーが更新中のデータを参照した場合、更新が完了するまで待機させられる
更新中のデータを他のユーザーが参照した場合、UNDOセグメントにコピーされた変更前のデータが返されます。

・排他ロックでは表全体がロックされる
行毎にロックされます

・ロックがかかっている行に対して、DELETE文を実行すると待機せずに処理される
ロックがかかっている行に対して変更処理(INSERT,UPDATE,DELETE)を行うとロックが解除されるまで待機させられます。

48.次のSQL文の説明として正しいものはどれですか(該当するものを全て選択して下さい)。

 TRUNCATE TABLE employees;

表が使用していた領域が解放される 〇
表のデータが全て削除される 〇
表に作成されている索引が削除される
ロールバック情報が生成される
削除トリガーが実行される

49.NUMBER型の説明として、正しいものはどれですか。

データ型がNUMBER(5)の列に123.45を入力すると、123.45が格納される 123
データ型がNUMBER(3,-1)の列に123.45を入力すると、120が格納される 〇
データ型がNUMBER(5,-2)の列に123.456を入力すると、123.46が格納される 100
データ型がNUMBERの列に12.345を入力すると、12.345が格納される 〇
データ型がNUMBER(3,1)の列に123.45を入力すると、123.5が格納される 格納することはできません

50.順序に関する説明として、正しいものはどれですか(該当するものを全て選択して下さい)。

欠番が発生する場合もある 〇
1つの順序を複数の表で使用できる 〇
ユーザー毎に一意な番号を生成する 〇
複数のユーザーで共有可能である
連番が保証されている

51.ビューを利用する目的は次の通りです。

・データへのアクセス制御
・複雑なSQL文の簡素化
・データの独立性を確保
・同じデータを異なる視点で表示

52.順序に関する説明として、正しいものはどれですか(該当するものを全て選択して下さい)。

順序は複数の表で共有できない
順序値の最大値は後から変更できない
セッション開始後、CURRVAL疑似列を参照する前にNEXTVAL疑似列を参照しなければならない 〇
順序を削除する場合は、DROP SEQUENCE文で削除する 〇
キャッシュにある未使用の順序値は、クラッシュして再起動した後も使用できる

53.シノニムに関する説明として、誤っているものはどれですか。

オブジェクトの別名である
パブリックシノニムと同名のプライベートシノニムを作成できる
パブリックシノニムとプライベートシノニムではパブリックシノニムが優先される 〇
セキュリティを高める

54.順序に関する説明として、正しいものはどれですか(該当するものを2つ選択して下さい)。

初期値のデフォルト値は1である 〇
増分値を指定することができる 〇
順序を参照するたびに順序値が生成される
順序の増分値に負の値を指定できない
順序の値が最大値に達した後は必ず順序値の生成を終了する

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%