- 5.1. SELECT によるデータの参照
- 5.2. 条件付き参照
- 1. 不等式を使った述語
- 2. ブール演算子を使った述語
- 5.3. 特殊演算子
- 1. IN 演算子
- 2. BETWEEN 演算子
- 3. LIKE 演算子
- 4. IS NULL 演算子
- 5.4. 集約関数
- 5.5. グループ化
- 1. GROUP BY 句
- 2. HAVING 句
- 5.6. 並べ替えと名前付け
5.3.3. LIKE 演算子
LIKE 演算子は、テキスト文字列データ型からサブ文字列を検索するものです。テキスト列を検索して、ある文字列と一致する部分があるかどうか確認します。LIKE はそのためにワイルドカードを使用します。ワイルドカードとは、何かと一致する特殊な文字です。LIKE に使用するワイルドカードには次の 2つがあります。
- アンダスコア記号(_)
- 1 文字に相当する。たとえば、'b_t' は 'bat' や 'bit' とは一致するが、'brat' とは一致しない。
- パーセント記号(%)
- 任意数 (0 文字を含む) の連続した文字に相当する。'%p%t' は 'put'、'posit'、'opt' とは一致するが、'spite' とは一致しない。
ここで、LIKE 演算子を用いたデータの参照のサンプルのために、新たにテーブルを定義し、データを入力したものを用意します。
顧客表顧客コード CHAR(4) |
顧客名 CHAR(20) |
001 | KUROKIYA |
002 | ONSIDE |
003 | FIRST HOUSE |
今後、顧客表といえば上表を指すものとします。この顧客表から顧客名が O で始まるものを抽出するには次のように記述します。
-- sample.13-5 --/* データの参照 */ SELECT * FROM 顧客表 WHERE 顧客名 LIKE 'O%' ;
/* 実行結果 */ 顧客コード 顧客名 ──────── ───── 002 ONSIDE
もし、ワイルドカードである '_' と '%' を含む文字列のデータで、'_' と '%' を検索したい場合にはエスケープ文字を使用します。エスケープ文字は '_' と '%' の直前に配置すると、'_' と '%' はワイルドカードとして解釈されなくなります。エスケープ文字は LIKE 句の後ろに ESCAPE 句を記述して指定します。次の例ではエスケープ文字を'$'とした場合に、'_'で始まる顧客名を検索する文です。顧客表には'_'で始まるデータがないので、何も出力されません。
-- sample.13-6 --/* データの参照 */ SELECT * FROM 顧客表 WHERE 顧客名 LIKE '$_%' ESCAPE '$' ;
/* 実行結果 */ (何も出力されず)
5.3.4. IS NULL 演算子
IS NULL 演算子は NULL 値を持つデータを検索するものです。次の例では、顧客表から顧客名列に NULL 値を持つデータを全て抽出するものです。実際には、顧客名列には NULL 値は存在しないので何も出力されません。
-- sample.13-7 --/* データの参照 */ SELECT * FROM 顧客表 WHERE 顧客名 IS NULL ;
/* 実行結果 */ (何も出力されず)
(実習課題1)
表に示すテーブル employee の e_name 列から、ファーストネームが「To」で始まるものだけを表示する SQL 文を記述しなさい。表示する列は、e_name 列のみでよい。ただし e_name 列は「ラストネーム ファーストネーム」なるデータが格納されているものとする。
e_num | e_name | year | gender | office |
---|---|---|---|---|
101 | Ichihara Etsuo | 1972 | 1 | 20 |
102 | Nishida Toshiko | 1978 | 0 | 10 |
103 | Nishikino Akiko | 1980 | 0 | 30 |
104 | Yamaguchi Tomohito | 1985 | 1 | 10 |
105 | Oda Yuko | 1988 | 0 | 10 |
106 | Matsushima Nanao | 1995 | 1 | 20 |
107 | Hirosue Ryotaro | 1999 | 1 | 30 |
関連記事
- [SQL] 3. テーブルの操作 3 : テーブルの列の制約をつける方法について説明します