トップ > SQL入門 > 1章
1章 基本的な問い合わせ

SELECTの機能


それでは最初はSQL文のSELECT文について学んでいきます。

SELECT文は表からデータを取り出す際に使用するSQL文です。

SELECT文の大きな機能としては以下の通りです。

・射影
・選択
・結合

射影は特定の列を取り出す機能で、選択は特定の行を取り出す機能です。
結合は複数の表からデータを取り出す機能です。
大した内容ではありませんが、試験を受ける方は抑えていた方が良いです。

それではまず射影の構文を確認してきましょう。

[構文] 1列のデータ取得
SELECT 列名
FROM 表名;

SELECT句には取得したい列名、FROM句には、取得したい表名を指定します。
そしてSQL文の最後には、終了を表すセミコロン(;)が必要です。
複数列を取り出す場合は以下の書き方となります。

[構文] 複数列のデータ取得
SELECT 列名, 列名, 列名
FROM 表名;

すべての列を表示したい場合は、上記の書き方ですべての列を指定してもいいですが、
以下の書き方でもすべての列を取り出すことができます。

[構文] すべての列のデータ取得
SELECT *
FROM 表名;

SQLの書き方と列のデータ型


SQL文の書き方は、例のように複数行で書くこともできますが、1行で書くこともできます。
ただしSELECT,FROMや列名などのキーワードは1行に書く必要があります。
キーワード途中で区切ってしまうと、文法エラーとなってしまいます。

またSQL文の大文字小文字の区別はありません。
たとえば、SELECTとsELEctは同じ文字として扱われます。

そして、表に格納される値のデータ型は大きく3つのタイプがあります。

・文字
・数値
・日付

文字データはシングルバイト(A-Z[a-z],0-9)やマルチバイト(ひらがな、漢字)
を格納することができます。
格納されている文字は大文字小文字は区別されます。

数値データは数値(0-9)を格納することができます。

日付データは日付を格納することができます。

日付データの書式(表示形式)はデータベースで定義されており、
環境がAmericanの場合の、日付書式はDD-MON-RRとなります。
DDは日にち、MONは英語の月先頭3文字、RRは西暦下2ケタです。

では実行例を見ていきましょう。

  SQL> SELECT first_name,salary,hire_date FROM employees;
  
  FIRST_NAME                         SALARY HIRE_DATE
  ------------------------------ ---------- ---------
  Suzuki                           10000000 07-OCT-92
  Sato                              8000000 11-OCT-92
  Yamamoto                          5000000 11-MAR-95
  Watanabe                          6000000 01-APR-98
  Watanabe                          5500000 14-MAY-98
  Kataoka                           6500000 01-OCT-00
  Harada                            6200000 01-OCT-00
  Koda                              6400000 01-OCT-00
  …
  20 rows selected.
  

今回はfirst_name,salary,hire_dateの列をemployees表から取得しています。
FIRSTNAMEは文字データ、SALARYは数値データ、HIRE_DATEは日付データですね。

では、次のSQL文を見てみましょう。
今回は会社の従業員のデータを表から取得する例を見てみます。

  SQL> select first_name,dept_id from employees;
  
  FIRST_NAME                        DEPT_I
  ------------------------------ ---------
  Suzuki                                  
  Sato                                   2
  Yamamoto                               1
  Watanabe                               1
  Watanabe                               5
  Kataoka                                4
  Harada                                 4
  Koda                                   4
  …
  20 rows selected.
  

次のSQL文の結果でDEPT_ID列を取り出しています。
DEPT_ID列は従業員が属する部門番号を格納しています。

Suzukiさんの行のDEPT_IDは何も表示されていません。
このように値が入っていない状態のことをNULL(ヌル)と言いいます。
空白や数字の0が格納されているものとは異なります。
空白とNULLは見た目見分けができませんが、意味合いは異なります。

SQL*Plusの機能でNULLを別の文字で表示したい場合は、以下の構文で表示できます。

[NULLの表示] 【SQL*Plusコマンド】
set null 表示したい文字


  SQL> set null TEST
  
  SQL> select first_name,dept_id from employees;
  
  FIRST_NAME                        DEPT_ID
  ------------------------------ ----------
  Suzuki                         TEST      
  Sato                                   20
  Yamamoto                               10
  Watanabe                               10
  Watanabe                               50
  Kataoka                                40
  Harada                                 40
  Koda                                   40
  …
  20 rows selected.


表示されましたね。
以上が基本的なSELECT構文となります。

SELECTの基本構文は分かったけど、自分が持っている表はどんなものがあって、
どんな列があるの?と思われると思います。
自分が所有している表一覧の表示は以下のSQL文で確認ができます。

[自分が所有するテーブルの一覧]
SELECT table_name FROM user_tables;

[表の定義確認] 【SQL*Plusコマンド】
DESC 表名

  SQL> desc employees
  
  Name                          Null?    Type
  ----------------------------- -------- ------------------
  EMP_ID                        NOT NULL NUMBER(10)
  FIRST_NAME                             VARCHAR2(30)
  LAST_NAME                              VARCHAR2(30)
  ADDRESS                                VARCHAR2(100)
  TEL                                    VARCHAR2(12)
  SALARY                                 NUMBER(30)
  HIRE_DATE                              DATE
  MANAGER_ID                             NUMBER(10)
  DEPT_ID                                NUMBER(10)
   

Nameとあるのが列名です。そして、Typeが各列のデータ型となります。
詳細は後ほど述べますが、以下が最も使用されるデータ型となります。

NUMBER 数値データ
VARCHAR2 文字データ
DATE 日付データ

とりあえずこのくらいを理解できていれば良いと思います。

ここまでSELECTの射影の機能をご覧いただきました。
そして今回このSQLを実行するツールはSQL*Plusというツールを使用しています。
SQL*PlusはOracleが提供しているSQL実行環境です。

またSQL文はANSIの規格となっており、Oracle以外のデータベースでも同じ構文で
実行することができます。
そのほかにSQL*Plus独自のコマンドもあり、このコマンドはSQL*Plus独自です。
たとえば、DESCコマンドや、SETコマンドがあります。
このコマンドはSQL*Plusコマンドです。
SQL*Plusコマンドはセミコロンを使用しなくても実行ができます。

いかがでしたでしょうか。SQL文のデータを取得するSELECT文について、
学びました。次回は少しづつ応用のコマンドもご紹介していきます。