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文について、
学びました。次回は少しづつ応用のコマンドもご紹介していきます。