SQLSELECTステートメント
SQLSelectステートメントを使用したデータの取得
SQLは包括的なデータベース言語です。SQLは、Sequelまたは単にSQLと発音され、非手続き型アプローチに従ってリレーショナルデータベースをクエリするために使用されるコンピュータープログラミング言語です。SQLを使用してデータベースから情報を抽出する場合、これはデータベースのクエリと呼ばれます。
リレーショナルデータベースは、リレーショナルデータベース管理システム(RDBMS)を使用して実装されます。RDBMSは、上記のDBMSソフトウェアのすべての基本機能と、リレーショナルモデルの理解と実装を容易にする他の多数の機能を実行します。RDBMSユーザーは、特別なデータ操作言語を使用してデータを操作します。データベース構造は、データ定義言語を使用して定義されます。システムユーザーがデータを保存および取得するために実行するコマンドは、コマンドを入力してRDBMSインターフェイスを備えた端末で入力するか、ある種のグラフィカルインターフェイスを使用して入力できます。次に、DBMSがコマンドを処理します。
SELECTステートメントの機能
データベースからのデータ取得は、SQLを適切かつ効率的に使用することで行われます。関係理論の3つの概念には、SELECTステートメントの機能が含まれます。それは、射影、選択、および結合です。
射影:プロジェクト操作は、テーブルから特定の列(フィールド)のみを選択します。結果テーブルには、使用可能な列のサブセットがあり、単一の列から使用可能なすべての列まで、あらゆるものを含めることができます。
選択:選択操作は、選択条件を満たすテーブル(関係)内の行(レコード)のサブセットを選択します。完全な結果セットから行を選択する機能は、選択と呼ばれます。これには、条件付きフィルタリングとデータステージングが含まれます。サブセットの範囲は、行がない場合(選択条件を満たす行がない場合)から、テーブル内のすべての行までです。
結合:結合操作は、1つ以上の共通の列値に基づいて2つ以上のテーブルからのデータを結合します。結合操作により、情報システムユーザーはテーブル間に存在する関係を処理できます。結合操作は、システムユーザーがデータベースの設計時に予期されなかった可能性のあるデータ要素間の関係を調査できるため、非常に強力です。
上記のテーブル構造を検討してください。EMPLOYEESテーブルから1人の従業員の名、department_id、および給与を取得するのは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句はオプションであり、リレーショナル選択操作を実行します。選択する行を指定します。
GROUPBY句はオプションです。SELECT句にリストされている1つ以上の列名によってデータをグループに編成します。
オプションのHAVING句は、結果テーブルに含めるグループに関する条件を設定します。グループは、GROUPBY句で指定されます。
ORDERBY句はオプションです。クエリ結果を1つ以上の列で昇順または降順で並べ替えます。
SELECTステートメントの算術式とNULL値
列名、演算子、および定数値を使用して算術式を作成し、SELECTステートメントに式を埋め込むことができます。列に適用できる演算子は、列のデータ型によって異なります。たとえば、算術演算子は文字リテラル値には適合しません。例えば、
SELECT employee_id, sal * 12 ANNUAL_SAL
FROM employees;
上記のクエリには、各従業員の年俸を計算するための算術式(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値の列は、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プロパティ、およびデータ型が一覧表示されます。
Syntax:
DESC[RIBE] [SCHEMA].object name
例えば、
DESC EMPLOYEE
EMPLOYEEテーブル構造、つまり列、それらのデータ型、精度、およびnull許容プロパティを表示します。