SQL入門 模擬試験問題集 タイプ3

データベースとは

問題1
次の説明の中で誤っているものをすべて選びなさい。
  1. Oracleは、リレーショナルデータベース管理システムである。
  2. リレーショナルデータベースには、ただ1つだけ表を格納することができる。
  3. リレーショナルデータベースでは、情報を格納するために2次元の表を使用する。
  4. 外部キーとは、同一の表または別の表内の主キーへの物理アドレスである。
  5. リレーショナルデータベースの中で、SQL言語を使えるのはOracleだけである。
  6. PL/SQLはSQLを拡張し、プログラム言語の設計機能を含むOracle独自の言語である。
  7. リレーショナルデータベースは、階層型やネットワーク型のデータベースと同様に、データへのアクセスルートを指定する必要があるため、ユーザーは物理的なデータの配置を知る必要がある。
問題2
リレーショナルデータベースの用語として正しくないものを選びなさい。
  1. 列と行
  2. 主キー
  3. 外部キー
  4. 階層型
  5. SQL言語
問題3
リレーショナルデータベースの標準言語で、ANSIなどでも標準規格化されている言語を選びなさい。
  1. C言語
  2. SQL
  3. PL/SQL
  4. JAVA
  5. COBOL
問題4
次の中からDMLではないものを2つ選びなさい。
  1. DELETE
  2. INSERT
  3. DROP
  4. COMMIT
  5. UPDATE
問題5
次の説明の中で正しいものを選びなさい。
  1. SQL言語は用途により、データ検索、データ操作文(DML)、データ定義文(DDL)、データ制御文(DCL)といった分類がある。
  2. PL/SQLはSQL言語を拡張したものであり、ANSIやISOなどで標準規格化されている。
  3. データモデルには、「階層型」「ネットワーク型」「リレーショナル型」があり、Oracleは「階層型」のデータベースである。
  4. SQL言語は、データの物理的な位置やアクセスルートを指定することにより、データを検索する。
問題6
次のリレーショナルデータベースの説明の中で誤っているものを選びなさい。
  1. 表は行と列から構成される。
  2. 表と表は物理アドレスによって関連付けることができる。
  3. 列と行が交差する場所をフィールドと呼び、ここに値が入る。
  4. 1つのフィールドには複数の値が入ってもかまわない。
問題7
次の説明の中で正しいものを選びなさい。
  1. 主キーでは値の重複は許される。
  2. 1つの表に主キーを複数設定できる。
  3. 外部キーはデータ値に基づくものである。
  4. 外部キーでは値の重複は許されない。

データの検索

問題1
SELECT 列名1, 列名2 FROM 表名;を実行した際のSELECT文の機能を選びなさい。
  1. 選択
  2. 射影
  3. 結合
  4. 取り出し
問題2
SQL*PlusでSQL文を作成するときの規則の中で、誤っているものを選びなさい。
  1. SQL文では大文字小文字を区別する。
  2. 1行でも複数行でもかまわない。
  3. キーワードは短縮できない。
  4. 最後に;をつける。
問題3
部門表(dept)には、deptno、dname、locの3列があります。すべての列を選択する正しいSQL文を2つ選びなさい。
  1. select dname, loc, deptno from dept;
  2. select * from dept;
  3. desc dept
  4. select dept(*) from dept;
問題4
SQL*PlusでのSELECT文の列見出しのデフォルトはどれですか。誤っているものを選びなさい。
  1. 日付および文字の位置は左側。
  2. 数値の位置は右側。
  3. 表示のデフォルトは大文字。
  4. デフォルト設定はなく、個別にSQL*Plusコマンドで指定する必要がある。
問題5
SQL文の中で算術演算子を使用して計算することができます。使用できる句として誤っているものを選択しなさい。
  1. SELECT句
  2. FROM句
  3. WHERE句
  4. ORDER BY句
問題6
年間所得を、給与(sal)に100加えた合計を12倍したものとして計算するときの正しいSQL文を選びなさい。
  1. select ename, sal, 12 * sal + 100 from emp;
  2. select ename, sal, 12 * (sal + 100) from emp;
  3. select sal + 100 * 12 from emp;
  4. select (12 * sal) + 100 from emp;
問題7
NULLの扱いについて、正しいものを選びなさい。
  1. NULLは0や空白と同じものとして扱われる。
  2. 算術式の中にNULLがある場合は0として計算される。
  3. 数値をNULLで除算すると、0のときと同じエラーになる。
  4. NULL値を含む算術式はNULLになる。
問題8
NULL + 50の正しい結果を選びなさい。
  1. NULL
  2. 0
  3. エラー
  4. 50
問題9
次のSELECT文を実行したときの正しい列見出しを選びなさい。
select ename "Name", job, sal as salary, sal * 12 "Annual Salary" from emp;
  1. ename "Name", job, sal as salary, sal * 12 "Annual Salary"
  2. NAME JOB SAL sal * 12 Annual Salary
  3. ename job sal sal * 12
  4. Name JOB SALARY Annual Salary
問題10
次のSELECT文を実行したときの列見出しはいくつになりますか。正しいものを選びなさい。
select ename || ' : ' || job || ' and ' || sal as "Job And Sal", deptno from emp;
  1. 4つ
  2. 3つ
  3. 2つ
  4. 1つ
問題11
従業員表(emp)から重複なく職種(job)を検索する正しい文を選びなさい。
  1. select only job from emp;
  2. select kind(job) from emp;
  3. select job from emp where job != job;
  4. select distinct job from emp;

データの制限およびソート

問題1
職種(job)がSALESMANのデータが入力された従業員表(emp)で次のSQL文を実行したところ、データが1件も検索されませんでした。考えられる原因を選びなさい。
select ename,job,deptno from emp where job = 'salesman';
  1. 実行したSQL文が間違っている。
  2. 'が入っているため。
  3. 文字列では大文字小文字の区別があるため。
  4. 条件を設定するのはSQL*Plusコマンドで行う。
問題2
WHERE句を使用する目的として正しいものを2つ選びなさい。
  1. 使用する表を指定する。
  2. 対象となる行データを絞り込むため。
  3. 2つ以上の表を結合するための条件を指定する。
  4. グループに制限を付ける。
  5. 重複データの排除。
問題3
給与(sal)が1000以上1500以下の従業員の名前(ename)と給与(sal)を検索する正しいSELECT文を2つ選びなさい。
  1. select ename, sal from emp where sal between 1500 and 1000;
  2. select ename, sal from emp where sal >= 1500 or sal <= 1000;
  3. select ename, sal from emp where sal >= 1000 and sal <= 1500;
  4. select ename, sal from emp where sal between 1000 and 1500;
問題4
comm列にはNULLデータが何件か入っています。次のSQL文を実行したときにはレコードは1件も検索されませんでした。原因として正しいものを選びなさい。
select ename, sal, comm. from emp where comm = null;
  1. NULLを検索する演算子はIS NULLを使用する必要がある。
  2. 'NULL'と指定していないため。
  3. NULLは"で囲む必要があるため。
  4. NULL値を検索することはできない。
問題5
次のSQL文を実行した場合の検索結果はどうなりますか。正しいものを選びなさい。
select name, title, sal from employee
where title = 'MANAGER' or title = 'PRESIDENT' and sal >= 10000;
  1. titleがMANAGERまたはPRESIDENTのいずれかで、かつsalが10000以上の従業員。
  2. titleがMANAGERでかつsalが10000以上か、titleがPRESIDENTでsalが10000以上の従業員。
  3. titleがMANAGERであるか、titleがPRESIDENTでsalが10000以上の従業員。
  4. titleがMANAGERまたはPRESIDENTのいずれか、もしくはsalが10000以上の従業員。
問題6
ORDER BY句の説明として正しいものを選びなさい。
  1. 数値データは小さい順だが、NULLがある場合はNULLが最初に表示される。
  2. 日付データは、DESCキーワードを使用したときは最新日付から表示される。
  3. 文字データの場合は英字順だが、大文字小文字の時は小文字から表示される。
  4. 並べ替えの基準列を複数指定した場合、個別に昇順が降順の指定はできない。
問題7
次のSELECT文を実行したときの出力結果を選びなさい。
select ename, job, sal from emp order by 3 desc;
  1. salの降順で表示される。
  2. SELECTの列リストとORDER BY句が同じではないのでエラーになる。
  3. 3という列はないのでエラーになる。
  4. name, job, salの3列をセットにして降順で表示される。
問題8
従業員表(emp)を部門番号(deptno)で並べ替え、同じ部門内は職種(job)で、さらに同じ場合は給与(sal)の降順で並べ替えを行うSQL文を選びなさい。
  1. select ename,job,sal,deptno from emp order by sal,job,deptno desc;
  2. select ename,job,sal,deptno from emp order by 4,2,3 desc;
  3. select ename,job,sal,deptno from emp order by deptno,order by job,order by sal desc;
  4. select ename,job,sal,deptno from emp order by ename,job,sal desc,deptno;
問題9
従業員表(emp)から職種(job)がPRESIDENT以外で、かつ給与(sal)が10000以上の従業員を部門番号(deptno)の昇順、職種(job)の昇順、給与(sal)の降順で表示する正しいSQL文を選びなさい。
  1. select ename, job, sal salary, deptno from emp
    where job != 'PRESIDENT' and sal >= 10000
    order by deptno, job, salary desc;
  2. select ename, job, sal, deptno from emp
    order by deptno, job, sal desc
    where job != 'PRESIDENT' and sal >= 10000;
  3. select ename, job, sal, deptno from emp
    where job != 'PRESIDENT', where sal >= 10000
    order by deptno, order by job, order by sal desc;
  4. select ename, job, sal, deptno
    where job != 'PRESIDENT' and sal >= 10000 from emp
    order by ename, job, sal desc, deptno;
問題10
emp表のename列のデータは日本語です。この列から2文字のデータ(例:佐藤)を検索したい場合、どのような条件になりますか。正しいものを選びなさい。
  1. select empno, ename from emp where ename like '__';
  2. select empno, ename from emp where ename like '____';
  3. select empno, ename from emp where ename = '__';
  4. select empno, ename from emp where ename = '____';
  5. select empno, ename from emp where ename = '%%';
  6. select empno, ename from emp where ename like '%%';

単一行関数

問題1
「わたしはオラクルマスターです」という文字列を検索するとき、以下のように表示される条件は何ですか。正しいものを選びなさい。
文字列
----------------
クルマスターです
  1. select substr('わたしはオラクルマスターです',7,8) from dual;
  2. select substr('わたしはオラクルマスターです',1,7) from dual;
  3. select substr('わたしはオラクルマスターです',13,16) from dual;
  4. select substr('わたしはオラクルマスターです',7,0) from dual;
問題2
次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select instr('あいうえお','う') from dual;
問題3
次の結果はどうなりますか。正しいものを選びなさい。
select instr('oracleマスター','ス') from dual;
  1. 10
問題4
大文字小文字の区別なしにename列の条件を入力し、「SMITH」というつづりの人のデータをすべて出力したい。適切なSQL文を選びなさい。
  1. select * from emp where ename = upper(&ename);
  2. select * from emp where ename = &ename;
  3. select * from emp where upper(ename) = '&ename';
  4. select * from emp where upper(ename) = upper('&ename');
問題5
現在、2000年5月26日PM3:00です。次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select round(sysdate) from dual;
  1. 2000-05-26
  2. 2000-05-25
  3. 2000-05-27
  4. 2000-05-28
問題6
次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select round(123.923,-1) from dual;
  1. 100
  2. 120
  3. 124
  4. 123.9
問題7
西暦2000年は閏年です。次のSQL文の結果はどうなりますか。正しい組み合わせを選びなさい。
select add_months('2000-02-28',5), add_months('2000-02-29',5) from dual;
  1. 2000-07-28, 2000-07-29
  2. 2000-07-30, 2000-07-31
  3. 2000-07-28, 2000-07-31
  4. 表示されない。
問題8
今日は2000年5月26日金曜日です。次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select next_day(sysdate, '金曜日') from dual;
  1. 2000-05-26
  2. 2000-05-26(金曜日)
  3. 2000-06-02
  4. 2000-06-02(金曜日)
問題9
現在、2000年5月26日午後4時30分です。次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select to_char(last_day(sysdate), 'YYYY-MM-DD HH:MI:SS') from dual;
  1. 2000-05-31 12:00:00
  2. 2000-05-31 00:00:00
  3. 2000-05-31 04:30:00
  4. 2000-05-31 16:30:00
問題10
現在の日時は、2000年5月26日です。次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select round(sysdate, 'MM') from dual;
  1. 2000-05-01
  2. 2000-06-01
  3. 2000-05-26
  4. 2000-05-27
問題11
現在の日時は、2000年5月26日です。次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select round(sysdate, 'YYYY') from dual;
  1. 2000-01-01
  2. 2001-01-01
  3. 2000-05-01
  4. 2000-05-26
問題12
現在の日時は、2000年5月26日です。次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select to_char(to_date('19302000', 'HH24MIYYYY'),'YYYY-MM-DD HH24:MI:SS') from dual;
  1. 2000-05-26 00:00:00
  2. 2000-05-26 12:00:00
  3. 2000-05-26 19:30:00
  4. 2000-05-01 19:30:00
問題13
次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select to_char(0.035, '0.0000') from dual;
  1. .035
  2. 0.035
  3. 0.0350
  4. .0350
問題14
次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select to_char(1234, '099999') from dual;
  1. 001234
  2. 1234
  3. 01234
  4. #####
問題15
次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select to_char(1234567, '9,999') from dual;
  1. 1234567
  2. 1,234,567
  3. 1234,567
  4. ######

グループ関数

問題1
emp表から重複なしで、jobの種類を出力したい。正しいものを選びなさい。
  1. select job from emp group by job;
  2. select distinct(job) from emp;
  3. select job from emp;
  4. select job from emp where job is not null;
問題2
emp表からjobのデータが何種類あるか出力したい。正しいものを選びなさい。
  1. select count(job) from emp group by job;
  2. select count(job) from emp;
  3. select count(distinct job) from emp;
  4. select distinct count(job) from emp;
問題3
emp表から、部門番号(deptno)と、部門ごとの給与(sal)の平均を、給与の平均値が大きい順に表示したい。正しいSQL文を選びなさい。
  1. select deptno, avg(sal) from emp group by job;
  2. select deptno, avg(sal) from emp order by avg(sal) desc;
  3. select deptno, avg(sal) from emp group by deptno order by avg(sal) desc;
  4. select deptno, avg(sal) salavg from emp group by salavg;
問題4
次のSQL文の結果は何を表していますか。誤っているものを選びなさい。
select count(*), count(comm) from emp;
COUNT(*)     COUNT(COMM)
------------------------
     14               3
  1. emp表の中で、歩合給(comm)をもらっている人は3名である。
  2. emp表の行数は14行である。
  3. emp表の中で、歩合給(comm)のデータがある人は3名で、あとは全部0である。
  4. emp表の中で、歩合給(comm)のデータがある人は3名で、あとは全部NULL値である。
問題5
emp表の歩合給(comm)の平均値を出したい。社員の中には、comm列にNULL値が入っている人もいるが、表内のすべての行を使用して平均値を出したい。正しいSQL文を選びなさい。
  1. select avg(nvl(comm,0)) from emp;
  2. select nvl(avg(comm),0) from emp;
  3. select avg(comm) from emp;
  4. 不可能
問題6
表の中の行をグループに分割するSELECT文のキーワードは何ですか。正しいものを選びなさい。
  1. DISTINCT
  2. ORDER BY
  3. WHERE
  4. GROUP BY
問題7
emp表内の部門別にグループ化した各職種の合計給与を出したい。正しいSQL文を選びなさい。
  1. select deptno, job, sum(sal) from emp group by deptno, job;
  2. select deptno, job, sum(sal) from emp group by deptno, group by job;
  3. select detpno, job, sum(sal) from emp group by deptno order by job;
  4. select deptno, job, sum(sal) from emp group by job, deptno;
問題8
グループ関数が記述できる場所はどこですか。正しいものを3つ選びなさい。
  1. SELECT句以降の列選択リスト
  2. FROM句
  3. WHERE句
  4. GROUP BY句
  5. HAVING句
  6. ORDER BY句
問題9
次はemp表のcomm列のデータです。
     COMM
---------
        1
        1
        1
        3

このデータで、次のSQL文の結果はどうなりますか。正しいものを選びなさい。
select avg(comm), avg(distinct comm) from emp;
  1. 1.5, 1.5
  2. 1.5, 2
  3. 1.5, 1
  4. 2, 2
問題10
次のSQL文の中で誤っているものを2つ選びなさい。
  1. select deptno, avg(sal) from emp where avg(sal) > 1500 group by deptno;
  2. select deptno, avg(sal) from emp;
  3. select deptno, avg(sal) from emp group by deptno having deptno = 20;
  4. select deptno, avg(sal) from emp group by deptno order by avg(sal) desc;
問題11
SELECT文の構成として誤っているものを全て選びなさい。
  1. select ・・・ from ・・・ where ・・・ having ・・・ group by ・・・ order by ・・・
  2. select ・・・ from ・・・ having ・・・ group by ・・・ where ・・・
  3. select ・・・ from ・・・ group by ・・・ having ・・・ where ・・・ order by ・・・
  4. select ・・・ from ・・・ order by ・・・ where ・・・ group by ・・・ having ・・・
問題12
グループ関数は何レベルまでネストできますか。正しいものを選びなさい。
  1. 制限なし
  2. 1レベル
  3. 2レベル
  4. 3レベル

複数の表からのデータの表示

問題1
次のSQL文を実行したときに結果はどうなりますか。正しいものを選びなさい。
select empno, ename, deptno, dname from emp, dept
where deptno = deptno;
  1. 問題なく実行される。
  2. 複数の表で同じ列名が使用されているのに、そのまま列名だけで使用しているのでエラーになる。
  3. 列名を解析するのに非常に時間がかかるが、両方の列データが表示されてくる。
  4. 結合列の指定が無視されて直積演算で表示される。
問題2
次のSQL文を実行したときに結果はどうなりますか。正しいものを選びなさい。
select empno, dname from emp, dept;
  1. 両方にあるデータが自動的に結合されて表示される。
  2. 結合列の指定がないのでエラーになる。
  3. 直積演算が発生して、すべての組み合わせが表示される。
  4. SELECT句に結合列のdeptnoがないためエラーになる。
問題3
結合の種類にはどのようなものがありますか。誤っているものを選びなさい。
  1. 等価結合
  2. 非等価結合
  3. 外部結合
  4. 内部結合
  5. 全部間違っている
問題4
結合の説明の中で正しいものを選びなさい。
  1. 結合する条件は=以外にも、BETWEEN演算子を使用して指定することができる。
  2. WHERE句が必須。
  3. 3表以上は結合できない。
  4. 別々の表でないと結合できない。
問題5
次のSQL文を実行したらエラーになりました。誤っている部分を選びなさい。
select e.empno, e.ename, e.job, d.dname from emp e, dept d
where emp.deptno = dept.deptno order by e.ename;
  1. select e.empno, e.ename, e.job, d.dname
  2. from emp e, dept d
  3. where emp.deptno = dept.deptno
  4. order by e.ename
問題6
5つ以上の表を結合するのに必要な結合条件は最低いくつですか。正しいものを選びなさい。
  1. 5つ
  2. 4つ
  3. 3つ
  4. 2つ
  5. 1つだけでよい
問題7
顧客表(customer)、注文表(ord)、注文明細表(item)の3つの表を結合する正しいSQL文を選びなさい。
  1. select c.name, o.ordid, i.itemid from customer c, ord o, item i
    where c.custid = o.custid = i.ordid;
  2. select c.name, o.ordid, i.itemid from customer c, ord o, item i
    where c.custid = o.custid and o.itemid = i.ordid;
  3. select c.name, o.ordid, i.itemid from customer c, ord o, item i
    where c.custid = o.custid or o.itemid = i.ordid;
  4. 2つの表しか結合できない。
問題8
次のSQL文を実行したときの正しい結果を選びなさい。従業員(emp)と給与のランク表(salaryrank)に明示的な結合列はありません。
select e.name, e.salary, s.rank from emp e, salaryrank s
where e.salary between s.minsal and a.maxsal;
  1. 結合条件の記述がないのでエラーになる。
  2. 結合条件の記述がないので直積され、すべての組み合わせのデータが表示される。
  3. WHEREで記述された条件に従って非等価結合が行われ、salaryの額でrankが表示される。
  4. WHEREで記述された条件に従って、salaryの最小最大額が表示される。
問題9
外部結合を指定する記号を選びなさい。
  1. OUTER JOIN
  2. +
  3. *
  4. (+)
  5. &
問題10
従業員表(emp)と部門表(dept)を結合します。ただし、従業員のまだいない新設部門の情報も一緒に出力するようにします。正しいSQL文を選びなさい。
  1. select ename, sal, job, dname from emp, dept
    where emp.deptno = dept.deptno;
  2. select ename, sal, job, dname from emp, dept
    where emp.deptno(+) = dept.deptno;
  3. select ename, sal, job, dname from emp, dept
    where emp.deptno = dept.deptno(+);
  4. select ename, sal, job, dname from emp, dept
    where emp.deptno(+) = dept.deptno(+);
問題11
次のSQL文を実行したときに実際に検索される表はいくつですか。正しいものを選びなさい。
select worker.ename, worker.job, worker.sal, manager.ename
from emp worker, emp manager
where worker.mgrno = manager.empno;
  1. 1つ
  2. 2つ
  3. 3つ
  4. 4つ
  5. 不明
問題12
従業員と上司の名前を一緒に表示するSQL文を作成します。ただし、上司のいない社長の情報も一緒に出力されるようにします。正しいSQL文を選びなさい。
  1. select worker.ename, worker.job, worker.sal, manager.ename
    from emp worker, emp manager
    where worker.mgrno(+) = manager.empno;
  2. select worker.ename, worker.job, worker.sal, manager.ename
    from emp worker, emp manager
    where worker.mgrno = manager.empno(+);
  3. select worker.ename, worker.job, worker.sal, manager.ename
    from emp worker, emp manager
    where worker.mgrno(+) = manager.empno(+);
  4. select worker.ename, worker.job, worker.sal, manager.ename
    from emp worker, emp manager
    where worker.mgrno = manager.empno;

副問い合わせ

問題1
SALLYよりも高い給与をもらっている人を示すためのSQL文を選びなさい。
  1. select ename, sal from emp > select ename, sal from emp where ename = 'SALLY';
  2. select ename, sal from emp where sal > (select sal from emp where ename = 'SALLY');
  3. 1つのSQL文では実行できない。
  4. select ename, sal from emp where sal > ename = 'SALLY';
問題2
副問い合わせが記述できる場所を選びなさい。
  1. SELECT句
  2. HAVING句
  3. FROM句
  4. ORDER BY句
問題3
次のSQL文を実行したときの正しい結果を選びなさい。
select ename, job, deptno from emp
where deptno = (select deptno from dept where dname = 'TOKYO')
and sal > (select sal from emp where job = 'SALESMAN');
  1. WHERE句には1つしか副問い合わせは書けないのでエラーになる。
  2. 副問い合わせは同一表に対してのみ検索できるので、エラーになる。
  3. 副問い合わせで単一行が戻ってきた場合のみ、条件に合致するデータが表示される。
  4. 問題なく実行される。
問題4
従業員表(emp)から給与(sal)の平均が最も高い職種(job)を求めるSQL文を選びなさい。
  1. select job, max(avg(sal)) from emp group by job;
  2. select job, sal from emp where sal > max(avg(sal)) group by job;
  3. select job, avg(sal) from emp group by job having avg(sal) = (select max(avg(sal)) from emp group by job);
  4. select job,avg(sal) from emp where avg(sal) = (select max(avg(sal)) from emp group by job);
問題5
複数行副問い合わせで使用する比較演算子を選びなさい。
  1. IN
  2. <
  3. ALL <
  4. <>
  5. != ANY
問題6
副問い合わせが何件戻すかわからない場合、どの比較演算子を使用すればよいか選びなさい。
  1. IN
  2. <
  3. <=
  4. <>
  5. !=
問題7
INと同じ意味になるものを選びなさい。
  1. =ANY
  2. <>
  3. *
  4. ALL<>
  5. !=ALL
問題8
職種が(job)がSALESMANのどの人よりも高い給与をもらっている人を求めるSQL文を選びなさい。
  1. select ename, job from emp
    where sal > any (select sal from emp where job = 'SALESMAN');
  2. select ename, job from emp
    where sal > all (select sal from emp where job = 'SALESMAN');
  3. select ename, job from emp
    where sal > (select sal from emp where job = 'SALESMAN');
  4. select ename, job from emp
    where sal > in (select sal from emp where job = 'SALESMAN');
問題9
次のSQL文を実行したときに条件に該当するレコードがありませんでした。emp表を確認すると該当データはあります。原因として考えられるものを選びなさい。
select e.ename from emp e
where e.empno not in (select m.mgr from emp m);
  1. SQLの文法が間違っている。
  2. NOT INだと、1つでもNULL値が戻ってくると問い合わせ全体で行が戻されないため。
  3. 表別名ではなく、そのまま表名を記述しないとNULLが戻される。
  4. 複数行副問い合わせではNOTは使用できない。
問題10
上司別にグループを作り、その中で平均給与以上の給与を得ている人の名前(ename)、給与(sal)、上司(mgr)を求めるSQL文を選びなさい。
  1. select ename, sal, mgr from emp where sal >= avg(sal) group by mgr;
  2. select ename, sal, emp.mgr
    from emp, (select avg(sal) avgsal from emp group by mgr) b
    where sal >= b.avgsal;
  3. select ename, sal, ename.mgr
    from emp, (select mgr,avg(sal) avgsal from emp group by mgr) b
    where emp.mgr = b.mgr and sal >= b.avgsal;
  4. select ename, sal, emp.mgr from emp
    where sal >= (select avg(sal) from emp group by mgr);

データの操作

問題1
deptno, dname, locの3列から構成されるdept表に、新しいデータを追加します。そのとき、loc列のデータは省略しようと思います。正しいものを選びなさい。
  1. insert into dept(deptno, dname) values(60, 'EDUCATION');
  2. insert into dept values(60, 'EDUCATION', '');
  3. insert into dept values(60, 'EDUCATION', 'NULL');
  4. insert into dept(deptno, dname, loc) values(60, 'EDUCATION', 0);
問題2
現在の日時が2000年6月1日である場合、次のINSERT文でtest列(DATE型)に挿入される日付データは何ですか。正しいものを選びなさい。
insert into test values('01-01-01');
  1. 2001年1月1日 00:00:00
  2. 1901年1月1日 12:00:00
  3. 0001年1月1日 00:00:00
  4. 1901年1月1日 00:00:00
問題3
UPDATE文に関して、正しい記述を選びなさい。
  1. UPDATE文でWHERE句を省略すると、1件も更新されない。
  2. 1つのUPDATE文で、必ず1行が更新される。
  3. UPDATE文のSET句では、副問い合わせが使用できる。
  4. UPDATE文のSET句では、AND演算子を使うことで同時に複数列の更新ができる。
問題4
以下のSQLを実行した場合の説明で正しい記述を選びなさい。
insert into dept(deptno, dname, loc) values(50, 'EDUCATION');
  1. LOC列はゼロになる。
  2. LOC列はNULL値になる。
  3. エラーになる。
  4. LOC列に値を代入するためのプロンプトが表示される。
問題5
MARTINの給与(sal)を1300に、歩合給(comm)を1400に変更します。正しいSQL文を選びなさい。
  1. update emp set sal = 1300, set comm = 1400 where ename = 'MARTIN';
  2. update emp set sal = 1300, comm = 1400 where ename = 'MARTIN';
  3. update emp set sal = 1300 and comm = 1400 where ename = 'MARTIN';
  4. update emp set (sal = 1300 , comm = 1400) where ename = 'MARTIN';
問題6
歩合給がNULLまたは0の人を削除します。正しいSQL文を選びなさい。
  1. delete from emp where comm is null or 0;
  2. delete from emp where comm = null or comm = 0;
  3. delete * from emp where comm = null or comm = 0;
  4. delete * from emp where comm is null or comm = 0;
  5. delete from emp where comm is null or comm = 0;
問題7
deptno、dname、locの3列から構成されるdept表にデータを挿入します。正しいSQL文を選びなさい。
  1. insert into dept(*) values(50, 'EDUCATION', 'JAPAN');
  2. insert into dept values(50, &'EDUCATION', &'JAPAN');
  3. insert into dept(50, '&EDUCATION', '&JAPAN');
  4. insert into dept values(50, 'EDUCATION', 'JAPAN');
  5. insert into dept(deptno, dname) values(50, 'EDUCATION', 'JAPAN');
問題8
次のSQL文の説明の中で正しいものを選びなさい。
update emp set comm = null;
  1. commに値がある行のみ、commがNULLになる。
  2. すべての行のcommがNULLになる。
  3. すべての行のcommが0になる。
  4. UPDATE文でNULLは使用できない。
問題9
次の順序で実行したあとの状態について、正しいものを選びなさい。
insert ・・・
savepoint a;
delete ・・・
savepoint b;
update ・・・
rollback;
  1. INSERTは残るが、DELETE、UPDATEはロールバックされる。
  2. INSERT、DELETE、UPDATEはすべてコミットされる。
  3. INSERT、DELETEは残るが、UPDATEはロールバックされる。
  4. INSERT、DELETE、UPDATEすべてロールバックされる。
問題10
トランザクションの説明の中で正しいものを選びなさい。
  1. データベース管理者がOracleを起動してから、停止するまでの一連の処理のこと。
  2. 1つのSQLに対し、Oracleが内部的に行う一連の処理のこと。
  3. Oracleに接続、あるいは前回のコミットまたはロールバックをしてから、次にコミットまたはロールアウトするまでの一連の処理のこと。
  4. 前回コミットしてから、次にコミットするまでの一連の処理のこと。
  5. Oracleに接続してから、Oracleとの接続を切断するまでの一覧の処理のこと。
問題11
トランザクションを取り消すコマンドを選びなさい。
  1. ROLLBACK
  2. CANCEL
  3. STOP
  4. REVOKE
問題12
orddate列(DATE型)に、2000-06-01を挿入します。正しいSQL文を選びなさい。
  1. insert into order(ordid, orddate)
    values(101, to_date('JUN 1,00', 'MON DD,YYYY'));
  2. insert into order(ordid, orddate)
    values(101, to_char('JUN 1,00', 'MON DD,YYYY'));
  3. insert into order(ordid, orddate)
    values(101, to_date('JUN 1,2000', 'MON DD,YYYY));
  4. insert into order(ordid, orddate)
    values(101, to_char('JUN 1,2000', 'MON DD,YYYY));
問題13
次のSQL文の説明の中で正しいものを選びなさい。
update emp set sal = sal * 1.05 where job not in('PRESIDENT', 'ANALYST');
  1. 職種がPRESIDENTまたはANALYSTの従業員の給与が増加する。
  2. 職種がPRESIDENTまたはANALYST以外の従業員の給与が増加する。
  3. 職種に関係なく、すべての従業員の給与が増加する。
  4. 職種がPRESIDENTまたはANALYSTの従業員がいないとき、すべての従業員の給与が増加する。

読みやすい出力の作成

問題1
SET PAUSE ONの説明で正しいものを選びなさい。
  1. 列見出しを表示する。
  2. 画面をスクロールさせる際に、各ページの冒頭で一時停止する。
  3. 問い合わせ結果を表示する。
  4. 各ページにヘッダーを表示する。
問題2
SQL*Plusの書式を設定するコマンドを選びなさい。
  1. COL
  2. COLUMNS
  3. PRINT
  4. FORMAT
問題3
SQL*Plusの起動時に実行されるファイルを選びなさい。
  1. LOGIN
  2. INIT.ORA
  3. LOGIN.ORA
  4. LOGIN.SQL
問題4
SQL*Plusにおいて、3件以下のレコードしか検索されなかった場合は、メッセージを非表示にしたい。正しい設定を選びなさい。
  1. SET TERMOUT OFF
  2. SET FEEDBACK OFF
  3. SET FEEDBACK 3
  4. SET FEEDBACK 4
  5. SET ECHO OFF
問題5
置換変数の使い方で、正しいものを選びなさい。
  1. select * from emp where ename = &'NAME';
  2. select * from emp where ename = "&NAME";
  3. select * from emp where ename = '&NAME';
  4. select * from emp where ename = '&'NAME;
問題6
置換変数を値に置き換えるときに、新旧のデータを非表示にするコマンドを選びなさい。
  1. SET VERIFT OFF
  2. SET NO VERIFY
  3. SET PRINT ON
  4. SET HIDE
問題7
次のコマンド実行後、入力されたデータを確認する方法を選びなさい。
accept data
prompt 'データを入力してください:'
  1. DEFINE COLUMNS DATA
  2. DEFINE DATA
  3. SHOW DATA
  4. SET SHOW DATA
問題8
emp表のsal列を問い合わせたら、####が表示されました。原因を選びなさい。
  1. データが壊れている。
  2. sal列が削除された。
  3. column sal format ####が設定されている。
  4. データの桁数が表示桁数を超えている。
問題9
emp表のjob列から重複値を取り除いて表示します。正しいコマンドを選びなさい。
  1. SET BREAK ON JOB IN EMP
  2. BREAK ON JOB IN EMP
  3. BREAK ON JOB
  4. SET BREAK ON JOB
問題10
sal列の値に千単位でカンマをつけ、\も表示します。正しいコマンドを選びなさい。
  1. FORMAT SAL \99,999
  2. COLUMN SAL FORMAT \99,999
  3. FORMAT SAL L99,999
  4. COLUMN SAL FORMAT L99,999
問題11
次の順序で実行した後の状態について、正しいものを選びなさい。
spool report
select * from emp;
select * from dept;
spool off
  1. dept表の問い合わせ結果のみファイルに出力される。
  2. emp表とdept表の問い合わせ結果がファイルに出力される。
  3. エラーになる。
  4. dept表の問い合わせ結果のみプリンタに出力される。
  5. emp表とdept表の問い合わせ結果がプリントに出力される。
問題12
次のSQL文を修正してdept表を問い合わせます。正しいコマンドを選びなさい。
select * from emp;
  1. CHANGE(EMP,DEPT)
  2. CHANGE EMP TO DEPT
  3. CHANGE /DEPT/EMP
  4. CHANGE /EMP/DEPT

[ TOP ]