2 Oracle Databaseへの接続および検索
Oracle Databaseへは、SQL*PlusやSQL Developerなどのクライアント・プログラムからのみ接続できます。データベースに接続すると、スキーマ・オブジェクトを表示したり、Oracle Databaseの表のプロパティとデータを表示したり、問合せを使用してOracle Databaseの表からデータを取得できます。
クライアント・プログラムを使用してOracle Databaseに接続した後、そのクライアント・プログラムのコマンドを入力して実行します。詳細は、クライアント・プログラムのマニュアルを参照してください。
- SQL*PlusからOracle Databaseへの接続
SQL*Plusは、Oracle Databaseにアクセス可能なクライアント・プログラムです。このトピックでは、SQL*Plusを起動し、Oracle Databaseに接続する方法を示します。 - SQL DeveloperからOracle Databaseへの接続
SQL Developerは、Oracle Databaseにアクセス可能なクライアント・プログラムです。 - ユーザーHRとしてのOracle Databaseへの接続
このドキュメントのチュートリアルと例を実行するには、ユーザーHR
としてOracle Databaseに接続する必要があります。 - SQL*PlusによるOracle Databaseの参照
ユーザーHRとしてSQL*PlusからOracle Databaseに接続する場合、HRスキーマ・オブジェクトとEMPLOYEES表のプロパティを表示できます。 - SQL DeveloperによるOracle Databaseの参照
ユーザーHRとしてSQL DeveloperからOracle Databaseに接続する場合、HRスキーマ・オブジェクトとEMPLOYEES表のプロパティを表示できます。 - 表データの選択
2.1 SQL*PlusからOracle Databaseへの接続
SQL*Plusは、Oracle Databaseにアクセスできるクライアント・プログラムです。このトピックでは、SQL*Plusを起動し、Oracle Databaseに接続する方法を示します。
SQL*PlusからOracle Databaseへ接続するには、次の手順を実行します。
-
Windowsシステムで行う場合は、Windowsのコマンド・プロンプトを表示します。
-
コマンド・プロンプトで、sqlplusと入力してから[Enter]キーを押します。
-
ユーザー名のプロンプトで、ユーザー名を入力してから[Enter]キーを押します。
-
パスワードのプロンプトで、パスワードを入力してから[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*Plusの概要は、「SQL*Plusについて」を参照してください。
-
SQL*Plusの起動とOracle Databaseへの接続の詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。
親トピック: Oracle Databaseへの接続および検索
2.2 SQL DeveloperからOracle Databaseへの接続
SQL Developerは、Oracle Databaseにアクセス可能なクライアント・プログラムです。
現在利用可能なリリースのSQL Developerを次のサイトからダウンロードして使用できます。
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/
この項では、SQL Developerがシステムにインストールされていることを前提として、SQL Developerを起動し、Oracle Databaseに接続する方法を示します。SQL Developerがインストールされていないシステムの場合、インストール手順の詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
注意:
この後の手順は、次のようになっています。
-
JDKを含まないSQL Developerキットを使用しており、それを初めてシステムで起動するときには、Java Development Kitへのパスを指定する必要があります。
-
パスワードの名前とパスワードの入力を求められた場合は、入力する必要があります。
SQL DeveloperからOracle Databaseに接続するには、次の手順を実行します。
-
SQL Developerを起動します。
手順は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
システムでSQL Developerを最初に起動する場合、Java Development Kit (JDK)インストールへのパスを入力するよう求められます(例:
C:\Program Files\Java\jdk1.8.0_65
)。プロンプトに続けてパスを入力するか、または参照を行い、[Enter]キーを押します。 -
「接続」フレームで、「接続の作成」アイコンをクリックします。
-
「データベース接続の作成/選択」ウィンドウで、次の手順を実行します。
-
「接続名」、「ユーザー名」および「パスワード」の各フィールドに適切な値を入力します。
セキュリティのため、入力したパスワードの文字はアスタリスクで表示されます。
「パスワード」フィールドの近くに「パスワードの保存」チェック・ボックスがあります。デフォルトでは、選択解除されています。デフォルトを受け入れることをお薦めします。
-
「Oracle」ペインが表示されない場合は、「Oracle」タブをクリックします。
-
「Oracle」ペインでデフォルト値を受け入れます。
(デフォルト値は、接続タイプ: 基本、ロール: デフォルト、ホスト名: localhost、ポート: 1521、SIDオプション: 選択、SIDフィールド: xeです。)
-
「テスト」ボタンをクリックします。
接続がテストされます。接続が成功すると、「ステータス」インジケータが空白から「成功」に変わります。
-
テストが成功したら、「接続」をクリックします。
「データベース接続の作成/選択」ウィンドウが閉じます。「接続」フレームに、手順3で「接続名」フィールドに入力した名前の接続が表示されます。
-
SQL Developer環境に入っています。
SQL Developerを終了するには、「ファイル」メニューから「終了」を選択します。
注意:
SQL Developerを終了するとSQL Developerセッションは終了されますが、Oracle Databaseインスタンスは停止されません。次回SQL Developerを起動するときには、これまでの手順で作成した接続が残っています。SQL Developerでは、手順3で入力したパスワードを要求されます(「パスワードの保存」チェック・ボックスを選択していない場合のみ)。
関連項目:
-
SQL Developerの概要は、「SQL Developerについて」を参照してください。
-
SQL Developerを使用したOracle Databaseへの接続の作成の詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
親トピック: Oracle Databaseへの接続および検索
2.3 ユーザーHRとしてのOracle Databaseへの接続
このドキュメントのチュートリアルと例を実行するには、ユーザーHR
としてOracle Databaseに接続する必要があります。
ユーザーHR
は、このマニュアルの例とチュートリアルで使用されるHR
サンプル・スキーマを所有します。
- HRアカウントのロック解除
ユーザーHRとしてOracle Databaseに接続するには、その前にHRアカウントのロックを解除し、パスワードをリセットする必要があります。 - ユーザーHRとしてのSQL*PlusからOracle Databaseへの接続
SQL*Plusを使用してHRユーザーとしてOracle Databaseに接続できます。 - ユーザーHRとしてのSQL DeveloperからOracle Databaseへの接続
SQL Developerを使用してHRユーザーとしてOracle Databaseに接続できます。
親トピック: Oracle Databaseへの接続および検索
2.3.1 HRアカウントのロック解除
ユーザーHRとしてOracle Databaseに接続するには、その前にHRアカウントのロックを解除し、パスワードをリセットする必要があります。
デフォルトでは、HRスキーマがインストールされた際にHRアカウントがロックされ、パスワードが期限切れになります。
注意:
次の手順では、ALTER USERシステム権限を持つユーザーの名前とパスワードが必要です。
hrアカウントをロック解除し、パスワードをリセットするには、次の手順を実行します。
-
SQL*Plusを使用して、ALTER USERのシステム権限があるユーザーとしてOracle Databaseに接続します。
-
SQL>プロンプトで、HRアカウントをロック解除し、パスワードをリセットします。
注意:
安全なパスワードを選択してください。セキュアなパスワードの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
ALTER USER HR ACCOUNT UNLOCK IDENTIFIED BY password;
システムは次のように応答します。
User altered.
HR
アカウントがロック解除され、パスワードがpasswordになりました。
これでユーザーHRとして、パスワードpasswordを使用して、Oracle Databaseに接続できます。
関連項目:
-
SQL DeveloperでのSQL*Plusの利用の詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
2.3.2 ユーザーHRとしてのSQL*PlusからOracle Databaseへの接続
SQL*Plusを使用してHRユーザーとしてOracle Databaseに接続できます。
注意:
HRアカウントがロックされている場合は、「HRアカウントのロック解除」を参照してから、この項に戻ってください。
ユーザーHRとして、SQL*PlusからOracle Databaseへ接続するには、次の手順を実行します。
注意:
この作業では、HRアカウントのパスワードが必要です。
-
Oracle Databaseに接続している場合は、現在の接続をクローズします。
-
「SQL*PlusからOracle Databaseへの接続」の指示に従って、手順3でユーザー名HRを入力し、手順4でHRアカウントのパスワードを入力します。
これで、ユーザーHRとしてOracle Databaseに接続しました。
関連項目:
SQL*Plusを使用したHR
の接続の作成例は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。
2.3.3 ユーザーHRとしてのSQL DeveloperからOracle Databaseへの接続
SQL Developerを使用してHRユーザーとしてOracle Databaseに接続できます。
注意:
HRアカウントがロックされている場合は、「HRアカウントのロック解除」を参照してから、この項に戻ってください。
ユーザーHRとしてSQL DeveloperからOracle Databaseに接続するには、次の手順を実行します。
注意:
この作業では、HRアカウントのパスワードが必要です。
「SQL DeveloperからOracle Databaseへの接続」の指示に従って、手順3で次の値を入力します。
-
「接続名」には、hr_connと入力します。
(異なる名前を入力できますが、このマニュアルのチュートリアルでは、接続にhr_connという名前を付けたと想定します。)
-
「ユーザー名」には、HRと入力します。
-
「パスワード」には、HRアカウントのパスワードを入力します。
これで、ユーザーHRとしてOracle Databaseに接続しました。
2.4 SQL*PlusによるOracle Databaseの参照
ユーザーHRとしてSQL*PlusからOracle Databaseに接続する場合、HRスキーマ・オブジェクトとEMPLOYEES表のプロパティを表示できます。
注意:
HRとしてSQL*PlusからOracle Databaseに接続していない場合、「ユーザーHRとしてSQL*PlusからOracle Databaseへの接続」を参照してから、この項に戻ってください。
- SQL*PlusによるHRスキーマ・オブジェクトの表示
SQL*Plusを使用して、静的データ・ディクショナリ・ビューUSER_OBJECTSに問い合せ、HRスキーマに属するオブジェクトを表示できます。 - SQL*PlusによるEMPLOYEES表のプロパティとデータの表示
SQL*Plusコマンド、SQL SELECT文および静的データ・ディクショナリ・ビューを使用してHR.EMPLOYEES表のプロパティとデータを表示できます。
親トピック: Oracle Databaseへの接続および検索
2.4.1 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について」を参照してください。
2.4.2 SQL*PlusによるEMPLOYEES表のプロパティとデータの表示
SQL*Plusコマンド、SQL SELECT文および静的データ・ディクショナリ・ビューを使用してHR.EMPLOYEES表のプロパティとデータを表示できます。
SQL*PlusコマンドDESCRIBE
を使用してHRスキーマのEMPLOYEES表の列のプロパティを表示したり、SQL文SELECTを使用してデータを表示したりできます。表の別のプロパティを表示するには、静的データ・ディクショナリ・ビュー(USER_CONSTRAINTS、USER_INDEXES、USER_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リファレンス』を参照してください。
2.5 SQL DeveloperによるOracle Databaseの参照
ユーザーHRとしてSQL DeveloperからOracle Databaseに接続する場合、HRスキーマ・オブジェクトとEMPLOYEES表のプロパティを表示できます。
- チュートリアル: SQL DeveloperによるHRスキーマ・オブジェクトの表示
このチュートリアルではSQL Developerを使用してHRスキーマに属するオブジェクトの表示方法(つまり、HRスキーマを参照する方法)を説明します。 - チュートリアル: SQL DeveloperによるEMPLOYEES表のプロパティとデータの表示
このチュートリアルでは、SQL Developerを使用してHRスキーマのEMPLOYEES表のプロパティとデータを確認する方法を説明します。
親トピック: Oracle Databaseへの接続および検索
2.5.1 チュートリアル: SQL DeveloperによるHRスキーマ・オブジェクトの表示
このチュートリアルではSQL Developerを使用してHRスキーマに属するオブジェクトを表示する方法(つまり、HRスキーマを参照する方法)を説明します。
注意:
ユーザーHRとしてSQL DeveloperからOracle Databaseに接続していない場合、「ユーザーHRとしてのSQL DeveloperからOracle Databaseへの接続」を参照してから、このチュートリアルに戻ってください。
HRスキーマを参照するには、次の手順を実行します。
-
「接続」フレームで、hr_connアイコンの左にあるプラス記号(+)をクリックします。
データベースに接続していない場合は、「接続情報」ウィンドウが開きます。データベースに接続している場合は、hr_connの情報が展開されます(手順2の「「OK」をクリックします」の後の情報を参照)。
-
「接続情報」ウィンドウが開かれた場合は、次のようにします。
-
「ユーザー名」フィールドに、hrと入力します。
-
「パスワード」フィールドに、ユーザーHRのパスワードを入力します。
-
「OK」をクリックします。
hr_connの情報を展開します。プラス記号がマイナス記号(-)に変わり、hr_connアイコンの下に「表」、「ビュー」、「索引」などの項目があるスキーマ・オブジェクト・タイプのリストが表示されます(マイナス記号をクリックすると、hr_connの情報が閉じます。マイナス記号はプラス記号に変わり、リストは非表示になります)。
-
関連項目:
-
SQL Developerユーザー・インタフェースの詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください
-
スキーマHRの一般情報は、「サンプル・スキーマHRについて」を参照してください。
2.5.2 チュートリアル: SQL DeveloperによるEMPLOYEES表のプロパティとデータの表示
このチュートリアルでは、SQL Developerを使用してHRスキーマのEMPLOYEES表のプロパティとデータを確認する方法を説明します。
注意:
HRスキーマを参照していない場合、「チュートリアル: SQL DeveloperによるHRスキーマ・オブジェクトの表示」の手順を実行してから、このチュートリアルに戻ってください。
EMPLOYEES表のプロパティとデータを表示するには、次の手順を実行します。
関連項目:
SQL Developerユーザー・インタフェースの詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください
2.6 表データの選択
注意:
この項のチュートリアルおよび例を実行するには、ユーザーHRとしてSQL DeveloperからOracle Databaseに接続する必要があります。手順は、「ユーザーHRとしてのSQL DeveloperからOracle Databaseへの接続」を参照してください。
- 問合せについて
問合せ、つまりSQLのSELECT文は、1つ以上の表またはビューのデータを選択します。 - SQL Developerにおける問合せの実行
この項では、ワークシートを使用してSQL Developerで問合せを実行する方法を説明します。 - チュートリアル: 表のすべての列の選択
このチュートリアルは、EMPLOYEES表のすべての列を選択する方法を示します。 - チュートリアル: 表の特定の列の選択
このチュートリアルは、EMPLOYEES表のFIRST_NAME列、LAST_NAME列およびDEPARTMENT_ID列のみを選択する方法を示します - 新規のヘッダーの下での選択された列の表示
問合せ結果を表示する際のデフォルトの列ヘッダーは、列の名前です。新規のヘッダーの下に列が表示されるようにするには、列名の直後に新規のヘッダー(別名)を指定します。別名により、問合せの期間に対する列名が変更されますが、データベース内の対応する名前は変更されません。 - 指定された条件を満たすデータの選択
指定した条件に一致するデータのみを選択するには、SELECT文にWHERE句を含めます。 - 選択したデータのソート
問合せの結果を表示する場合に、ORDER BY句で順序を指定しないと、レコードは任意の順序になります。 - 複数の表からのデータの選択
複数の表からデータを選択するには、結合と呼ばれる問合せを使用します。結合の表は少なくとも1つの列名を共有している必要があります。 - 問合せにおける演算子およびファンクションの使用
問合せのselect_listにはSQL式を含めることができ、SQL式にはSQL演算子とSQLファンクションを含めることができます。これらの演算子およびファンクションは、オペランドおよび引数として表データを持つことが可能です。SQL式を評価して、得られた値が問合せの結果に表示されます。
親トピック: Oracle Databaseへの接続および検索
2.6.1 問合せについて
問合せ、つまり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 SQL Developerユーザーズ・ガイド』を参照してください。
親トピック: 表データの選択
2.6.2 SQL Developerにおける問合せの実行
この項では、ワークシートを使用してSQL Developerで問合せを実行する方法を説明します。
注意:
ワークシートは問合せに限定されておらず、任意のSQL文の実行に使用できます。
SQL Developerにおいて問合せを実行するには、次の手順を実行します。
-
SQL Developerの右側のフレームに、hr_connペインが表示されます。
-
「ワークシート」サブペインが表示されない場合は、「ワークシート」タブをクリックします。
-
手順4に進みます。
-
-
「SQLワークシート」アイコンをクリックします。
-
「接続の選択」ウィンドウが開かれた場合は、次のようにします。
-
「接続」 フィールドの値が
hr_conn
ではない場合は、メニューからその値を選択します。 -
「OK」をクリックします。
ペインに、hr_connというラベルのタブと、「ワークシート」および「クエリー・ビルダー」という2つのサブペインが表示されます。ワークシートにはSQL文を入力できます。
-
-
ワークシートに問合せ(SELECT文)を入力します。
-
「文の実行」アイコンをクリックします。
問合せが実行されます。ワークシートの下に「問合せ結果」 ペインが表示され、問合せの結果が表示されます。
-
「hr_conn」タブの下で、「クリア」アイコンをクリックします。
問合せが消去され、ワークシートに別のSQL文を入力できます。別のSQL文を実行すると、その結果が前に実行したSQL文の結果のかわりに「問合せ結果」ペインに表示されます。
関連項目:
SQL Developerでのワークシートの使用の詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
親トピック: 表データの選択
2.6.3 チュートリアル: 表のすべての列の選択
このチュートリアルは、EMPLOYEES表の列を選択する方法を示します。
EMPLOYEES表のすべての列を選択するには、次の手順を実行します。
注意:
パスワードやクレジット・カード情報などの機密データを保存する列が含まれる表でSELECT *を使用する場合は十分に注意してください。
関連項目:
SQL Developerで表データを表示する他の方法の詳細は、「チュートリアル: SQL DeveloperによるEMPLOYEES表のプロパティとデータの表示」を参照してください。
親トピック: 表データの選択
2.6.4 チュートリアル: 表の特定の列の選択
このチュートリアルでは、EMPLOYEES表のFIRST_NAME列、LAST_NAME列およびDEPARTMENT_ID列のみを選択する方法を示します。
FIRST_NAME、LAST_NAMEおよびDEPARTMENT_IDのみを選択するには、次の手順を実行します。
親トピック: 表データの選択
2.6.5 新規のヘッダーの下での選択された列の表示
問合せ結果を表示する際のデフォルトの列ヘッダーは、列の名前です。新規のヘッダーの下に列が表示されるようにするには、列名の直後に新規のヘッダー(別名)を指定します。別名により、問合せの期間に対する列名が変更されますが、データベース内の対応する名前は変更されません。
例2-5の問合せは、「チュートリアル: 表の特定の列の選択」の問合せと同じ列を選択しますが、列の別名も指定します。別名が二重引用符で囲まれていないので、大文字で表示されます。
列の別名を二重引用符で囲むと、例2-6のように、大/小文字の区別が保持され、別名に空白を使用することも可能です。
関連項目:
列の別名(c_alias)を含むSELECT文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例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 列の別名における大/小文字の区別の保持および空白の使用
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.
親トピック: 表データの選択
2.6.6 指定された条件を満たすデータの選択
指定された条件に一致するデータのみを選択するには、SELECT文にWHERE句を含めます。
WHERE句には、任意のSQL条件を使用できます(SQL条件の詳細は、『Oracle Database SQL言語リファレンス』を参照してください)。
例2-7の問合せは、部門90に所属する従業員のデータのみを選択します。
部門100、110および120の従業員のデータのみを選択する場合は、このWHERE句を使用します。
WHERE DEPARTMENT_ID IN (100, 110, 120);
例2-8の問合せは、姓が「Ma」で始まる従業員のデータのみを選択します。
姓にmaが含まれる従業員のデータのみを選択する場合は、このWHERE句を使用します。
WHERE LAST_NAME LIKE '%ma%';
例2-9の問合せは、給与が少なくとも11000であり、かつ歩合率がNULLではないという2つの条件をテストします。
関連項目:
-
WHERE句を含むSELECT文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
SQL条件の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例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.
例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.
例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.
親トピック: 表データの選択
2.6.7 選択されたデータのソート
問合せの結果を表示する場合に、ORDER BY句で順序を指定しないと、レコードは任意の順序になります。
例2-10の問合せの結果は、LAST_NAME
を基準に昇順(デフォルト)でソートされます。
また、SQL Developerでは、ORDER BY句を省略し、列の名前をダブルクリックしてソートすることもできます。
例2-11に示すように、ソート基準を選択リストに含める必要はありません。
関連項目:
ORDER BY句を含むSELECT文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例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 選択対象ではない列による選択されたデータのソート
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.
親トピック: 表データの選択
2.6.8 複数の表からのデータの選択
複数の表からデータを選択するには、結合と呼ばれる問合せを使用します。結合の表は少なくとも1つの列名を共有している必要があります。
すべての従業員のFIRST_NAME、LAST_NAMEおよびDEPARTMENT_NAMEを選択する場合を考えます。FIRST_NAMEおよびLAST_NAMEはEMPLOYEES表にあり、DEPARTMENT_NAMEはDEPARTMENTS表にあります。どちらの表にもDEPARTMENT_IDがあります。この場合、例2-12の問合せを使用できます。
表名の修飾子は、結合の一方の表にしかない列名ではオプションですが、両方の表にある列名では必須です。次の問合せは、例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言語リファレンス』を参照してください。
例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.6.9 問合せにおける演算子およびファンクションの使用
問合せのselect_listには、SQL演算子およびSQLファンクションを含むSQL式が含まれます。これらの演算子およびファンクションは、オペランドおよび引数として表データを持つことが可能です。SQL式を評価して、得られた値が問合せの結果に表示されます。
- 問合せにおける算術演算子の使用
基本的な算術演算子として+(加算)、-(減算)、*(乗算)および/(除算)を列値で操作します。 - 問合せにおける数値ファンクションの使用
数値ファンクションは、数値入力を受け取り、数値を返します。各数値ファンクションは、評価される各行に対し、値を1つ返します。 - 問合せにおける連結演算子の使用
連結演算子(||
)は、2つの文字列の2つ目を1つ目の文字列に追加して1つの文字列にします。たとえば、'a'||'b'='ab'
となります。この演算子を使用すると、2つの列または式の情報を問合せ結果の同じ列の中に結合できます。 - 問合せにおける文字ファンクションの使用
文字ファンクションは、文字入力を受け取ります。多くは文字の値を返しますが、数値を返すものもあります。各文字ファンクションは、評価される各行に対し、値を1つ返します。 - 問合せにおける日付ファンクションの使用
日時ファンクションは、DATE、タイムスタンプ、間隔の値を操作します。各日付ファンクションは、評価される各行に対し、値を1つ返します。 - 問合せにおける変換ファンクションの使用
変換ファンクションは、あるデータ型を他のデータ型に変換します。 - 問合せにおける集計ファンクションの使用
集計ファンクションは、行のグループを取得し、単一の結果行を返します。行のグループは表またはビュー全体です。 - 問合せにおけるNULL関連ファンクションの使用
NULL関連ファンクションは、NULL値の処理を容易にします。 - 問合せにおけるCASE式の使用
CASE式を使用すると、サブプログラムを呼び出すことなく、SQL文でIF ... THEN ... ELSE論理を使用できます。CASE式には、単純と検索の2種類あります。 - 問合せにおけるDECODEファンクションの使用
DECODEファンクションは、式といくつかの検索値と比較します。式の値が検索値に一致すると、DECODEは、検索値に関連付けられている結果を返します。DECODEが一致を検出しない場合、デフォルト値(指定されている場合)またはNULL(デフォルト値が指定されていない場合)が返されます。
関連項目:
-
SQL演算子の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
SQLファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: 表データの選択
2.6.9.1 問合せにおける算術演算子の使用
基本的な算術演算子として+(加算)、-(減算)、*(乗算)および/(除算)を列値で操作します。
例2-13の問合せは、部門90に所属する各従業員のLAST_NAME、SALARY(月給)および年間賃金を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
親トピック: 問合せにおける演算子およびファンクションの使用
2.6.9.2 問合せにおける数値ファンクションの使用
数値ファンクションは入力として数値を受け取り、結果として数値を戻します。各数値ファンクションは、評価される各行に対し、値を1つ返します。
SQLでサポートされる数値ファンクションのリストと説明は、Oracle Database SQL言語リファレンスに記載されています。
例2-14の問合せは、数値ファンクションROUND
を使用して、部門100の各従業員の日給を1セント未満は四捨五入して表示します。
例2-15の問合せは、数値ファンクションTRUNC
を使用して、部門100の各従業員の日給を1ドル未満は切り捨てて表示します。
関連項目:
SQL数値ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例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 数値データの切捨て
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.
親トピック: 問合せにおける演算子およびファンクションの使用
2.6.9.3 問合せにおける連結演算子の使用
連結演算子(||
)は、1番目の文字列に2番目の文字列を追加することによって、2つの文字列を1つに結合します。たとえば、'a'||'b'='ab'
となります。この演算子を使用すると、2つの列または式の情報を問合せ結果の同じ列の中に結合できます。
例2-16の問合せでは、選択した各従業員の名、スペースおよび姓を連結します。
関連項目:
連結演算子の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例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.
親トピック: 問合せにおける演算子およびファンクションの使用
2.6.9.4 問合せにおける文字ファンクションの使用
文字ファンクションは、文字の入力を受け取ります。多くは文字の値を返しますが、数値を返すものもあります。各文字ファンクションは、評価される各行に対し、値を1つ返します。
SQLでサポートされる文字ファンクションのリストと説明は、Oracle Database SQL言語リファレンスに記載されています。
UPPER、INITCAPおよびLOWERファンクションは文字引数をそれぞれ、すべて大文字、頭文字のみ大文字および、すべて小文字で表示します。
例2-17の問合せは、LAST_NAMEを大文字で、FIRST_NAMEは頭文字を大文字で他は小文字で、EMAILを小文字で表示します。
関連項目:
SQL文字ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例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.
親トピック: 問合せにおける演算子およびファンクションの使用
2.6.9.5 問合せにおける日付ファンクションの使用
日時ファンクションは、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 SQL言語リファレンス』を参照してください。
TIMESTAMPデータ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
その他のタイムスタンプ・データ型および間隔データ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例2-18の問合せは、EXTRACTおよびSYSDATEファンクションを使用して、部門100の各従業員が何年間雇用されているかを表示します。SYSDATEファンクションは、システム・クロックの現在日時をDATE値として返します。SYSDATEファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。EXTRACTファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例2-19の問合せは、SYSTIMESTAMPファンクションを使用して、現在のシステム日付と時間を表示します。SYSTIMESTAMPファンクションは、TIMESTAMP値を返します。SYSTIMESTAMPファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
問合せのFROM句内のDUAL表は、Oracle Databaseがデータ・ディクショナリとともに自動的に作成する1行の表です。 SELECT文を使用して定数式を計算する場合は、DUALから選択します。 DUALには行が1つしかないため、定数が返されるのは1回のみです。DUALからの選択の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
関連項目:
SQL日付ファンクションの詳細は、『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 システム日付および時間の表示
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
親トピック: 問合せにおける演算子およびファンクションの使用
2.6.9.6 問合せにおける変換ファンクションの使用
変換ファンクションは、あるデータ型を別のデータ型に変換します。
SQLでサポートされる変換ファンクションのリストと説明は、Oracle Database SQL言語リファレンスに記載されています。
例2-20の問合せは、TO_CHARファンクションを使用して、HIRE_DATE値(DATE型)をFMMonth DD YYYY
書式の文字値に変換します。 FM
は、月名から先頭と末尾の空白を削除します。FMMonth DD YYYY
は、日付時間書式モデルの一例です。日付時間書式モデルの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例2-21の問合せは、TO_NUMBERファンクションを使用して、POSTAL_CODE値(VARCHAR2型)を、計算で使用するNUMBER型の値に変換します。
関連項目:
-
SQL変換ファンクションの詳細は、『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 文字列から数値への変換
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.
親トピック: 問合せにおける演算子およびファンクションの使用
2.6.9.7 問合せにおける集計ファンクションの使用
集計ファンクションは、行のグループを取得し、単一の結果行を返します。行のグループは表またはビュー全体です。
SQLでサポートされる集計ファンクションのリストと説明は、Oracle Database SQL言語リファレンスに記載されています。
集計ファンクションは、1つまたは複数の列ごとに問合せ結果をグループ化するGROUP BY句を各グループの結果ともに使用する場合に、特に有効です。
例2-22の問合せは、COUNTファンクションおよびGROUP BY句を使用して、各マネージャに対してレポートする人数を表示します。ワイルドカード文字*は、レコード全体を表します。
例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-24の問合せは、複数の集計ファンクションを使用して、各JOB_IDの給与の統計を表示します。
関連項目:
SQL集計ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例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-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 統計情報を得るための集計ファンクションの使用
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.
親トピック: 問合せにおける演算子およびファンクションの使用
2.6.9.8 問合せにおけるNULL関連ファンクションの使用
NULL関連ファンクションは、NULL値の処理を容易にします。
SQLがサポートするNULL関連ファンクションのリストと説明については、『Oracle Database SQL言語リファレンス』を参照してください。
例2-25の問合せは、姓がBで始まる従業員の姓と歩合を返します。従業員が歩合を受け取らない場合(つまり、COMMISSION_PCTがNULLの場合)、NVLファンクションは、NULLを"Not Applicable"で置換します。
例2-26の問合せは、NVL2ファンクションを使用して、姓がBで始まる従業員の姓、給与および収入を返します(COMMISSION_PCTがNULLでない場合、収入は給与と歩合の合計であり、COMMISSION_PCTがNULLの場合、収入は給与のみです)。
関連項目:
-
NVLファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
NVL2ファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例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 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.
親トピック: 問合せにおける演算子およびファンクションの使用
2.6.9.9 問合せにおけるCASE式の使用
CASE式を使用すると、サブプログラムを呼び出すことなく、SQL文でIF ... THEN ... ELSE論理を使用できます。CASE式には、単純と検索の2種類あります。
例2-27の問合せは、単純CASE式を使用し、各国コードの国名を表示します。
例2-28の問合せは、検索CASE式を使用して、勤続年数に基づいて推奨される給与の値上げ(15%、10%、5%または0%)を表示します。
関連項目:
-
CASE式の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
CASE式の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
例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式の使用
SELECT LAST_NAME "Name",
HIRE_DATE "Started",
SALARY "Salary",
CASE
WHEN HIRE_DATE < TO_DATE('01-Jan-03', 'dd-mon-yy')
THEN TRUNC(SALARY*1.15, 0)
WHEN HIRE_DATE >= TO_DATE('01-Jan-03', 'dd-mon-yy') AND
HIRE_DATE < TO_DATE('01-Jan-06', 'dd-mon-yy')
THEN TRUNC(SALARY*1.10, 0)
WHEN HIRE_DATE >= TO_DATE('01-Jan-06', 'dd-mon-yy') AND
HIRE_DATE < TO_DATE('01-Jan-07', '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 9020 Sciarra 30-SEP-05 7700 8470 Urman 07-MAR-06 7800 8190 Popp 07-DEC-07 6900 6900 6 rows selected.
親トピック: 問合せにおける演算子およびファンクションの使用
2.6.9.10 問合せにおけるDECODEファンクションの使用
DECODEファンクションは、式といくつかの検索値と比較します。式の値が検索値に一致すると、DECODEは、検索値に関連付けられている結果を返します。DECODEが一致を検出しない場合、デフォルト値(指定されている場合)またはNULL(デフォルト値が指定されていない場合)が返されます。
例2-29の問合せは、DECODEファンクションを使用して、3つの異なる役職に対して推奨される給与の値上げを表示します。式はJOB_ID、検索値は'PU_CLERK'、'SH_CLERK'、'ST_CLERK'、およびデフォルト値はSALARYです。
注意:
DECODEファンクションの引数は、任意のSQL数値型または文字型です。式および各検索値は、比較の前に最初の検索値のデータ型に自動的に変換されます。戻り値は、最初の結果と同じデータ型に自動的に変換されます。最初の結果がデータ型CHARの場合、または最初の結果がNULLの場合、戻り値はデータ型VARCHAR2に変換されます。
関連項目:
-
DECODEファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
例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.
親トピック: 問合せにおける演算子およびファンクションの使用