OracleBronze 2章

SELECT文の基本

「射影」「選択」「結合」の3つの機能を使用してデータ抽出を行います。

項目 説明
射影 特定の列のみを取り出す
選択 特定の行のみを取り出す
結合 複数の表(テーブル)を関連付けてデータを抽出

SELECTの基本形を覚えておきましょう。

SELECT [何を] FROM [どのテーブルから];

SQL文はキリのいいところで改行できます。
基本的には大文字小文字の区別がありません。などの特徴もあります。

この後で、SELECT文を書いていきますが、下図がテーブルと格納データだと思って読んで下さい。実行環境においてあるデータも同じものです。

 

射影

select区に取り出したい列名を指定します。複数指定はカンマ区切り、全て指定はアスタリスクです。

SELECT empno, ename FROM EMPLOYEES;
SELECT * FROM EMPLOYEES;

列名指定をするにはどんな構造になっているか知らないと出来ませんよね。

それを知るためには、DESCRIBE(DESC)を使います。

DESCRIBE テーブル名;
DESC テーブル名;

実行すると項目名と型などが表示されたと思います。

ついでなので、基本的なデータ型を覚えておきましょう。

分類 データ型 説明
文字 VARCHAR2(サイズ) 可変長の文字データ。
VARCHAR2(10)とした場合、最大10バイトまでの文字列を格納できる
文字 CHAR(サイズ) 固定長の文字データ
CHAR(10)とした場合に、3バイトの文字列を格納すると残りのバイト数を半角スペースで埋める
数値 NUMBER(p,s) 数値データ
NUMBER(4)なら4桁
NUMBER(4,2)なら、全体4桁で小数点以下2桁、つまり12,34という形式
日付 DATE 日付及び時刻を含む日付データ

算術式の使用

所謂四則演算が使えます。
計算の優先順位は算数のままです。
()も使えます。
算術式にNULLが含まれると結果がNULLになってしまうので要注意です。

例にするとこんな感じです。

SELECT empno ,ename ,sal ,sal * 12 FROM EMPLOYEES;

 

列別名

例えば、上記のsal(月給)に12を掛けている式、つまり年収ですよね。
ですが、表示上は【sal*12】とそのままになってしまいます。
別名を付けたいですよね。年収、と。

SELECT 列名 列別名, 算術式 列別名・・・ FROM テーブル名;
または
SELECT 列名 AS 列別名, 算術式 AS 列別名・・・ FROM テーブル名;

 

重複行の排除

EMPLOYEESテーブルからJOBだけを抽出すると、営業とか部長とかが複数表示されると思います。「同じものは表示されなくていい!」というケースはDISTINCTを使います。

SELECT DISTINCT 列名 FROM テーブル名;

 

ちなみに、、、

SELECT DISTINCT 列名1, 列名2 FROM テーブル名;

この場合は、どうなると思います?
列名1と列名2の組み合わせが一意になるレコードのみが抽出されます。

 

以下をやっておきましょう。

・EMPLOYEESから全てのレコードを表示
・EMPLOYEESのテーブル情報を表示
・EMPLOYEESからempno, enameのみを抽出
・EMPLOYEESからJOBを重複行削除で抽出
・EMPLOYEESからDEPTNOとJOBで一意になるレコードのみ抽出