【本サイトではGoogleアドセンス、または、アフィリエイト広告を利用しています。】
データの取得とシステムの関係
テーブル作成とレコード登録ができたら、次はデータの取得です!
データを取得する処理は、データベースを扱う上で最も重要な処理の1つです。
また、データの取得時間は、システムの使いやすさに直結します。
システムの動作が重たい、遅いと言われる要因の多くは、データベースからのデータ取得時間にあります。
ユーザー満足度の高いシステムを開発するためには、データの取得処理が重要なポイントになってくるのです。
テーブルからデータを取得する(SELECT~FROM~)
テーブルからデータを取得するSQLは以下です。
SELECT
[カラム名1]
, [カラム名2]
, [カラム名3]
, ・・・
FROM
[テーブル名];
SELECT句でカラムを指定して、FROM句でテーブルを指定します。
例として、表1のテーブルに、表2のデータが入っているとします。
また、表1の主キーは、クラス、出席番号で一意になるように設定します。
論理名 | 物理名 | データ型 | 主キー |
---|---|---|---|
クラス | CLASS_NO | CHAR(1) | 1 |
出席番号 | STUDENT_NO | NUMBER(3) | 2 |
名前 | NAME | VARCHAR2(30) | |
身長(cm) | HEIGHT | NUMBER(4,1) |
クラス | 出席番号 | 名前 | 身長(cm) |
---|---|---|---|
1 | 1 | ジョニー | 170.0 |
1 | 2 | ボビー | 198.0 |
1 | 3 | カレン | 157.0 |
2 | 1 | デキスギ | 150.0 |
2 | 2 | ノビタ | 145.0 |
2 | 3 | ホネカワ | 148.0 |
生徒の名前と身長をテーブルから取得する場合、以下のようなSQLになります。
SELECT
NAME
, HEIGHT
FROM
STUDENT;
実行結果は以下です。
このように、SELECT文を使うことで、テーブルに入っているデータから、
自分の取得したい情報だけを抜き出すことができます。
「*」(アスタリスク)で全列の情報を取得する
テーブルによっては数十列のカラムを持つテーブルもあります。
テーブルのすべての情報が欲しい時、SELECT句に1つ1つ書いていくのはかなり大変な作業です。
そんな時は、「*」(アスタリスク)を使うことでテーブルにあるすべての列を指定することができます。
先ほど例で使ったテーブルの全列を取得するSQLは以下のようになります。
SELECT
*
FROM
STUDENT;
実行結果は以下です。
取得される列の順番は、テーブルに定義されているカラムの順番に従います。
スキーマ名の指定について
ここまで説明してきたSELECT文のSQLですが、実は、少し構文を省略して記載されています。
え!なんで最初に言わないの?
それは、一気に説明するとややこしいからです。
テーブルは、自分のスキーマ内にだけあるわけではありません。
データベースの中には複数のスキーマを定義できるので、ログインしているユーザーにアクセスの権限さえあれば、
別のスキーマに定義されたテーブルも参照することができます。
別のスキーマに定義されたテーブルは、以下のように、
FROM句に指定するテーブル名の前にスキーマ名を付けることで参照できます。
SELECT
・・・
FROM
[スキーマ名].[テーブル名];
スキーマ名とテーブル名の接続文字には「.」(ドット)を使います。
そして、スキーマ名を省略した場合は、ログインしたユーザーのスキーマ名としてOracleに認識されます。
つまり、自分のスキーマ内に限ってデータ参照するだけであれば、スキーマ名を付ける必要がないわけです。
試しに先ほどの例にスキーマ名を付けて実行してみてください。
(例では、スキーマ名を「ITROAD」としています。)
SELECT
NAME
, HEIGHT
FROM
ITROAD.STUDENT;
先ほどと同じ結果が得られるはずです。
テーブル名の指定について
そしてそして、最初のSELECT文には、もう1つ、実は省略されている部分があります。
な、なぜ!もっと早く説明しないのか!
それは、当然、一気に説明するとややこしいからです。
テーブルのカラム名は、別のテーブルに同じ名前で存在する場合があります。
そんな時、2つのテーブルがFROM句に入っていると、
Oracleはどちらのテーブルからデータを取得すればよいのか判断できません。
その為、以下のように、カラム名の前にテーブル名を付加することで、
同名のカラムを判別して記載できるようになっています。
SELECT
[テーブル名].[カラム名1]
, [テーブル名].[カラム名2]
, ・・・
FROM
[テーブル名];
テーブル名とカラム名の接続文字には「.」(ドット)を使います。
試しに先ほどの例にテーブル名を付けて実行してみると同じ結果が得られます。
SELECT
STUDENT.NAME
, STUDENT.HEIGHT
FROM
STUDENT;
ということで、先ほどお話した内容とあわせて、
スキーマ名とテーブル名を省略せずに書くとSELECT文はこのようになります。
SELECT
[スキーマ名].[テーブル名].[カラム名1]
, [スキーマ名].[テーブル名].[カラム名2]
, ・・・
FROM
[スキーマ名].[テーブル名];
例を書き換えるとこんな感じです。
SELECT
ITROAD.STUDENT.NAME
, ITROAD.STUDENT.HEIGHT
FROM
ITROAD.STUDENT;
いずれも同じ結果になりますが、読みやすさや、メンテナンス性なども踏まえて、
省略すべきか、指定すべきか、状況によって判断して使い分けましょう!
エイリアスとは?
エイリアスとは、別名のことです。
Oracleでは、テーブル名やカラム名に別名をつけてデータを取得できます。
テーブル名やカラム名の中には、長かったり、難しい英単語を使っていたり、場合によっては、
「COL1」「COL2」などのように、カラム名を見ただけでは何のデータか判別できないものもあります。
そんな時にエイリアスを使うことで、
SQL作成の効率を上げたり、取得したデータの内容を読み取りやすくすることができます。
テーブルに別名を付けてデータを取得する
まずは、テーブルに別名を付ける方法です。
SELECT
[エイリアス].[カラム名1]
, [エイリアス].[カラム名2]
, [エイリアス].[カラム名3]
, ・・・
FROM
[テーブル名](半角スペース)[エイリアス];
FROM句に指定するテーブル名の後ろにエイリアスを指定します。
テーブル名とエイリアスの間は「 」(半角スペース)で区切ってください。
また、カラムに設定するテーブル名の指定にも、エイリアスを使うことができます。
カラムに別名を付けてデータを取得する
次に、カラム名に別名を付ける方法です。
SELECT
[カラム名1] AS [エイリアス1]
, [カラム名2] AS [エイリアス2]
, [カラム名3] AS [エイリアス3]
, ・・・
FROM
[テーブル名];
SELECT句に指定するカラム名の後ろにエイリアスを指定します。
カラム名とエイリアスの間は「AS」、または、「 」(半角スペース)で区切ります。
カラムのエイリアスは、SQLの結果に反映されます。
(詳細は以下のサンプルで確認してください。)
エイリアスの使用例
先ほどの例に、テーブル名、カラム名のエイリアスをそれぞれ適用するとこのような感じです。
SELECT
ST.CLASS_NO AS CN
, ST.STUDENT_NO AS SN
, ST.NAME AS NM
, ST.HEIGHT AS HT
FROM
STUDENT ST;
実行結果は以下です。
実行結果の列名がエイリアス名になってますね!
このように、データを抜き出して結果を整理するような場合にエイリアスを使うと非常に役立ちます。
SELECT文の使い方 まとめ
OracleのSELECT文の使い方について以下説明しました。
今回お伝えした内容は、SELECT文の基礎です。
ここから、さらに構文を追加することで、複数のテーブルを組み合わせた複雑なデータを取得することができます。
次回は、WHERE句を使った条件の指定についてお話をします!