You are on page 1of 8

Ora cle 9i 入門 SQL 編  Ti ps 集

日本オラクル株式会社
エデュケーションサービス本部
杉田 敦史

 この度は、弊社研修サービスをご利用いただき誠にありがとうございます。こちらの資料は、業
務で使える SQL 文を紹介する Tips 集となっております。なお、紹介した SQL 文は本コース
Oracle9i 入門 SQL 編の表を使用して実行しています。

    業務で使える SQL

1. CSV データ (カンマ区切 り)を取り出す SQL 文

SELECT employee_id ||’,’|| last_name ||’,’|| salary “CSV_DATA”


FROM  employees;

CSV_DATA
-----------------------
100,King,24000
101,Kochhar,17000
102,De Haan,17000
103,Hunold,9000
     ・・・

2. 本日入社し た従業員 を表示す る SQL 文

SELECT last_name, hire_date FROM  employees


WHERE hire_date >= TRUNC(SYSDATE, ’DD’)
AND hide_date < TRUNC(SYSDATE, ‘DD’) + 1;

LAST_NAME HIRE_DATE
----------- -----------
SUGITA 2002-04-01

* 特に特定の日付に注文された注文データを検索するときに使用します。
日付型は秒単位までデータを持つため、 WHERE <日付データの列名> = ‘2002-04-01’
とすると 2002 年 4 月 1 日 0 時 00 分のデータしか表示しません。

3. 月末までの 残り日数 を表示す る SQL 文

SELECT LAST_DAY(sysdate) - sysdate “REMAINDER” FROM  dual;

REMAINDER
-----------
2
4. 表に格納さ れている 行データ を 3 行だけみる SQL 文
-1-
Oracle9i 入門 SQL 編
Copyright(C) 2002 Oracle Corporation Japan. All Rights Reserved
SELECT last_name, salary
FROM employees
WHERE rownum <= 3;

LAST_NAME SALARY
--------------- ----------
King 24000
Kochhar 17000
De Haan 17000

* 表にどのようなデータが格納されているか確認するときに利用する。

5. 給与の高い TOP 3を表示す る SQL 文

SELECT rownum “RANK”, last_name, salary


FROM  (SELECT last_name, salary
FROM  emp 
ORDER BY sal DESC)
WHERE  rownum <= 3;

RANK LAST_NAME SALARY


------ --------------- ----------
1 King 24000
2 Kochhar 17000
3 De Haan 17000

6. 文字列のバ イト数を 表示する SQL 文

SELECT LENGTH('オラクル') “LENGTH”,


LENGTHB('オラクル') “LENGTHB”
FROM dual;

LENGTH LENGTHB
---------- ----------
4 8

*LENGTH(文字列):文字列のバイト数を戻す関数

-2-
Oracle9i 入門 SQL 編
Copyright(C) 2002 Oracle Corporation Japan. All Rights Reserved
7. 職種ごとの 、合計給 与と各部 門の合計 給与を表 示する SQL 文

SELECT department_id, job_id, SUM(salary) SUM


FROM employees
WHERE department_id IN(20,50,80)
GROUP BY ROLLUP(department_id, job_id);

DEPARTMENT_ID JOB_ID SUM


------------- ---------- ----------
20 MK_MAN 13000
20 MK_REP 6000
20 19000  ← 部門番号 20 の合計給与
50 ST_CLERK 11700
50 ST_MAN 5800
50 17500  ← 部門番号 50 の合計給与
80 SA_MAN 10500
80 SA_REP 19600
80 30100  ← 部門番号 80 の合計給与
66600  ← 全体の合計給与

8. 2つの表の 差分デー タを取り 出す SQL 文

 SELECT last_name, salary, department_id


FROM   employees
MINUS
SELECT name, sal, deptno
FROM tmp_employees;

LAST_NAME SALARY DEPARTMENT_ID


--------------- ---------- -------------
Abel 11000 80
Taylor 8600 80
Zlotkey 10500 80

*TMP_EMPLOYEES 表は、EMPLOYEES 表で部門番号 80 の従業員の給料だけを 10%昇給したもので、そ


の他の従業員情報は同じ表です。(研修環境に TMP_EMPLOYEES 表はありません。)

-3-
Oracle9i 入門 SQL 編
Copyright(C) 2002 Oracle Corporation Japan. All Rights Reserved
9. 給与が $10 ,000 以上と $10,0 00 未満の従業 員を分け て表示す る SQL 文

SELECT last_name “名前”,
 DECODE(SIGN(salary-10000), 1, salary, 0, salary) “$10,000 以上”,
 DECODE(SIGN(salary-10000),-1,salary) “$10,000 未満”
FROM employees;

名前 $10,000 以上 $10,000 未満
---------- ----------- -----------
King 24000
Kochhar 17000
De Haan 17000
Hunold 9000
Ernst 6000
Lorentz 4200
・・・

*SIGN 関数:数値および式の正負判定を行なう関数
n>0 SIGN(n)=1, n=0 SIGN(n)=0, n<0 SIGN(n)=-1

10. INSER T 文で改 行を値と して挿入 する

INSERT INTO departments(department_id, department_name)
VALUES(200, ‘Education’|| CHR(10) ||’Knowledge’);

SQL> SELECT department_id, department_name FROM departments


2 WHERE department_id = 200;

DEPT# DEPARTMENT_NAME
----- --------------------
200 Education
Knowledge
*CHR(10)は改行, CHR(09)は TAB を表します。

-4-
Oracle9i 入門 SQL 編
Copyright(C) 2002 Oracle Corporation Japan. All Rights Reserved
業務で使える SQL*Plus

SQL*Plus のよく使うコマンド

コマンド 略称 用途
DESCRIBE object DESC object 指定した表、ビュー、シノニムの列定義をリストする
EDIT ED バッファの内容を編集する
SAVE file SAV file
バッファの内容を file に保存する
EDIT file ED file
@file file を編集する
RUN file file の内容を実行する
LIST L 〃
APPEND text A text バッファの内容をリストする
INPUT text I text バッファの行末に text を追加する
DELETE n DEL n
バッファの行末に text からなる1行を追加する
CHANGE /old/new C /old/new
行 n を削除する
現行行の old を new に置換する

その他にも…多くの便利なコマンドが用意されています。
例えば

COLUMN 列の表示形式を指定する SPOOL 問合せの結果を OS ファイルに保存


する
SQL> SELECT empno,ename,sal
2 FROM emp WHERE deptno=10; SQL> SPOOL test.txt ←test.txt にスプー
EMPNO ENAME SAL ル
----- ---------- ----- SQL> SELECT empno,ename
7839 KING 5000    FROM emp WHERE deptno=10;
7782 CLARK 2450 EMPNO ENAME
7934 MILLER 1300 ----- ----------
SQL> COLUMN sal FORMAT $9,999 7839  KING
SQL> / 7782  CLARK
EMPNO ENAME SAL 7934  MILLER
------ ---------- --------- SQL> SPOOL OFF ←スプール終了
7839 KING   $5,000
7782 CLARK   $2,450 test.txt の中身
7934 MILLER   $1,300
SQL> select empno,ename
   from emp where deptno=10;
EMPNO ENAME
----- ----------
7839 KING
7782 CLARK
  7934 MILLER

-5-
Oracle9i 入門 SQL 編
Copyright(C) 2002 Oracle Corporation Japan. All Rights Reserved
1. データベー スへのロ グインを 簡単にす る

SQL*Plus ショートカットをダブルクリックするだけで、データベースへログインすることがで
きます。頻繁にデータベースへログインする場合に、重宝します。
SQL*Plus のショートカットを[右クリック>プロパティ]を表示します。ショートカットタブの
「リンク先」を以下のように変更します。(下図参照)

(例)リンク先 […\sqlplusw.exe sql01/sql01@basic9]

次回から SQL*Plus ショートカットをダブルクリックするだけで、データベースへログインでき


ます。ログインするユーザーごと/データベースごとに、同じようにショートカットを作成すれば、
データベース管理が効率的になります。

2. SQL*P lus で作成した ファイル はどこに 保存され る?

SQL*Plus でファイルを作成するコマンドは SAVE コマンド,EDIT コマンド、SPOOL コマンドなど


があります。以下のように SQL*Plus バッファの内容をファイルに保存する場合、

SQL> save test.sql

保存された test.sql は SQL*Plus の作業フォルダに作成されます。作業フォルダの指定は、


SQL*Plus のショートカットを[右クリック>プロパティ]を表示し、ショートカットタブの「作業
フォルダ」を指定します。(下図参照)
また、以下のように保存先を指定することもできます。

SQL> save G:\oracle\basic9\test.sql

ユーザー名/パスワード@ホスト文字

SQL*Plus の 作 業 フ ォ ル

-6-
Oracle9i 入門 SQL 編
Copyright(C) 2002 Oracle Corporation Japan. All Rights Reserved
3. SQL*P lus で好きなエ ディタを 使う

 Windows 版の SQL*Plus の EDIT コマンドでは、デフォルトでメモ帳(Notepad)が起動します。この


デフォルトのエディタを、使い慣れた別のエディタに変更することができます。下記の例では、秀
丸エディタを指定しています。login.sql に以下の1文を追加してください。

DEFINE_EDITOR=C:\Hidemaru\Hidemaru.exe ←エディタの絶対パスを指定する

4. SQL プロンプト のカスタ マイズ( 現在時刻 の表示)

 どの処理がいつ実行されたのかを、ログに残したいというケースがあります。そのような場合に
SQL プロンプトに時間が記述されていると非常に便利です。現在時刻を SQL プロンプトに表示させ
るコマンドがあります。

SQL> spool test.log


SQL> set time on
20:47:23 SQL>   ← 現在時刻が SQL プロンプトに表示される
・・・
20:57:36 SQL> spool off

5. SQL 文の出力を 抑制する

 バッチ処理などを行なう際に、SQL 文の結果の出力を抑制させたい場合があります。出力を抑制
するためのコマンドがあります。

SQL> set termout off


SQL> @test.sql
SQL> ← バッチ処理が終了するまで何も出力されない。

6. SQL*P lus を終了せず に OS コマンドを 実行する

 (注) GUI 版の SQL*Plus では使用できません。CUI 版の SQL*Plus をご利用ください。

SQL*Plus を終了せずに、OS コマンドを実行することができます。

[UNIX] SQL> ![command]

SQL> !ls
local.cshrc local.profile local.login login.sql

[MS-DOS] SQL> $[command]

SQL> $dir
2001/11/02 17:32 <DIR> .
2001/11/02 17:32 <DIR> ..
2001/11/02 19:11 <DIR> ora901
2001/09/28 12:58 910 login.sql

-7-
Oracle9i 入門 SQL 編
Copyright(C) 2002 Oracle Corporation Japan. All Rights Reserved
業務で役立つ情報源

1. Oracle9i Database マニュアル

・ Oracle9i SQL リファレン ス


 Oracle のデータベースの情報を管理するために使用される SQL について紹介します。各種
SQL 関数についても詳細に紹介します。

・ SQL*Plus ユーザーズ ・ガイド およびリ ファレン ス


SQL*Plus プログラムおよびその使用方法について紹介します。それぞれの SQL*Plus コマン

ドについても詳細に紹介します。

2. Web サイト

・ OTN  (http://otn.oracle.co.jp/)
OTN(Oracle Technology Network)は、オンラインで Oracle の各種技術資料を提供するサ

イトです。オンラインマニュアルや Oracle のソフトウェア(評価版)をダウンロードできま

す。

・ OLN (http://oln.oracle.co.jp/)
OLN(Oracle Learning Network)では、基本的な Oracle テクノロジーはもちろん、日々進化

する最新テクノロジー情報を提供する学習支援サイトです。幅広く豊富な情報ライブラリで、
IT プロフェッショナルの多岐にわたるニーズにお応えします。