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