株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

ORACLE MASTER Silver DBA/SQL黒本SQL一式

目次

Oracle ACEの渡部です。 私が執筆したORACLE MASTER Silver DBA、Silver SQLに記載したサンプルデータを用意するためのSQL一式を掲載します。 手元のOracleデータベースまたはOracle Live SQLで、これらのSQL一式を実行すると、サンプルデータを簡単に用意できます。

サンプルデータが準備出来たら、黒本に掲載されているSQL文(SELECT文など)が実行できるようになります。

  • 黒本には、これらのサンプルデータにアクセスするSQL文(SELECT文など)が記載されています。サンプルデータにアクセスするSQL文「そのもの」は本記事には記載していません(黒本を見て!)
  • 一部の表で、名前が重複している点に注意してください。
  • Oracle Live SQLの概要および試験学習に使う場合の注意点については 以下の記事を参考にしてください。
    環境構築が不要なORACLE MASTERのSQL学習方法(Oracle Live SQL)

ORACLE MASTER Silver DBA/SQL黒本SQL一式

emp,dept - Silver DBA 10-1、Silver SQL 2-1

  • empno: 社員番号
  • ename: 社員名
  • job: 職種
  • sal: 給与(月額固定給与)
  • comm_pct: コミッション%(固定給与に対する歩合の率)
  • bonus: 賞与(ボーナス)
  • deptno: 部署番号

  • deptno: 部署番号
  • dname: 部署名
  • loc: 場所
DROP TABLE dept;
CREATE TABLE dept(
  deptno   NUMBER PRIMARY KEY,
  dname    VARCHAR(10),
  loc      VARCHAR(12));

TRUNCATE TABLE dept;
INSERT INTO dept VALUES(20, 'SALES1', 'NEW YORK');
INSERT INTO dept VALUES(30, 'SALES2', 'TRONT');
INSERT INTO dept VALUES(10, 'OPERATIONS', 'NEW YORK');
INSERT INTO dept VALUES(90, 'SPECIAL', 'HAWAII');

DROP TABLE emp;

CREATE TABLE emp(
  empno    NUMBER PRIMARY KEY,
  ename    VARCHAR(8),
  job      VARCHAR(10),
  sal      NUMBER,
  comm_pct NUMBER(2,2),
  bonus    NUMBER,
  deptno    NUMBER);

INSERT INTO emp VALUES(1001, 'Tom'   , 'SALESMAN' , 720,  0.50, NULL, 20);
INSERT INTO emp VALUES(1002, 'Abe'   , 'ASSISTANT', 600,  NULL, 1000, 20);
INSERT INTO emp VALUES(1003, 'Clark' , 'SALESMAN' , 720,  NULL, 500,  20);
INSERT INTO emp VALUES(1004, 'Blake' , 'ASSISTANT', 720,  NULL, 720,  10);
INSERT INTO emp VALUES(1005, 'Zakk'  , 'MANAGER'  , 900,  NULL, 2000, 20);
INSERT INTO emp VALUES(1006, 'Bob'   , 'SALESMAN' , 510,  0.25, NULL, 30);
COMMIT;

文字リテラルに一重引用符を含める - Silver DBA 10-4-3、Silver SQL 2-4-3

CREATE TABLE t1(ID number, name varchar2(12));
INSERT INTO t1 VALUES(1, 'Tom');
INSERT INTO t1 VALUES(2, 'O''neal');
INSERT INTO t1 VALUES(3, 'John');
COMMIT;

日付リテラルから得た日時データをINSERTする - Silver DBA 10-5-1、Silver SQL 2-5-1

CREATE TABLE t_date1 ( dt date);
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS';

TO_DATEファンクションを用いた日時データへの変換(日時書式モデル指定あり) - Silver DBA 10-5-3、Silver SQL 2-5-3

CREATE TABLE t_date2 (dt date);
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
INSERT INTO t_date2 
  VALUES(TO_DATE('2021/01/02 10:11:12','YYYY/MM/DD HH24:MI:SS'));
COMMIT;

TO_DATEファンクションを用いた日時データへの変換(日時書式モデル指定なし)- Silver DBA 10-5-3、Silver SQl 2-5-3

CREATE TABLE t_date3 (dt date);
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
show parameter NLS_DATE_FORMAT
INSERT INTO t_date3 VALUES(TO_DATE('2021/01/02 10:11:12'));
COMMIT;

TO_DATEファンクションを用いた日時データへの変換(日時書式モデル指定あり) - Silver DBA 10-5-3、Silver SQl 2-5-3

CREATE TABLE t_date4 (dt date);

IS NOT NULL条件による列値がNULLでない行の検索 - Silver DBA 10-6-5、Silver SQL 2-6-5

CREATE TABLE t_null2 (j NUMBER, s VARCHAR2(16));
INSERT INTO  t_null2 (j, s) VALUES (1, NULL);
INSERT INTO  t_null2 (j, s) VALUES (2, 'XXX');
COMMIT;

日時データの検索で、TO_DATEファンクションを使用して日時データを得る - Silver DBA 11-1-3、Silver SQL 3-1-3

CREATE TABLE orders (
  order_id   NUMBER,
  order_date DATE,
  total      NUMBER);

INSERT INTO orders VALUES(5632, TO_DATE('2021/01/05 10:11:12', 'YYYY/MM/DD HH24:MI:SS'), 1000);
INSERT INTO orders VALUES(7634, TO_DATE('2021/01/04 05:06:07', 'YYYY/MM/DD HH24:MI:SS'), 100);
INSERT INTO orders VALUES(3367, TO_DATE('2021/01/06 02:03:04', 'YYYY/MM/DD HH24:MI:SS'), 300);
COMMIT;

文字リテラル'990'を数値型の列(SAL列)へ暗黙的に変換 - Silver DBA 13-2-6、Silver SQL 5-2-6

CREATE TABLE emp3 (empno NUMBER, ename VARCHAR2(16), sal NUMBER);
INSERT INTO emp3 VALUES(1001, 'Tom'   , 720);
INSERT INTO emp3 VALUES(1002, 'Abe'   , 600);
INSERT INTO emp3 VALUES(1003, 'Clark' , 720);
INSERT INTO emp3 VALUES(1004, 'Blake' , 720);
INSERT INTO emp3 VALUES(1005, 'Zakk'  , 900);
INSERT INTO emp3 VALUES(1006, 'Bob'   , 510);
COMMIT;

文字リテラル'2021/01/10 01:02:03'を日時型の列(ORDER_DATE列)へ暗黙的に変換 - Silver DBA 13-2-6、Silver SQL 5-2-6

CREATE TABLE t_date(
  id number,
  dt DATE);

INSERT INTO t_date VALUES(1, TO_DATE('2021/01/05 10:11:12', 'YYYY/MM/DD HH24:MI:SS'));
INSERT INTO t_date VALUES(2, TO_DATE('2021/01/04 05:06:07', 'YYYY/MM/DD HH24:MI:SS'));
INSERT INTO t_date VALUES(3, TO_DATE('2021/01/06 02:03:04', 'YYYY/MM/DD HH24:MI:SS'));
COMMIT;

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS';

COALESCEファンクションでセール特別価格を算出 - Silver DBA 13-3-4、Silver SQL 5-3-4

CREATE TABLE products (
  productsid NUMBER,
  pname  VARCHAR2(8),
  list_price NUMBER,
  min_price  NUMBER);
INSERT INTO products VALUES(1001, 'ONIGIRI', 10, NULL);
INSERT INTO products VALUES(1001, 'TOFU', NULL, 10);
INSERT INTO products VALUES(1001, 'MILK', 100, 80);
INSERT INTO products VALUES(1001, 'OKARA', NULL, NULL);
COMMIT;

日時データ型と文字データ型へのMAX、MIN の使用 - Silver DBA 14-1-2、Silver SQL 6-1-2

CREATE TABLE t_date (id NUMBER, dt DATE);
INSERT INTO t_date VALUES(1, '2021/01/02 10:11:12');
INSERT INTO t_date VALUES(2, '2021/01/01 08:09:10');
INSERT INTO t_date VALUES(3, '2021/01/03 15:16:17');
COMMIT;

ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';

集計ファンクションと単一行ファンクションの使用 - Silver DBA 14-1-6 、Silver SQL 6-1-6

create table t2 (n number);
insert into t2 values(1.4);
insert into t2 values(1.5);
insert into t2 values(1.6);
COMMIT;

NVLファンクションを用いたNULLの集計 - Silver DBA 14-1-6、Silver SQL 6-1-6

create table t3 (n number);
insert into t3 values(NULL);
insert into t3 values(1);
insert into t3 values(2);
insert into t3 values(3);
COMMIT;

ON句を使う結合のSQL構文では異なる名前の列で結合できる - Silver DBA 15-2-2、Silver SQL 7-2-2

CREATE TABLE dept2 (deptid, deptname, location) AS SELECT * FROM dept;

相関副問合せ - Silver SQL 8-4

DROP TABLE emp1;
DROP TABLE sal_hist;

CREATE TABLE emp1(
  empno    NUMBER PRIMARY KEY,
  ename    VARCHAR(8),
  sal      NUMBER);

INSERT INTO emp1 VALUES(2001, 'Jack'  , 720);
INSERT INTO emp1 VALUES(2002, 'Ken'   , 600);
INSERT INTO emp1 VALUES(2003, 'Maria' , 800);
COMMIT;

CREATE TABLE sal_hist (
  empno   NUMBER,
  paydate date,
  sal     number
);

INSERT INTO sal_hist VALUES(2001, TO_DATE('2020/06/25','YYYY/MM/DD'), 720);
INSERT INTO sal_hist VALUES(2001, TO_DATE('2020/05/25','YYYY/MM/DD'), 720);
INSERT INTO sal_hist VALUES(2001, TO_DATE('2020/04/25','YYYY/MM/DD'), 720);
INSERT INTO sal_hist VALUES(2001, TO_DATE('2020/03/25','YYYY/MM/DD'), 800);
INSERT INTO sal_hist VALUES(2001, TO_DATE('2020/02/25','YYYY/MM/DD'), 800);
INSERT INTO sal_hist VALUES(2001, TO_DATE('2020/01/25','YYYY/MM/DD'), 800);

INSERT INTO sal_hist VALUES(2002, TO_DATE('2020/06/25','YYYY/MM/DD'), 600);
INSERT INTO sal_hist VALUES(2002, TO_DATE('2020/05/25','YYYY/MM/DD'), 600);
INSERT INTO sal_hist VALUES(2002, TO_DATE('2020/04/25','YYYY/MM/DD'), 600);
INSERT INTO sal_hist VALUES(2002, TO_DATE('2020/03/25','YYYY/MM/DD'), 600);
INSERT INTO sal_hist VALUES(2002, TO_DATE('2020/02/25','YYYY/MM/DD'), 600);
INSERT INTO sal_hist VALUES(2002, TO_DATE('2020/01/25','YYYY/MM/DD'), 600);

INSERT INTO sal_hist VALUES(2003, TO_DATE('2020/06/25','YYYY/MM/DD'), 800);
INSERT INTO sal_hist VALUES(2003, TO_DATE('2020/05/25','YYYY/MM/DD'), 800);
INSERT INTO sal_hist VALUES(2003, TO_DATE('2020/04/25','YYYY/MM/DD'), 800);
INSERT INTO sal_hist VALUES(2003, TO_DATE('2020/03/25','YYYY/MM/DD'),1000);
INSERT INTO sal_hist VALUES(2003, TO_DATE('2020/02/25','YYYY/MM/DD'), 700);
INSERT INTO sal_hist VALUES(2003, TO_DATE('2020/01/25','YYYY/MM/DD'), 700);

集合演算で使用する表とデータ - Silver DBA 17-1-2、Silver SQL 9-1-2

create table t1 (n number, s varchar2(8));
create table t2 (a number, b varchar2(8));

INSERT INTO t1 VALUES(1, 'AAA');
INSERT INTO t1 VALUES(2, 'BBB');
INSERT INTO t1 VALUES(3, 'CCC');

INSERT INTO t2 VALUES(1, 'AAA');
INSERT INTO t2 VALUES(2, 'BBB');
INSERT INTO t2 VALUES(3, 'ZZZ');

COMMIT;

列数が異なっている場合 - Silver DBA 17-2-1、Silver SQL 9-2-1

CREATE TABLE t1 (n number, s varchar2(8));
INSERT INTO t1 VALUES(1, 'AAA');
INSERT INTO t1 VALUES(2, 'BBB');
INSERT INTO t1 VALUES(3, 'CCC');

CREATE TABLE t3 (i number);
INSERT INTO  t3 VALUES (1);

COMMIT;

データ型が異なる問合せを複合するとエラー - Silver DBA 17-2-1、Silver SQL 9-2-1

CREATE TABLE t4 (n number, i number);
INSERT INTO  t4 VALUES(1, 1);
INSERT INTO  t4 VALUES(1, 2);
CREATE TABLE t5 (n number, s VARCHAR2(8));
INSERT INTO  t5 VALUES(2, '1');
INSERT INTO  t5 VALUES(2, '2');

COMMIT;

列と値の数の不一致によりINSERT文がエラー - Silver DBA 17-2-1、Silver SQL 9-2-1

CREATE TABLE t3 (c1 NUMBER, c2 VARCHAR2(8), c3 c2 VARCHAR2(8));

複数のDMLを「1つのトランザクション」として実行(振り込み処理) - Silver DBA 18-2-3、Silver SQL 10-2-3

CREATE TABLE account(id number, total number);
INSERT INTO  account values(1001, 20000);
INSERT INTO  account values(1002, 30000);
COMMIT;
  • 参考のため、本記事でサンプルデータについて記載しています。Oracle Live SQLでは対話的なトランザクションの制御の動作を確認することはできませんので、実際は、このサンプルデータを用いて黒本のSQLを実行し、動作を確認することはできません。

セーブポイントの例 - Silver DBA 18-2-6、Silver SQL 10-2-6

CREATE TABLE account (
  id NUMBER,
  total NUMBER );
INSERT INTO account VALUES(1001, 13000);
INSERT INTO account VALUES(1002, 40000);
INSERT INTO account VALUES(1003, 20000);
COMMIT;
  • 参考のため、本記事でサンプルデータについて記載しています。Oracle Live SQLでは対話的なトランザクションの制御の動作を確認することはできませんので、実際は、このサンプルデータを用いて黒本のSQLを実行し、動作を確認することはできません。

列の未使用化と領域解放(SAL列) - Silver DBA 19-4-5、Silver SQL 12-4-5

CREATE TABLE emp2 AS SELECT empno, ename, sal FROM emp WHERE deptno = 20;

ビューの作成 - Silver DBA 21-2-1、Silver SQL 13-2-1

CREATE TABLE t1 ( n NUMBER, s VARCHAR2(8), f VARCHAR2(8), x VARCHAR2(8));
INSERT INTO t1 VALUES(1,'AAA', 'SHOW', 'XXX');
INSERT INTO t1 VALUES(2,'BBB', 'HIDE', 'YYY');
INSERT INTO t1 VALUES(3,'CCC', 'SHOW', 'ZZZ');
COMMIT;

重複した値が設定されているため、行データを識別できない - Silver DBA 22-1-4

CREATE TABLE staff ( staffno NUMBER(4), staffname VARCHAR2(10), email VARCHAR2(32));
INSERT INTO staff VALUES(1, 'James', 'james@example.com');
INSERT INTO staff VALUES(2, 'Kyte', 'kyte@somewhere.net');
INSERT INTO staff VALUES(3, 'Joe', 'joe@abc.net');
INSERT INTO staff VALUES(3, 'Tim', 'tim@xyz.org');
COMMIT;

複数の列に対する主キー制約の設定 - Silver DBA 22-1-4、Silver SQL 12-3-4

CREATE TABLE t_year_month (
  year NUMBER(4),
  month NUMBER(2),
  CONSTRAINTS PK_YM PRIMARY KEY(year, month));
INSERT INTO t_year_month (year, month) VALUES(2021, 1);
INSERT INTO t_year_month (year, month) VALUES(2021, 2);
INSERT INTO t_year_month (year, month) VALUES(2021, 1);
COMMIT;

外部キー制約を設定した表とデータの登録例 - Silver DBA 22-1-6、Silver SQL 12-3-6

CREATE TABLE locations (
  loc_id NUMBER PRIMARY KEY,
  lname  VARCHAR2(16));
INSERT INTO locations VALUES(1, 'NEW YORK');
INSERT INTO locations VALUES(2, 'TRONT');
INSERT INTO locations VALUES(3, 'HAWAII');
COMMIT;

CREATE TABLE dept1 (
    deptno NUMBER(4) PRIMARY KEY, 
    dname VARCHAR2(10) NOT NULL,
    loc_id NUMBER REFERENCES locations(loc_id)
    );

INSERT INTO dept1 VALUES(10, 'OPERATIONS', 1);
INSERT INTO dept1 VALUES(20, 'SALES1', 1);
INSERT INTO dept1 VALUES(30, 'SALES2', 2);
INSERT INTO dept1 VALUES(90, 'SPECIAL', 3);
INSERT INTO dept1 VALUES(40, 'FINANCE', 4);
COMMIT;

子表から参照されているの親表の参照キーの変更 - Silver DBA 22-1-6

CREATE TABLE locations (
  loc_id NUMBER PRIMARY KEY,
  lname  VARCHAR2(16));
INSERT INTO locations VALUES(1, 'NEW YORK');
INSERT INTO locations VALUES(2, 'TRONT');
INSERT INTO locations VALUES(3, 'HAWAII');

CREATE TABLE dept1 (                          
    deptno NUMBER(4) PRIMARY KEY, 
    dname VARCHAR2(10) NOT NULL,
    loc_id NUMBER REFERENCES locations(loc_id)
    );

INSERT INTO dept1 VALUES(10, 'OPERATIONS', 1);
INSERT INTO dept1 VALUES(20, 'SALES1', 1);
INSERT INTO dept1 VALUES(30, 'SALES2', 2);
INSERT INTO dept1 VALUES(90, 'SPECIAL',3);
COMMIT;

主キーを無効化し、主キー違反の行をINSERTする例 - Silver DBA 22-1-9、Silver SQL 12-3-9

CREATE TABLE staff ( 
  staffno NUMBER(4) CONSTRAINTS pk_staff PRIMARY KEY, 
  staffname VARCHAR2(10),
  email VARCHAR2(32));

INSERT INTO staff VALUES(1, 'James', 'james@example.com');
INSERT INTO staff VALUES(2, 'Kyte', 'kyte@somewhere.net');
INSERT INTO staff VALUES(3, 'Joe', 'joe@abc.net');
COMMIT;

参考: ORACLE MASTER関連情報

ORACLE MASTER新体系について

2020年から、ORACLE MASTER新体系が導入されています。 ORACLE MASTER新体系の大きな特徴は、試験がOracle Databaseのバージョンに1対1に対応しなくなったことです。

これにより、原則的にOracle Databaseのバージョンに依存しない本質的な内容が問われる形になっています。よって、特に理由がない限り、旧体系(Oracle 12c向け試験)ではなく、新体系の試験を受験することをお勧めします。

ORACLE MASTER 2019新資格体系とは – 18c/19c対応

コーソル執筆のORACLE MASTER関連書籍

コーソルでは、以下のORACLE MASTER関連書籍を執筆しています。 これらの書籍には、「PC操作すらおぼつかない新卒入社者であっても、研修開始後約3か月半でORACLE MASTER Bronzeを取得できる」教育ノウハウが注ぎこまれています。

ORACLE MASTER Bronze DBA 2019試験対策本を執筆しました

ORACLE MASTER Silver DBA 2019黒本を執筆しました

黒本著者によるORACLE MASTER Silver SQL 2019学習方法

ORACLE MASTER Gold DBA 2019試験対策本の発売日が決定しました

参考: コーソルのエンジニア育成とORACLE MASTER

コーソルは、Oracle Databaseをはじめとするオラクル製品と仮想化製品に特化してプロフェッショナルサービスを提供する企業です。

コーソルは、エンジニアのスキルアップを重視する会社であり、それを十二分に踏まえて、人事制度や資格取得支援制度がつくられています。

制度面を整えるだけではなく、現場レベルで試行錯誤しながらエンジニア育成に奮闘しています。 コーソルは、会社創設3年後の2007年4月から毎年継続して新卒を採用しています。また、近年はおおむね4半期ごとに第二新卒を採用しており、 未経験者の育成には定評があります。

ORACLE MASTERの最上位試験であるPlatinumについては、Oracle Databaseについての多くの知識を問う丸2日間の実技試験であることによる有用性を高く評価し、若手エンジニアが成長するなかで取る資格として位置付けています。

その結果、コーソルはORACLE MASTER Platinumについて2016年6月以降 累計 No.1/7年連続単年 No.1を達成しています。

ORACLE MASTER Platinum取得に向けての取り組みについては、日本オラクル Oracle University様の人材育成活用事例として取り上げられています。

  • 本記事は情報提供を目的にしています。情報には正確を期していますが、これを保証するものではありません。
  • 書籍に関する質問については、書籍記載の「本書内容に関するお問い合わせについて」を参照してください。これで解決しない場合は、翔泳社の問合せページから問い合わせてください。
  • オラクル社の試験については、Oracle University に確認ください。

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ