ヘッダーをスキップ
Oracle® Database 2日で開発者ガイド
11gリリース2 (11.2)
B56265-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

2 Oracle Databaseへの接続および検索

Oracle Databaseへは、SQL*PlusやSQL Developerなどのクライアント・プログラムからのみ接続できます。


注意:

クライアント・プログラムを使用してOracle Databaseに接続した後、そのクライアント・プログラムのコマンドを入力して実行します。詳細は、クライアント・プログラムのマニュアルを参照してください。

この章の内容は、次のとおりです。

SQL*PlusからOracle Databaseへの接続

SQL*Plusは、Oracle Databaseにアクセス可能なクライアント・プログラムです。この項では、SQL*Plusを起動し、Oracle Databaseに接続する方法を示します。


注意:

次の手順の34では、ユーザー名とパスワードが必要です。

SQL*PlusからOracle Databaseへ接続するには、次の手順を実行します。

  1. Windowsシステムで行う場合は、Windowsのコマンド・プロンプトを表示します。

  2. コマンド・プロンプトで、sqlplusと入力してから[Enter]キーを押します。

  3. ユーザー名のプロンプトで、ユーザー名を入力してから[Enter]キーを押します。

  4. パスワードのプロンプトで、パスワードを入力してから[Enter]キーを押します。


    注意:

    セキュリティのため、パスワードは画面上に表示されません。

    Oracle Databaseインスタンスに接続されます。

    SQL*Plus環境に入っています。 SQL>プロンプトで、SQL*Plusコマンド、SQL文、PL/SQL文およびオペレーティング・システムのコマンドを入力して実行できます。

    SQL*Plusを終了するには、exitと入力して[Enter]キーを押します。


    注意:

    SQL*Plusを終了するとSQL*Plusセッションは終了されますが、Oracle Databaseインスタンスは停止されません。

    例2-1では、SQL*Plusを起動し、Oracle Databaseに接続し、SQLのSELECT文を実行して、SQL*Plusを終了します。ユーザーの入力は太字になっています。

例2-1 SQL*PlusからOracle Databaseへの接続

> sqlplus
SQL*Plus: Release 12.1.0.1.0 Production on Thu Dec 27 07:43:41 2012
 
Copyright (c) 1982, 2012, Oracle.  All rights reserved.
 
Enter user-name: your_user_name
Enter password: your_password
 
Connected to:
Oracle Database 12c Enterprise Edition Release - 12.1.0.1.0 64bit Production
 
SQL> select count(*) from employees;
 
  COUNT(*)
----------
       107
 
SQL> exit
 
Disconnected from Oracle Database 12c Enterprise Edition Release - 12.1.0.1.0 64bit Production
> 

参照:


SQL DeveloperからOracle Databaseへの接続

SQL Developerは、Oracle Databaseにアクセス可能なクライアント・プログラムです。Oracle Database 11gリリース2 (11.2)では、SQL Developerバージョン4.0以降の使用をお薦めします(このバージョンは次の場所からダウンロード可能)。

http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/

この項では、SQL Developerがシステムにインストールされていることを前提として、SQL Developerを起動し、Oracle Databaseに接続する方法を示します。SQL Developerがインストールされていないシステムの場合、インストール手順の詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。


注意:

この後の手順は、次のようになっています。
  • JDKを含まないSQL Developerキットを使用しており、それを初めてシステムで起動するときには、手順1java.exeのフルパスを指定する必要があります。

  • 手順3では、ユーザー名とパスワードが必要です。


SQL DeveloperからOracle Databaseに接続するには、次の手順を実行します。

  1. SQL Developerを起動します。

    手順は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。

    システムでSQL Developerを最初に起動する場合、java.exeへのフルパスを入力するよう求められます(例: C:\Program Files\Java\jdk1.6.0_021\bin\java.exe)。プロンプトに続けてフルパスを入力するか、または参照を行い、[Enter]キーを押します。

  2. 「接続」フレームで、「接続の作成」アイコンをクリックします。

  3. 「データベース接続の作成/選択」で、次の手順を実行します。

    1. 「接続名」、「ユーザー名」および「パスワード」の各フィールドに適切な値を入力します。

      セキュリティのため、入力したパスワードの文字はアスタリスクで表示されます。

      「パスワード」フィールドの近くに「パスワードの保存」チェック・ボックスがあります。デフォルトでは、選択解除されています。デフォルトを受け入れることをお薦めします。

    2. 「Oracle」ペインが表示されない場合は、「Oracle」タブをクリックします。

    3. 「Oracle」ペインでデフォルト値を受け入れます。

      (デフォルト値は、接続タイプ: 基本、ロール: デフォルト、ホスト名: localhost、ポート: 1521、SIDオプション: 選択、SIDフィールド: xeです。)

    4. 「テスト」ボタンをクリックします。

      接続がテストされます。接続が成功すると、「ステータス」インジケータが空白から「成功」に変わります。

      success.gifの説明が続きます
      success.gifの説明

    5. テストが成功したら、「接続」をクリックします。

      「データベース接続の作成/選択」ウィンドウが閉じます。「接続」フレームに、手順 3で「接続名」フィールドに入力した名前の接続が表示されます。

SQL Developer環境に入っています。

SQL Developerを終了するには、「ファイル」メニューから「終了」を選択します。


注意:

SQL Developerを終了するとSQL Developerセッションは終了されますが、Oracle Databaseインスタンスは停止されません。次回SQL Developerを起動するときには、これまでの手順で作成した接続が残っています。SQL Developerでは、手順3で入力したパスワードを要求されます(「パスワードの保存」チェック・ボックスを選択していない場合のみ)。


参照:


ユーザーHRとしてのOracle Databaseへの接続

この項では、HRアカウントをロック解除し、このマニュアルの例やチュートリアルで使用するHRサンプル・スキーマを所有するユーザーHRとして、Oracle Databaseに接続する方法を示します。

このドキュメントのチュートリアルと例を実行するには、ユーザーHRとしてOracle Databaseに接続する必要があります。

この項の内容は次のとおりです。

HRアカウントのロック解除

この項では、HRアカウントのロックを解除し、パスワードをリセットする方法を説明します。

デフォルトでは、HRスキーマがインストールされた際にHRアカウントがロックされ、パスワードが期限切れになります。 HRアカウントがロック解除されていないと、ユーザーHRとしてOracle Databaseに接続することができません。


注意:

次の手順では、ALTER USERシステム権限を持つユーザーの名前とパスワードが必要です。

HRアカウントをロック解除し、パスワードをリセットするには、次の手順を実行します。

  1. SQL*Plusを使用して、ALTER USERのシステム権限があるユーザーとしてOracle Databaseに接続します。

  2. SQL>プロンプトで、HRアカウントをロック解除し、パスワードをリセットします。


    注意:

    セキュアなパスワードを選択してください。セキュアなパスワードの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

    ALTER USER HR ACCOUNT UNLOCK IDENTIFIED BY password;
    

    システムから次のように応答が返されます。

    User altered.
    

    HRアカウントがロック解除され、パスワードがpasswordになりました。

これでユーザーHRとして、パスワードpasswordを使用して、Oracle Databaseに接続できます。


参照:

  • Oracle Databaseに用意されているHRなどの事前定義済ユーザー・アカウントの詳細は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

  • SQL DeveloperにおけるSQL*Plusの利用の詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。


ユーザーHRとしてのSQL*PlusからOracle Databaseへの接続

この項では、ユーザーHRとしてSQL*PlusからOracle Databaseに接続する方法を説明します。


注意:

HRアカウントがロックされている場合は、「HRアカウントのロック解除」を参照してから、この項に戻ってください。

ユーザーHRとして、SQL*PlusからOracle Databaseへ接続するには、次の手順を実行します。


注意:

この作業では、HRアカウントのパスワードが必要です。

  1. Oracle Databaseに接続している場合は、現在の接続をクローズします。

  2. 「SQL*PlusからOracle Databaseへの接続」の指示に従って、手順3でユーザー名HRを入力し、手順4HRアカウントのパスワードを入力します。

    これで、ユーザーHRとしてOracle Databaseに接続しました。


参照:

SQL*Plusを使用したHRの接続の作成例は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

ユーザーHRとしてのSQL DeveloperからOracle Databaseへの接続

この項では、ユーザーHRとしてSQL DeveloperからOracle Databaseに接続する方法を説明します。


注意:

HRアカウントがロックされている場合は、「HRアカウントのロック解除」を参照してから、この項に戻ってください。

ユーザーHRとしてSQL DeveloperからOracle Databaseに接続するには、次の手順を実行します。


注意:

この作業では、HRアカウントのパスワードが必要です。

「SQL DeveloperからOracle Databaseへの接続」の指示に従って、手順3で次の値を入力します。

  • 「接続名」にhr_connと入力します。

    (異なる名前を入力できますが、このマニュアルのチュートリアルでは、接続にhr_connという名前を付けたと想定します。)

  • 「ユーザー名」には、HRと入力します。

  • 「パスワード」には、HRアカウントのパスワードを入力します。

これで、ユーザーHRとしてOracle Databaseに接続しました。

SQL*PlusによるOracle Databaseの検索

この項の内容は次のとおりです。


注意:

HRとしてSQL*PlusからOracle Databaseに接続していない場合、「ユーザーHRとしてSQL*PlusからOracle Databaseへの接続」を参照してから、この項に戻ってください。

SQL*PlusによるHRスキーマ・オブジェクトの表示

SQL*Plusを使用して、静的データ・ディクショナリ・ビューUSER_OBJECTSに問い合せ、HRスキーマに属するオブジェクトを表示できます。

例2-2では、HRスキーマに属するオブジェクトの名前およびデータ型を表示する方法を示しています。

例2-2 SQL*PlusによるHRスキーマ・オブジェクトの表示

COLUMN OBJECT_NAME FORMAT A25
COLUMN OBJECT_TYPE FORMAT A25

SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS
ORDER BY OBJECT_TYPE, OBJECT_NAME;

結果は次のようになります。

OBJECT_NAME               OBJECT_TYPE
------------------------- -------------------------
COUNTRY_C_ID_PK           INDEX
DEPT_ID_PK                INDEX
DEPT_LOCATION_IX          INDEX
EMP_DEPARTMENT_IX         INDEX
EMP_EMAIL_UK              INDEX
EMP_EMP_ID_PK             INDEX
EMP_JOB_IX                INDEX
EMP_MANAGER_IX            INDEX
EMP_NAME_IX               INDEX
JHIST_DEPARTMENT_IX       INDEX
JHIST_EMPLOYEE_IX         INDEX
JHIST_EMP_ID_ST_DATE_PK   INDEX
JHIST_JOB_IX              INDEX
JOB_ID_PK                 INDEX
LOC_CITY_IX               INDEX
LOC_COUNTRY_IX            INDEX
LOC_ID_PK                 INDEX
LOC_STATE_PROVINCE_IX     INDEX
REG_ID_PK                 INDEX
ADD_JOB_HISTORY           PROCEDURE
SECURE_DML                PROCEDURE
DEPARTMENTS_SEQ           SEQUENCE
EMPLOYEES_SEQ             SEQUENCE
LOCATIONS_SEQ             SEQUENCE
COUNTRIES                 TABLE
DEPARTMENTS               TABLE
EMPLOYEES                 TABLE
JOBS                      TABLE
JOB_HISTORY               TABLE
LOCATIONS                 TABLE
REGIONS                   TABLE
SECURE_EMPLOYEES          TRIGGER
UPDATE_JOB_HISTORY        TRIGGER
EMP_DETAILS_VIEW          VIEW
 
34 rows selected.

参照:

  • USER_OBJECTSの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • 問合せを使用した表データの表示の詳細は、「表データの選択」を参照してください。

  • スキーマHRの一般情報は、「サンプル・スキーマHRについて」を参照してください。


SQL*PlusによるEMPLOYEES表のプロパティとデータの表示

SQL*Plusでは、SQL*PlusコマンドDESCRIBEを使用してHRスキーマのEMPLOYEES表の列のプロパティを表示したり、SQL文SELECTを使用してデータを表示したりできます。表の別のプロパティを表示するには、静的データ・ディクショナリ・ビュー(USER_CONSTRAINTSUSER_INDEXESUSER_TRIGGERSなど)を使用します。

例2-3では、HRスキーマのEMPLOYEES表のプロパティを表示する方法を示しています。

例2-3 SQL*PlusによるEMPLOYEES表のプロパティの表示

DESCRIBE EMPLOYEES

結果:

 Name                                      Null?    Type
 ----------------------------------------- -------- -------------
 
 EMPLOYEE_ID                               NOT NULL NUMBER(6)
 FIRST_NAME                                         VARCHAR2(20)
 LAST_NAME                                 NOT NULL VARCHAR2(25)
 EMAIL                                     NOT NULL VARCHAR2(25)
 PHONE_NUMBER                                       VARCHAR2(20)
 HIRE_DATE                                 NOT NULL DATE
 JOB_ID                                    NOT NULL VARCHAR2(10)
 SALARY                                             NUMBER(8,2)
 COMMISSION_PCT                                     NUMBER(2,2)
 MANAGER_ID                                         NUMBER(6)
 DEPARTMENT_ID                                      NUMBER(4)

例2-4では、HRスキーマのEMPLOYEES表のデータの一部を表示する方法を示しています。

例2-4 SQL*PlusによるEMPLOYEES表のデータの表示

COLUMN FIRST_NAME FORMAT A20
COLUMN LAST_NAME FORMAT A25
COLUMN PHONE_NUMBER FORMAT A20

SELECT LAST_NAME, FIRST_NAME, PHONE_NUMBER FROM EMPLOYEES
ORDER BY LAST_NAME;

結果は次のようになります。

LAST_NAME                 FIRST_NAME           PHONE_NUMBER
------------------------- -------------------- --------------------
Abel                      Ellen                011.44.1644.429267
Ande                      Sundar               011.44.1346.629268
Atkinson                  Mozhe                650.124.6234
Austin                    David                590.423.4569
Baer                      Hermann              515.123.8888
Baida                     Shelli               515.127.4563
Banda                     Amit                 011.44.1346.729268
Bates                     Elizabeth            011.44.1343.529268
...
Urman                     Jose Manuel          515.124.4469
Vargas                    Peter                650.121.2004
Vishney                   Clara                011.44.1346.129268
Vollman                   Shanta               650.123.4234
Walsh                     Alana                650.507.9811
Weiss                     Matthew              650.123.1234
Whalen                    Jennifer             515.123.4444
Zlotkey                   Eleni                011.44.1344.429018
 
107 rows selected.

参照:

  • DESCRIBEの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

  • 問合せを使用した表データの表示の詳細は、「表データの選択」を参照してください。

  • 静的データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。


SQL DeveloperによるOracle Databaseの参照

この項の内容は次のとおりです。

チュートリアル: SQL DeveloperによるHRスキーマ・オブジェクトの表示

このチュートリアルではSQL Developerを使用してHRスキーマに属するオブジェクトを表示する方法(つまり、HRスキーマを参照する方法)を説明します。


注意:

ユーザーHRとしてSQL DeveloperからOracle Databaseに接続していない場合、「ユーザーHRとしてSQL DeveloperからOracle Databaseへの接続」を参照してから、このチュートリアルに戻ってください。

HRスキーマを参照するには、次の手順を実行します。

  1. 「接続」フレームで、hr_connアイコンの左にあるプラス記号(+)をクリックします。

    データベースに接続していない場合は、「接続情報」ウィンドウが開きます。データベースに接続している場合は、hr_connの情報が展開されます(手順2の「「OK」をクリックします」の後の情報を参照)。

  2. 「接続情報」ウィンドウが開かれた場合は、次のようにします。

    1. 「ユーザー名」フィールドに、hrと入力します。

    2. 「パスワード」フィールドに、ユーザーhrのパスワードを入力します。

    3. 「OK」をクリックします。

    hr_connの情報を展開します。プラス記号がマイナス記号(-)に変わり、hr_connアイコンの下に「表」、「ビュー」、「索引」などの項目があるスキーマ・オブジェクト・タイプのリストが表示されます(マイナス記号をクリックすると、hr_connの情報が閉じます。マイナス記号はプラス記号に変わり、リストは非表示になります)。


参照:

  • SQL Developerのユーザー・インタフェースの詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。

  • スキーマHRの一般情報は、「サンプル・スキーマHRについて」を参照してください。


チュートリアル: SQL DeveloperによるEMPLOYEES表のプロパティとデータの表示

このチュートリアルでは、SQL Developerを使用してHRスキーマのEMPLOYEES表のプロパティとデータを確認する方法を説明します。


注意:

HRスキーマを参照していない場合、「チュートリアル: SQL DeveloperによるHRスキーマ・オブジェクトの表示」の手順を実行してから、このチュートリアルに戻ってください。

EMPLOYEES表のプロパティとデータを表示するには、次の手順を実行します。

  1. 「接続」フレームで、「表」を展開します。

    「表」の下に、HRスキーマにある表のリストが表示されます。

  2. EMPLOYEESを選択します。

    Oracle SQL Developerウィンドウの右側フレームの「列」ペインに、この表にあるすべての列のリストが表示されます。各列の右側に、名前やデータ型などのプロパティがあります。(列のすべてのプロパティを参照するには、水平スクロール・バーを右に動かします。)

  3. 右側のフレームで、「データ」タブをクリックします。

    「データ」ペインが表示され、この表にあるすべてのレコードの番号付きリストが表示されます。(さらにレコードを参照するには、垂直スクロール・バーを下へ移動します。さらにレコードの列を参照するには、水平スクロール・バーを右へ移動します。)

  4. 右側のフレームで、「制約」タブをクリックします。

    「制約」ペインが表示され、この表に対するすべての制約のリストが表示されます。各制約の右側には、名前、型、検索条件などのプロパティがあります。(制約のすべてのプロパティを参照するには、水平スクロール・バーを右へ動かします。)

  5. 適切なタブをクリックして、他のプロパティを参照します。

    EMPLOYEES表を作成するためのSQL文を確認するには、「SQL」タブをクリックします。SQL文は、EMPLOYEESという名前のペインに表示されます。このペインを閉じるには、名前EMPLOYEESの右のxをクリックします。


参照:

SQL Developerのユーザー・インタフェースの詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。

表データの選択

この項の内容は次のとおりです。


注意:

この項のチュートリアルおよび例を実行するには、ユーザーHRとしてSQL DeveloperからOracle Databaseに接続する必要があります。手順は、「ユーザーHRとしてのSQL DeveloperからOracle Databaseへの接続」を参照してください。

問合せについて

問合せ、つまりSQLのSELECT文は、1つ以上の表またはビューからデータを選択します。

最も簡単な問合せの構文は、次のとおりです。

SELECT select_list FROM source_list

select_listは、データが選択される列を指定し、source_listは、それらの列を含む表またはビューを指定します。

別のSQL文内にネストされた問合せは、副問合せと呼ばれます。

SQL*Plus環境では、SQL>プロンプトで問合せ(またはその他の任意のSQL文)を入力できます。

SQL Developer環境では、ワークシートで問合せ(またはその他の任意のSQL文)を入力できます。


注意:

問合せ結果が表示されるとき、ORDER BY句で順序を指定しないかぎり、レコードを任意の順序で表示できます。詳細は、「選択されたデータのソート」を参照してください。


参照:

  • 問合せおよび副問合せの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • SELECT文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • SQL*Plusコマンド・ライン・インタフェースの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

  • SQL Developerにおけるワークシートの使用の詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。


SQL Developerにおける問合せの実行

この項では、ワークシートを使用してSQL Developerで問合せを実行する方法を説明します。


注意:

ワークシートは問合せに限定されておらず、任意のSQL文の実行に使用できます。

SQL Developerにおいて問合せを実行するには、次の手順を実行します。

  1. SQL Developerの右側のフレームに、hr_connペインが表示されます。

    1. 「ワークシート」サブペインが表示されない場合は、「ワークシート」タブをクリックします。

    2. 手順 3に進みます。

  2. 「SQLワークシート」アイコンをクリックします。

  3. 「接続の選択」ウィンドウが開かれた場合は、次のようにします。

    1. 「接続」フィールドの値がhr_connではない場合は、メニューからその値を選択します。

    2. 「OK」をクリックします。

    ペインに、hr_connというラベルのタブと、「ワークシート」および「クエリー・ビルダー」という2つのサブペインが表示されます。ワークシートにはSQL文を入力できます。

  4. ワークシートに問合せ(SELECT文)を入力します。

  5. 「文の実行」アイコンをクリックします。

    問合せが実行されます。ワークシートの下に「問合せ結果」ペインが表示され、問合せの結果が表示されます。

  6. 「hr_conn」タブの下で、「クリア」アイコンをクリックします。

    問合せが消去され、ワークシートに別のSQL文を入力できます。別のSQL文を実行すると、その結果が前に実行したSQL文の結果のかわりに「問合せ結果」ペインに表示されます。


参照:

SQL Developerにおけるワークシートの使用の詳細は、『Oracle Database SQL Developerユーザーズ・ガイド』を参照してください。

チュートリアル: 表のすべての列の選択

このチュートリアルは、EMPLOYEES表の列を選択する方法を示します。

EMPLOYEES表のすべての列を選択するには、次の手順を実行します。

  1. hr_connというタブが含まれるペインがあれば、それを選択します。そうでない場合は、「SQL Developerにおける問合せの実行」にあるように、「SQLワークシート」アイコンをクリックします。

  2. ワークシートに、次の問合せを入力します。

    SELECT * FROM EMPLOYEES;
    
  3. 「文の実行」アイコンをクリックします。

    問合せが実行されます。ワークシートの下に「問合せ結果」ペインが表示され、EMPLOYEES表のすべての列が表示されます。


注意:

パスワードやクレジット・カード情報などの機密データを保存する列が含まれる表でSELECT *を使用する場合は十分に注意してください。


参照:

別の方法でSQL Developerで表データを表示する他の方法の詳細は、「チュートリアル: SQL DeveloperによるEMPLOYEES表のプロパティとデータの表示」を参照してください。

チュートリアル: 表の特定の列の選択

このチュートリアルでは、EMPLOYEES表のFIRST_NAME列、LAST_NAME列およびDEPARTMENT_ID列のみを選択する方法を示します。

FIRST_NAME、LAST_NAMEおよびDEPARTMENT_IDのみを選択するには、次の手順を実行します。

  1. hr_connというタブが含まれるペインがあれば、それを選択します。そうでない場合は、「SQL Developerにおける問合せの実行」にあるように、「SQLワークシート」アイコンをクリックします。

  2. 「ワークシート」ペインに問合せが含まれている場合、「クリア」アイコンをクリックして問合せを消去します。

  3. ワークシートに、次の問合せを入力します。

    SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID
    FROM EMPLOYEES;
    
  4. 「文の実行」アイコンをクリックします。

    問合せが実行されます。ワークシートの下に「問合せ結果」ペインが表示され、次のような問合せの結果が表示されます。

    FIRST_NAME           LAST_NAME                 DEPARTMENT_ID
    -------------------- ------------------------- -------------
    Donald               OConnell                             50
    Douglas              Grant                                50
    Jennifer             Whalen                               10
    Michael              Hartstein                            20
    Pat                  Fay                                  20
    Susan                Mavris                               40
    Hermann              Baer                                 70
    Shelley              Higgins                             110
    William              Gietz                               110
    Steven               King                                 90
    Neena                Kochhar                              90
     
    FIRST_NAME           LAST_NAME                 DEPARTMENT_ID
    -------------------- ------------------------- -------------
    Lex                  De Haan                              90
    ...
    Kevin                Feeney                               50
     
    107 rows selected.
    

新規のヘッダーの下での選択された列の表示

問合せ結果を表示する際に、デフォルトの列ヘッダーは列名です。新規のヘッダーの下に列が表示されるようにするには、列名の直後に新規のヘッダー(別名)を指定します。別名により、問合せの期間に対する列名が変更されますが、データベース内の対応する名前は変更されません。

例2-5の問合せは、「チュートリアル: 表の特定の列の選択」の問合せと同じ列を選択しますが、列の別名も指定します。別名が二重引用符で囲まれていないので、大文字で表示されます。

例2-5 新規のヘッダーの下での選択された列の表示

SELECT FIRST_NAME First, LAST_NAME last, DEPARTMENT_ID DepT
FROM EMPLOYEES;

結果は次のようになります。

FIRST                LAST                            DEPT
-------------------- ------------------------- ----------
Donald               OConnell                          50
Douglas              Grant                             50
Jennifer             Whalen                            10
Michael              Hartstein                         20
Pat                  Fay                               20
Susan                Mavris                            40
Hermann              Baer                              70
Shelley              Higgins                          110
William              Gietz                            110
Steven               King                              90
Neena                Kochhar                           90
 
FIRST                LAST                            DEPT
-------------------- ------------------------- ----------
Lex                  De Haan                           90
...
Kevin                Feeney                            50
 
107 rows selected.

列の別名を二重引用符で囲むと、例2-6のように、大/小文字の区別が保持され、別名に空白を使用することも可能です。

例2-6 列の別名における大/小文字の区別の保持および空白の使用

SELECT FIRST_NAME "Given Name", LAST_NAME "Family Name"
FROM EMPLOYEES;

結果は次のようになります。

Given Name           Family Name
-------------------- -------------------------
Donald               OConnell
Douglas              Grant
Jennifer             Whalen
Michael              Hartstein
Pat                  Fay
Susan                Mavris
Hermann              Baer
Shelley              Higgins
William              Gietz
Steven               King
Neena                Kochhar
 
Given Name           Family Name
-------------------- -------------------------
Lex                  De Haan
...
Kevin                Feeney
 
107 rows selected.

参照:

列の別名(c_alias)を含むSELECT文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

指定された条件を満たすデータの選択

指定された条件に一致するデータのみを選択するには、SELECT文にWHERE句を含めます。WHERE句には、任意のSQL条件を使用できます(SQL条件の詳細は、『Oracle Database SQL言語リファレンス』を参照してください)。

例2-7の問合せは、部門90に所属する従業員のデータのみを選択します。

例2-7 1つの部門からのデータの選択

SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90;

結果は次のようになります。

FIRST_NAME           LAST_NAME                 DEPARTMENT_ID
-------------------- ------------------------- -------------
Steven               King                                 90
Neena                Kochhar                              90
Lex                  De Haan                              90

3 rows selected.

部門100、110および120の従業員のデータのみを選択する場合は、このWHERE句を使用します。

WHERE DEPARTMENT_ID IN (100, 110, 120);

例2-8の問合せは、姓が「Ma」で始まる従業員のデータのみを選択します。

例2-8 同じ部分文字列で始まる姓を持つデータの選択

SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME LIKE 'Ma%';

結果は次のようになります。

FIRST_NAME           LAST_NAME
-------------------- -------------------------
Jason                Mallin
Steven               Markle
James                Marlow
Mattea               Marvins
Randall              Matos
Susan                Mavris
 
6 rows selected.

姓にmaが含まれる従業員のデータのみを選択する場合は、このWHERE句を使用します。

WHERE LAST_NAME LIKE '%ma%';

例2-9の問合せは、給与が少なくとも11000であり、かつ歩合率がNULLではないという2つの条件をテストします。

例2-9 2つの条件を満たすデータの選択

SELECT FIRST_NAME, LAST_NAME, SALARY, COMMISSION_PCT "%"
FROM EMPLOYEES
WHERE (SALARY >= 11000) AND (COMMISSION_PCT IS NOT NULL);

結果は次のようになります。

FIRST_NAME           LAST_NAME                     SALARY          %
-------------------- ------------------------- ---------- ----------
John                 Russell                        14000         .4
Karen                Partners                       13500         .3
Alberto              Errazuriz                      12000         .3
Gerald               Cambrault                      11000         .3
Lisa                 Ozer                           11500        .25
Ellen                Abel                           11000         .3
 
6 rows selected.

参照:

  • WHERE句を含むSELECT文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • SQL条件の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。


選択したデータのソート

問合せの結果を表示する場合に、ORDER BY句で順序を指定しないと、レコードは任意の順序になります。

例2-10の問合せの結果は、LAST_NAMEを基準に昇順(デフォルト)でソートされます。

また、SQL Developerでは、ORDER BY句を省略し、列の名前をダブルクリックしてソートすることもできます。

例2-10 LAST_NAMEによる選択されたデータのソート

SELECT FIRST_NAME, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
ORDER BY LAST_NAME;

結果:

FIRST_NAME           LAST_NAME                 HIRE_DATE
-------------------- ------------------------- ---------
Ellen                Abel                      11-MAY-04
Sundar               Ande                      24-MAR-08
Mozhe                Atkinson                  30-OCT-05
David                Austin                    25-JUN-05
Hermann              Baer                      07-JUN-02
Shelli               Baida                     24-DEC-05
Amit                 Banda                     21-APR-08
Elizabeth            Bates                     24-MAR-07
...
FIRST_NAME           LAST_NAME                 HIRE_DATE
-------------------- ------------------------- ---------
Jose Manuel          Urman                     07-MAR-06
Peter                Vargas                    09-JUL-06
Clara                Vishney                   11-NOV-05
Shanta               Vollman                   10-OCT-05
Alana                Walsh                     24-APR-06
Matthew              Weiss                     18-JUL-04
Jennifer             Whalen                    17-SEP-03
Eleni                Zlotkey                   29-JAN-08

107 rows selected

例2-11に示すように、ソート基準を選択リストに含める必要はありません。

例2-11 選択対象ではない列による選択されたデータのソート

SELECT FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
ORDER BY LAST_NAME;
 

結果:

FIRST_NAME           HIRE_DATE
-------------------- ---------
Ellen                11-MAY-04
Sundar               24-MAR-08
Mozhe                30-OCT-05
David                25-JUN-05
Hermann              07-JUN-02
Shelli               24-DEC-05
Amit                 21-APR-08
Elizabeth            24-MAR-07
...
FIRST_NAME           HIRE_DATE
-------------------- ---------
Jose Manuel          07-MAR-06
Peter                09-JUL-06
Clara                11-NOV-05
Shanta               10-OCT-05
Alana                24-APR-06
Matthew              18-JUL-04
Jennifer             17-SEP-03
Eleni                29-JAN-08
 
107 rows selected.

参照:

ORDER BY句を含むSELECT文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

複数の表からのデータの選択

すべての従業員のFIRST_NAMELAST_NAMEおよびDEPARTMENT_NAMEを選択する場合を考えます。FIRST_NAMEおよびLAST_NAMEEMPLOYEES表にあり、DEPARTMENT_NAMEDEPARTMENTS表にあります。どちらの表にもDEPARTMENT_IDがあります。この場合、例2-12の問合せを使用できます。このような問合せを結合と呼びます。

例2-12 2つの表からのデータの選択(2つの表の結合)

SELECT EMPLOYEES.FIRST_NAME "First",
EMPLOYEES.LAST_NAME "Last",
DEPARTMENTS.DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES, DEPARTMENTS
WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
ORDER BY DEPARTMENTS.DEPARTMENT_NAME, EMPLOYEES.LAST_NAME;
 

結果:

First                Last                      Dept. Name                       
-------------------- ------------------------- ------------------------------   
William              Gietz                     Accounting                       
Shelley              Higgins                   Accounting                       
Jennifer             Whalen                    Administration                   
Lex                  De Haan                   Executive                        
Steven               King                      Executive                        
Neena                Kochhar                   Executive                        
John                 Chen                      Finance                          
...
Jose Manuel          Urman                     Finance                          
Susan                Mavris                    Human Resources                  
David                Austin                    IT                               
...
Valli                Pataballa                 IT                               
Pat                  Fay                       Marketing                        
Michael              Hartstein                 Marketing                        
Hermann              Baer                      Public Relations                 
Shelli               Baida                     Purchasing                       
...
Sigal                Tobias                    Purchasing                       
Ellen                Abel                      Sales                            
...
Eleni                Zlotkey                   Sales                            
Mozhe                Atkinson                  Shipping                         
...
Matthew              Weiss                     Shipping                         
 
106 rows selected.

テーブル名修飾子は、結合内の一方の表にのみ現れる列名に対してはオプションですが、両方の表に現れる列名に対しては必須です。次の問合せは、例2-12の問合せと同等です。

SELECT FIRST_NAME "First",
LAST_NAME "Last",
DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES, DEPARTMENTS
WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
ORDER BY DEPARTMENT_NAME, LAST_NAME;

修飾された列名を使用する問合せを読みやすくするには、次の例のように、表の別名を使用します。

SELECT FIRST_NAME "First",
LAST_NAME "Last",
DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES e, DEPARTMENTS d
WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY d.DEPARTMENT_NAME, e.LAST_NAME;

FROM句で別名を作成するのではなく、次の例のように、問合せの中で先に作成することも可能です。

SELECT e.FIRST_NAME "First",
e.LAST_NAME "Last",
d.DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES e, DEPARTMENTS d
WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY d.DEPARTMENT_NAME, e.LAST_NAME;

参照:

結合の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

問合せにおける演算子およびファンクションの使用

問合せのselect_listには、SQL演算子およびSQLファンクションを含むSQL式が含まれます。これらの演算子およびファンクションは、オペランドおよび引数として表データを持つことが可能です。SQL式を評価して、得られた値が問合せの結果に表示されます。

この項の内容は次のとおりです。


参照:

  • SQL演算子の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • SQLファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。


問合せにおける算術演算子の使用

SQLは、基本的な算術演算子として+(加算)、-(減算)、*(乗算)および/(除算)をサポートしています。

例2-13の問合せは、部門90に所属する各従業員のLAST_NAMESALARY(月給)および年間賃金をSALARYの降順で表示します。

例2-13 問合せにおける演算式の使用

SELECT LAST_NAME,
SALARY "Monthly Pay",
SALARY * 12 "Annual Pay"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90
ORDER BY SALARY DESC;

結果:

LAST_NAME                 Monthly Pay Annual Pay
------------------------- ----------- ----------
King                            24000     288000
De Haan                         17000     204000
Kochhar                         17000     204000

問合せにおける数値ファンクションの使用

数値ファンクションは、数値入力を受け取り、数値を返します。各数値ファンクションは、評価される各行に対し、値を1つ返します。SQLがサポートする数値ファンクションのリストと説明については、『Oracle Database SQL言語リファレンス』を参照してください。

例2-14の問合せは、数値ファンクションROUNDを使用して、部門100の各従業員の日給を1セント未満は四捨五入して表示します。

例2-14 数値データの四捨五入

SELECT LAST_NAME,
ROUND (((SALARY * 12)/365), 2) "Daily Pay"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

結果:

LAST_NAME                  Daily Pay
------------------------- ----------
Chen                          269.59
Faviet                        295.89
Greenberg                     394.52
Popp                          226.85
Sciarra                       253.15
Urman                         256.44
 
6 rows selected.

例2-15の問合せは、数値ファンクションTRUNCを使用して、部門100の各従業員の日給を1ドル未満は切り捨てて表示します。

例2-15 数値データの切捨て

SELECT LAST_NAME,
TRUNC ((SALARY * 12)/365) "Daily Pay"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

結果:

LAST_NAME                  Daily Pay
------------------------- ----------
Chen                             269
Faviet                           295
Greenberg                        394
Popp                             226
Sciarra                          253
Urman                            256
 
6 rows selected.

参照:

SQL数値ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

問合せにおける連結演算子の使用

連結演算子(||)は、1番目の文字列に2番目の文字列を追加することによって、2つの文字列を1つに結合します。たとえば、'a'||'b'='ab'となります。この演算子を使用すると、例2-16の問合せのように、2つの列または式の情報をレポートの同じ列の中に結合できます。

例2-16 文字データの連結

SELECT FIRST_NAME || ' ' || LAST_NAME "Name"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

結果:

Name
----------------------------------------------
John Chen
Daniel Faviet
Nancy Greenberg
Luis Popp
Ismael Sciarra
Jose Manuel Urman
 
6 rows selected.

参照:

連結演算子の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

問合せにおける文字ファンクションの使用

文字ファンクションは、文字入力を受け取ります。多くは文字の値を返しますが、数値を返すものもあります。各文字ファンクションは、評価される各行に対し、値を1つ返します。SQLがサポートする文字ファンクションのリストと説明については、『Oracle Database SQL言語リファレンス』を参照してください。

UPPERINITCAPおよびLOWERファンクションは文字引数をそれぞれ、すべて大文字、頭文字のみ大文字および、すべて小文字で表示します。

例2-17の問合せは、LAST_NAMEを大文字で、FIRST_NAMEは頭文字を大文字で他は小文字で、EMAILを小文字で表示します。

例2-17 文字データの大/小文字の変更

SELECT UPPER(LAST_NAME) "Last",
INITCAP(FIRST_NAME) "First",
LOWER(EMAIL) "E-Mail"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY EMAIL;

結果:

Last                      First                E-Mail
------------------------- -------------------- -------------------------
FAVIET                    Daniel               dfaviet
SCIARRA                   Ismael               isciarra
CHEN                      John                 jchen
URMAN                     Jose Manuel          jmurman
POPP                      Luis                 lpopp
GREENBERG                 Nancy                ngreenbe
 
6 rows selected.

参照:

SQL文字ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

問合せにおける日付ファンクションの使用

日時ファンクションは、DATE、タイムスタンプ、間隔の値を操作します。各日付ファンクションは、評価される各行に対し、値を1つ返します。SQLがサポートする日付ファンクションのリストと説明については、『Oracle Database SQL言語リファレンス』を参照してください。

DATEおよびタイムスタンプの値として、Oracle Databaseには、次の情報が格納されています。

  • Year

  • Month

  • Date

  • Hour

  • Minute

  • Second

    タイムスタンプの値として、Oracle Databaseには、指定した精度の秒の小数部分も格納されます。また、タイムゾーンを格納するには、データ型TIMESTAMP WITH TIME ZONEまたはTIMESTAMP WITH LOCAL TIME ZONEを使用します。

DATEデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

TIMESTAMPデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

その他のタイムスタンプ・データ型および間隔データ型の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

例2-18の問合せは、EXTRACTおよびSYSDATEファンクションを使用して、部門100の各従業員が何年間雇用されているかを表示します。SYSDATEファンクションは、システム・クロックの現在日時をDATE値として返します。SYSDATEファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。EXTRACTファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

例2-18 日付間の年数の表示

SELECT LAST_NAME,
(EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE)) "Years Employed"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY "Years Employed";

結果:

LAST_NAME                 Years Employed
------------------------- --------------
Popp                                   5
Urman                                  6
Chen                                   7
Sciarra                                7
Greenberg                             10
Faviet                                10
 
6 rows selected.

例2-19の問合せは、SYSTIMESTAMPファンクションを使用して、現在のシステム日付と時間を表示します。SYSTIMESTAMPファンクションは、TIMESTAMP値を返します。SYSTIMESTAMPファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

問合せのFROM句内のDUAL表は、Oracle Databaseがデータ・ディクショナリとともに自動的に作成する1行の表です。 SELECT文を使用して定数式を計算する場合は、DUALから選択します。 DUALには行が1つしかないため、定数が返されるのは1回のみです。DUALからの選択の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

例2-19 システム日付および時間の表示

SELECT EXTRACT(HOUR FROM SYSTIMESTAMP) || ':' ||
EXTRACT(MINUTE FROM SYSTIMESTAMP) || ':' ||
ROUND(EXTRACT(SECOND FROM SYSTIMESTAMP), 0) || ', ' ||
EXTRACT(MONTH FROM SYSTIMESTAMP) || '/' ||
EXTRACT(DAY FROM SYSTIMESTAMP) || '/' ||
EXTRACT(YEAR FROM SYSTIMESTAMP) "System Time and Date"
FROM DUAL;

結果は、現在のSYSTIMESTAMPの値に依存しますが、次の形式で表示されます。

System Time and Date
-------------------------------------------------------------------
18:17:53, 12/27/2012

参照:

SQL日付ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

問合せにおける変換ファンクションの使用

変換ファンクションは、あるデータ型を他のデータ型に変換します。SQLがサポートする変換ファンクションのリストと説明については、『Oracle Database SQL言語リファレンス』を参照してください。

例2-20の問合せは、TO_CHARファンクションを使用して、HIRE_DATE値(DATE型)をFMMonth DD YYYY書式の文字値に変換します。FMは、月名から先頭と末尾の空白を削除します。FMMonth DD YYYYは、日付時間書式モデルの一例です。日付時間書式モデルの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

例2-20 日付から文字列への書式テンプレートを使用した変換

SELECT LAST_NAME,
HIRE_DATE,
TO_CHAR(HIRE_DATE, 'FMMonth DD YYYY') "Date Started"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

結果:

LAST_NAME                 HIRE_DATE Date Started
------------------------- --------- -----------------
Chen                      28-SEP-05 September 28 2005
Faviet                    16-AUG-02 August 16 2002
Greenberg                 17-AUG-02 August 17 2002
Popp                      07-DEC-07 December 7 2007
Sciarra                   30-SEP-05 September 30 2005
Urman                     07-MAR-06 March 7 2006
 
6 rows selected.

例2-21の問合せは、TO_NUMBERファンクションを使用して、POSTAL_CODE値(VARCHAR2型)を、計算で使用するNUMBER型の値に変換します。

例2-21 文字列から数値への変換

SELECT CITY,
POSTAL_CODE "Old Code",
TO_NUMBER(POSTAL_CODE) + 1 "New Code"
FROM LOCATIONS
WHERE COUNTRY_ID = 'US'
ORDER BY POSTAL_CODE;

結果:

CITY                           Old Code       New Code
------------------------------ ------------ ----------
Southlake                      26192             26193
South Brunswick                50090             50091
Seattle                        98199             98200
South San Francisco            99236             99237
 
4 rows selected.

参照:


問合せにおける集計ファンクションの使用

集計ファンクションは、行のグループを取得し、単一の結果行を返します。行のグループは表またはビュー全体です。SQLがサポートする集計ファンクションのリストと説明については、『Oracle Database SQL言語リファレンス』を参照してください。

集計ファンクションは、1つまたは複数の列ごとに問合せ結果をグループ化するGROUP BY句を各グループの結果ともに使用する場合に、特に有効です。

例2-22の問合せは、COUNTファンクションおよびGROUP BY句を使用して、各マネージャに対してレポートする人数を表示します。ワイルドカード文字*は、レコード全体を表します。

例2-22 各グループの行数のカウント

SELECT MANAGER_ID "Manager",
COUNT(*) "Number of Reports"
FROM EMPLOYEES
GROUP BY MANAGER_ID
ORDER BY MANAGER_ID;

結果:

   Manager Number of Reports
---------- -----------------
       100                14
       101                 5
       102                 1
       103                 4
       108                 5
       114                 5
       120                 8
       121                 8
       122                 8
       123                 8
       124                 8
       145                 6
       146                 6
       147                 6
       148                 6
       149                 6
       201                 1
       205                 1
                           1
 
19 rows selected.

例2-22は、従業員の1人がマネージャにレポートしないことを示しています。次の問合せは、その従業員の名、姓および役職を選択します。

COLUMN FIRST_NAME FORMAT A10;
COLUMN LAST_NAME FORMAT A10;
COLUMN JOB_TITLE FORMAT A10;
 
SELECT e.FIRST_NAME,
e.LAST_NAME,
j.JOB_TITLE
FROM EMPLOYEES e, JOBS j
WHERE e.JOB_ID = j.JOB_ID
AND MANAGER_ID IS NULL;

結果:

FIRST_NAME LAST_NAME  JOB_TITLE
---------- ---------- ----------
Steven     King       President

問合せで、集計値が指定された条件を満たす行のみを返すには、問合せのHAVING句で集計ファンクションを使用します。

例2-23の問合せは、毎年給与に$1,000,000を超える額を費やしている部門の部門と給与額を表示します。

例2-23 条件を満たす行への集計ファンクションの制限

SELECT DEPARTMENT_ID "Department",
SUM(SALARY*12) "All Salaries"
FROM EMPLOYEES
HAVING SUM(SALARY * 12) >= 1000000
GROUP BY DEPARTMENT_ID;

結果:

Department All Salaries
---------- ------------
        50      1876800
        80      3654000

例2-24の問合せは、複数の集計ファンクションを使用して、各JOB_IDの給与の統計を表示します。

例2-24 統計情報を得るための集計ファンクションの使用

SELECT JOB_ID,
COUNT(*) "#",
MIN(SALARY) "Minimum",
ROUND(AVG(SALARY), 0) "Average",
MEDIAN(SALARY) "Median",
MAX(SALARY) "Maximum",
ROUND(STDDEV(SALARY)) "Std Dev"
FROM EMPLOYEES
GROUP BY JOB_ID
ORDER BY JOB_ID;

結果:

JOB_ID              #    Minimum    Average     Median    Maximum    Std Dev
---------- ---------- ---------- ---------- ---------- ---------- ----------
AC_ACCOUNT          1       8300       8300       8300       8300          0
AC_MGR              1      12008      12008      12008      12008          0
AD_ASST             1       4400       4400       4400       4400          0
AD_PRES             1      24000      24000      24000      24000          0
AD_VP               2      17000      17000      17000      17000          0
FI_ACCOUNT          5       6900       7920       7800       9000        766
FI_MGR              1      12008      12008      12008      12008          0
HR_REP              1       6500       6500       6500       6500          0
IT_PROG             5       4200       5760       4800       9000       1926
MK_MAN              1      13000      13000      13000      13000          0
MK_REP              1       6000       6000       6000       6000          0
PR_REP              1      10000      10000      10000      10000          0
PU_CLERK            5       2500       2780       2800       3100        239
PU_MAN              1      11000      11000      11000      11000          0
SA_MAN              5      10500      12200      12000      14000       1525
SA_REP             30       6100       8350       8200      11500       1524
SH_CLERK           20       2500       3215       3100       4200        548
ST_CLERK           20       2100       2785       2700       3600        453
ST_MAN              5       5800       7280       7900       8200       1066
 
19 rows selected.

参照:

SQL集計ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

問合せにおけるNULL関連ファンクションの使用

NULL関連ファンクションは、NULL値の処理を容易にします。SQLがサポートするNULL関連ファンクションのリストと説明については、『Oracle Database SQL言語リファレンス』を参照してください。

例2-25の問合せは、姓がBで始まる従業員の姓と歩合を返します。従業員が歩合を受け取らない場合(つまり、COMMISSION_PCTNULLの場合)、NVLファンクションは、NULLを"Not Applicable"で置換します。

例2-25 文字列によるNULL値の置換

SELECT LAST_NAME,
NVL(TO_CHAR(COMMISSION_PCT), 'Not Applicable') "COMMISSION"
FROM EMPLOYEES
WHERE LAST_NAME LIKE 'B%'
ORDER BY LAST_NAME;
 

結果:

LAST_NAME                 COMMISSION
------------------------- ----------------------------------------
Baer                      Not Applicable
Baida                     Not Applicable
Banda                     .1
Bates                     .15
Bell                      Not Applicable
Bernstein                 .25
Bissot                    Not Applicable
Bloom                     .2
Bull                      Not Applicable
 
9 rows selected.

例2-26の問合せは、NVL2ファンクションを使用して、姓がBで始まる従業員の姓、給与および収入を返します(COMMISSION_PCTNULLでない場合、収入は給与と歩合の合計であり、COMMISSION_PCTNULLの場合、収入は給与のみです)。

例2-26 NULL値と非NULL値に対する異なる式の指定

SELECT LAST_NAME, SALARY,
NVL2(COMMISSION_PCT, SALARY + (SALARY * COMMISSION_PCT), SALARY) INCOME
FROM EMPLOYEES WHERE LAST_NAME LIKE 'B%'
ORDER BY LAST_NAME;
 

結果:

LAST_NAME                     SALARY     INCOME
------------------------- ---------- ----------
Baer                           10000      10000
Baida                           2900       2900
Banda                           6200       6820
Bates                           7300       8395
Bell                            4000       4000
Bernstein                       9500      11875
Bissot                          3300       3300
Bloom                          10000      12000
Bull                            4100       4100
 
9 rows selected.

参照:

  • NVLファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  • NVL2ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。


問合せにおけるCASE式の使用

CASE式を使用すると、サブプログラムを呼び出すことなく、SQL文でIF ... THEN ... ELSE論理を使用できます。CASE式には、単純と検索の2種類あります。

例2-27の問合せは、単純CASE式を使用し、各国コードの国名を表示します。

例2-27 問合せでの単純CASE式の使用

SELECT UNIQUE COUNTRY_ID ID,
       CASE COUNTRY_ID
         WHEN 'AU' THEN 'Australia'
         WHEN 'BR' THEN 'Brazil'
         WHEN 'CA' THEN 'Canada'
         WHEN 'CH' THEN 'Switzerland'
         WHEN 'CN' THEN 'China'
         WHEN 'DE' THEN 'Germany'
         WHEN 'IN' THEN 'India'
         WHEN 'IT' THEN 'Italy'
         WHEN 'JP' THEN 'Japan'
         WHEN 'MX' THEN 'Mexico'
         WHEN 'NL' THEN 'Netherlands'
         WHEN 'SG' THEN 'Singapore'
         WHEN 'UK' THEN 'United Kingdom'
         WHEN 'US' THEN 'United States'
       ELSE 'Unknown'
       END COUNTRY
FROM LOCATIONS
ORDER BY COUNTRY_ID;

結果:

ID COUNTRY
-- --------------
AU Australia
BR Brazil
CA Canada
CH Switzerland
CN China
DE Germany
IN India
IT Italy
JP Japan
MX Mexico
NL Netherlands
SG Singapore
UK United Kingdom
US United States
 
14 rows selected.

例2-28の問合せは、検索CASE式を使用して、勤続年数に基づいて推奨される給与の値上げを表示します。

例2-28 問合せでの検索CASE式の使用

SELECT LAST_NAME "Name",
HIRE_DATE "Started",
SALARY "Salary",
CASE
  WHEN HIRE_DATE < TO_DATE('01-Jan-90', 'dd-mon-yy')
    THEN TRUNC(SALARY*1.15, 0)
  WHEN HIRE_DATE < TO_DATE('01-Jan-95', 'dd-mon-yy')
    THEN TRUNC(SALARY*1.10, 0)
  WHEN HIRE_DATE < TO_DATE('01-Jan-00', 'dd-mon-yy')
    THEN TRUNC(SALARY*1.05, 0)
  ELSE SALARY
END "Proposed Salary"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY HIRE_DATE;

結果:

Name                      Started       Salary Proposed Salary
------------------------- --------- ---------- ---------------
Faviet                    16-AUG-02       9000           10350
Greenberg                 17-AUG-02      12008           13809
Chen                      28-SEP-05       8200            9430
Sciarra                   30-SEP-05       7700            8855
Urman                     07-MAR-06       7800            8970
Popp                      07-DEC-07       6900            7935
 
6 rows selected.

参照:


問合せにおけるDECODEファンクションの使用

DECODEファンクションは、式といくつかの検索値と比較します。式の値が検索値に一致すると、DECODEは、検索値に関連付けられている結果を返します。DECODEが一致を検出しない場合、デフォルト値(指定されている場合)またはNULL(デフォルト値が指定されていない場合)が返されます。

例2-29の問合せは、DECODEファンクションを使用して、3つの異なる役職に対して推奨される給与の値上げを表示します。式はJOB_ID、検索値は'PU_CLERK''SH_CLERK''ST_CLERK'、およびデフォルト値はSALARYです。

例2-29 問合せにおけるDECODEファンクションの使用

SELECT LAST_NAME, JOB_ID, SALARY,
DECODE(JOB_ID,
  'PU_CLERK', SALARY * 1.10,
  'SH_CLERK', SALARY * 1.15,
  'ST_CLERK', SALARY * 1.20,
  SALARY) "Proposed Salary"
FROM EMPLOYEES
WHERE JOB_ID LIKE '%_CLERK'
AND LAST_NAME < 'E'
ORDER BY LAST_NAME;

結果:

LAST_NAME                 JOB_ID         SALARY Proposed Salary
------------------------- ---------- ---------- ---------------
Atkinson                  ST_CLERK         2800            3360
Baida                     PU_CLERK         2900            3190
Bell                      SH_CLERK         4000            4600
Bissot                    ST_CLERK         3300            3960
Bull                      SH_CLERK         4100            4715
Cabrio                    SH_CLERK         3000            3450
Chung                     SH_CLERK         3800            4370
Colmenares                PU_CLERK         2500            2750
Davies                    ST_CLERK         3100            3720
Dellinger                 SH_CLERK         3400            3910
Dilly                     SH_CLERK         3600            4140
 
11 rows selected.

注意:

DECODEファンクションの引数は、任意のSQL数値型または文字型です。式および各検索値は、比較の前に最初の検索値のデータ型に自動的に変換されます。戻り値は、最初の結果と同じデータ型に自動的に変換されます。最初の結果がデータ型CHARの場合、または最初の結果がNULLの場合、戻り値はデータ型VARCHAR2に変換されます。


参照: