Like

(教科書 p 84)

Likeを用いると、Where節で、あるフィールドにある文字列が含まれているかを指定できる。



タイトルに「の」が含まれる曲の一覧

SELECT *
FROM 曲目一覧
WHERE 曲名 Like '*の*';



Accessと標準SQLの差に注意!

AccessではLikeで任意文字列に 「*」を使用するが、標準SQLでは「%」を使用する。

Likeを安易に使わない!

リレーショナルデータベースは、データ操作を「抽象化」することで、「わかりやすさ」と「効率性」を両立させることができるすぐれた方式だ。Likeは非常に「非リレーショナル」的な処理なので、データ処理の効率を著しく悪化させる場合がある。Likeを使わないで済ませられる場合は使わない方がよい。

たとえば以下のような例を考えよう。

ID 学籍番号 氏名
101 c0518023 浜田泳
102 c0518032 山田登
103 c0518042 川上渉
104 c0418012 小野花子
105 c0418090 神田豊作

この時、たとえばコンピュータ応用学科2005年度入学の学生を選択するのに、

SELECT * FROM 学生一覧 WHERE 学籍番号 Like 'c05*';

というSQL文を用いることができる。しかし、以下のようにテーブルを修正し、

ID 学籍番号 学科 入学年 氏名
101 c0518023 cs 2005 浜田泳
102 c0518032 cs 2005 山田上
103 c0518042 cs 2005 川上鮎子
104 c0418012 cs 2004 小野花子
105 c0418090 cs 2004 神田豊作

以下のようなSQL文を使うこともできる。

SELECT * FROM 学生一覧 WHERE 学科='cs' AND 入学年='2005';

そして、学科数、学生数が増えた場合に後者の方が桁違いに効率よく処理することができる。


このような理由で、大規模なデータベースでLikeを使うことはできる限り避けるべきである。Likeを使っている場合、データベースの構成を見直してLikeを使わなくて済むようにできないか、よく検討した方がよい。

練習

以下のLikeを使ったSQL文の欠点と、どのようにすれば改良できるかを考えよう。

目的: 女子のデータのみを抽出する。

SELECT * FROM 学生一覧 WHERE 氏名 Like '*子';

欠点: この条件で必ず女子であるとは限らない。

改良方法: テーブルに xxx というフィールドを追加し、そこにデータを記入して管理する。