Sql-certificate-the-sql-select-statement

提供:Dev Guides
移動先:案内検索

SQL SELECTステートメント

SQL Selectステートメントを使用したデータの取得

SQLは包括的なデータベース言語です。 Sequelまたは単にS-Q-Lと発音されるSQLは、非手続き型アプローチに従ってリレーショナルデータベースを照会するために使用されるコンピュータープログラミング言語です。 SQLを使用してデータベースから情報を抽出するとき、これはデータベースのクエリと呼ばれます。

リレーショナルデータベースは、リレーショナルデータベース管理システム(RDBMS)を使用して実装されます。 RDBMSは、リレーショナルモデルの理解と実装を容易にする他の多数の機能とともに、上記のDBMSソフトウェアのすべての基本機能を実行します。 RDBMSユーザーは、特別なデータ操作言語を使用してデータを操作します。 データベース構造は、データ定義言語を使用して定義されます。 データを保存および取得するためにシステムユーザーが実行するコマンドは、コマンドを入力してRDBMSインターフェイスを備えた端末に入力するか、何らかのグラフィカルインターフェイスを使用して入力できます。 その後、DBMSはコマンドを処理します。

SELECTステートメントの機能

データベースからのデータ取得は、SQLを適切かつ効率的に使用することで行われます。 関係理論の3つの概念には、SELECTステートメントの機能が含まれます。射影、選択、および結合です。

  • 投影:プロジェクト操作は、テーブルから特定の列(フィールド)のみを選択します。 結果表には、使用可能な列のサブセットがあり、単一の列から使用可能なすべての列までのすべてを含めることができます。
  • 選択:選択操作は、選択条件を満たすテーブル(リレーション)内の行(レコード)のサブセットを選択します。 完全な結果セットから行を選択する機能は、選択と呼ばれます。 条件付きフィルタリングとデータのステージングが含まれます。 サブセットは、選択条件を満たさない行がない場合は、行が存在しないことから、テーブル内のすべての行に及ぶことができます。
  • 結合:結合操作は、1つ以上の一般的な列値に基づいて2つ以上のテーブルのデータを結合します。 結合操作により、情報システムのユーザーは、テーブル間に存在する関係を処理できます。 結合操作は非常に強力です。これは、システムユーザーが、データベースの設計時には予期されていなかったデータ要素間の関係を調査できるためです。

EMPLOYEESとDEPARTMENTSテーブルの結合シナリオ

上記のテーブル構造を考慮してください。 EMPLOYEES表からの単一従業員のfirst_name名、department_idおよびsalaryのフェッチはProjectionです。 EMPLOYEESテーブルから給与が5000未満の従業員の詳細を取得するのは選択です。 EMPLOYEESとDEPARTMENTSを結合して、従業員の名、部門名を取得しています。

基本的なSELECTステートメント

SELECTステートメントの基本的な構文を以下に示します。

SELECT  [DISTINCT | ALL] { *| select_list}
FROM {table_name [alias] | view_name}
    [{table_name [alias]  | view_name}]...
[WHERE  condition]
[GROUP BY  condition_list]
[HAVING  condition]
[ORDER BY  {column_name | column_#  [ ASC | DESC ] } ...

SELECT句は必須であり、リレーショナルプロジェクト操作を実行します。

FROM句も必須です。 結果テーブルに表示される列データを取得する1つまたは複数のテーブルやビューを識別します。

WHERE句はオプションであり、リレーショナル選択操作を実行します。 どの行を選択するかを指定します。

GROUP BY句はオプションです。 SELECT句にリストされた1つ以上の列名によって、データをグループに編成します。

オプションのHAVING句は、結果テーブルに含めるグループに関する条件を設定します。 グループはGROUP BY句で指定されます。

ORDER BY句はオプションです。 クエリ結果を1つ以上の列で昇順または降順に並べ替えます。

SELECTステートメントの算術式とNULL値

列名、演算子、および定数値を使用して算術式を作成し、SELECTステートメントに式を埋め込むことができます。 列に適用できる演算子は、列のデータ型によって異なります。 たとえば、算術演算子は文字リテラル値には適合しません。 例えば、

SELECT employee_id, sal* 12 ANNUAL_SAL
FROM employees;

上記のクエリには、各従業員の年salを計算する算術式(sal * 12)が含まれています。

算術演算子

演算子は、列(オペランド)に作用して、異なる結果をもたらします。 式に複数の演算子がある場合、評価の順序は演算子の優先順位によって決定されます。 優先順位の基本的なルールは次のとおりです-

  • 乗算と除算は、加算と減算の前に発生します。
  • 同じ優先順位の演算子は、左から右に評価されます。 *演算子のデフォルトの動作をオーバーライドするには、parethesesを使用します。

以下の表は、このような場合の演算子の優先順位を示しています。 優先レベル演算子の記号操作

Description   Operator    Precedence
Addition    +   Lowest
Subtraction -   Lowest
Multiplication * Medium
Division   /  Medium
Brackets    ( ) Highest

以下のクエリ(a)、(b)、および(c)を調べます

  • {ブランク}
SQL> SELECT 2*35 FROM DUAL;
  • {ブランク}
SQL> SELECT salary + 1500 FROM employees;
  • {ブランク}
SQL> SELECT first_name, salary, salary + (commission_pct *salary) FROM employees;

クエリ(a)は2つの数値を乗算し、(b)はすべての従業員の給与に$ 1500を加算することを示しています。 クエリ(c)は、従業員の給与へのコミッションコンポーネントの追加を示しています。 優先順位に従って、最初の手数料は給与に基づいて計算され、その後給与に加算されます。

列エイリアス

エイリアスは、表示中に列または式の名前を変更するために使用されます。 列または式のエイリアスは、クエリの出力の見出しとして表示されます。 SELECTクエリの長​​い式に意味のある見出しを付けるのに役立ちます。 デフォルトでは、エイリアスはクエリ出力にスペースなしで大文字で表示されます。 この動作を無効にするには、エイリアスを二重引用符で囲み、エイリアス名の大文字と小文字を保持する必要があります。

SELECT price* 2 as DOUBLE_PRICE, price * 10 "Double Price"
FROM products;

DOUBLE_PRICE    Double Price
------------    ------------
39.9            39.9
60          60
51.98           51.98

連結演算子

連結演算子を使用して、SELECTクエリの2つの文字列値または式を結合できます。 二重の縦線記号は、文字列連結演算子として使用されます。 これは、新しい文字式を生成する文字列値と文字列列値にのみ適用されます。 例

SQL> SELECT 'ORACLE'||' CERTIFICATION' FROM dual;

上記のクエリは、2つの文字リテラル値の連結を示しています。

リテラル

SELECT句でデータベースに保存されていないハードコードされた値は、リテラルとして知られています。 数値、文字、または日付の値を指定できます。 文字と日付の値は引用符で囲む必要があります。 以下のSQLクエリを検討してください。SQLクエリで異なるデータ型のリテラルを使用する例。

以下のクエリでは、2つの文字リテラルを使用してそれらを結合します。

SQL> SELECT 'ORACLE'||' CERTIFICATION' FROM DUAL

以下のクエリは、文字リテラルを使用して従業員の給与をきれいに出力します。

SQL> SELECT first_name ||'earns'|| salary||' as of '|||sysdate
FROM employees

引用演算子

引用演算子を使用して、独自の引用符区切り文字を指定します。 データに依存する便利な区切り文字を選択できます。

SELECT  department_name|| ' Department' ||q'['s Manager Id: ]'|| manager_id
FROM departments;

NULL

列に明確な値がない場合は、NULLと見なされます。 NULL値は、不明または使用不可を示します。 数値ではゼロではなく、文字値では空白ではありません。

NULL値を持つ列は、SELECTクエリで選択でき、算術式の一部にすることができます。 NULL値を使用する算術式はすべてNULLになります。 このため、NULL値を持つ列は、NVLやNULLIFなどのOracle提供の関数を使用して代替値を指定することにより、異なる方法で処理する必要があります。

SQL> SELECT NULL + 1000 NUM
FROM DUAL;

NUM
--------

DISTINCTキーワード

データの結果が重複することが予想される場合は、DISTINCTキーワードを使用して重複を排除し、クエリ出力で一意の結果のみを表示します。 選択された列のみが複製のために検証され、行はクエリ出力から論理的に削除されます。 注意するために、DISTINCTキーワードはSELECT句の直後になければなりません。

次の簡単なクエリは、DISTINCTを使用して、EMPLOYEESテーブルから一意の部門IDを表示する方法を示しています。

SQL> SELECT DISTINCT DEPARTMENT_ID
FROM employees;

DEPARTMENT_ID
---------------
10
20
30
40

DESCRIBEコマンド

テーブルの構造メタデータは、DESCRIBEコマンドを使用して、テーブルを構成する列のリストをデータベースに照会することで取得できます。 使用される列名、それらのnullプロパティ、およびデータ型がリストされます。

構文:

DESC[RIBE] [SCHEMA].object name

例えば、

DESC EMPLOYEE

EMPLOYEEテーブル構造、つまり 列、そのデータ型、精度、null許容プロパティ。