SQL:前方一致・後方一致・部分一致検索する方法

SQLで前方一致・後方一致・部分一致等のあいまい検索の方法についてご紹介します。
SQLであいまい検索を行う場合はワイルドカード文字として「%」を使用します。

サンプルテーブル

以下の商品テーブル「goods」を元に説明します。

    商品テーブル「goods」

前方一致検索

SQL文(クエリー)

    • 前方一致検索する場合、LIKE演算子を指定して検索条件の最後に「%」を記載します。
    • 「SELECT * FROM [テーブル名] WHERE LIKE ‘[条件]%’;」の形式で記述します。

実行結果

以下の様に前方に「商品」と入力されているデータのみ出力されます。

後方一致検索

SQL文(クエリー)

    • 後方一致検索する場合、LIKE演算子を指定して検索条件の先頭に「%」を記載します。
    • 「SELECT * FROM [テーブル名] WHERE LIKE ‘%[条件]’;」の形式で記述します。

実行結果

以下の様に後方に「A」と入力されているデータのみ出力されます。

部分一致検索

SQL文(クエリー)

    • 部分一致検索する場合、LIKE演算子を指定して検索条件の前後に「%」を記載します。
    • 「SELECT * FROM [テーブル名] WHERE LIKE ‘%[条件]%’;」の形式で記述します。

実行結果

以下の様に文字列に「ボード」が含まれているデータが出力されます。

SQL:INDEXのメリットとデメリットについて

業務でデータベースの操作をする場合、データが大量に登録されているテーブルへアクセスする場合に索引(INDEX)を作成するとSQLクエリの実行が劇的に早くなるケースが多々あります。この索引(INDEX)についてどういう場合に作成すれば良いのか、メリット、デメリット等についてまとめておきます。

どういう場合に索引(INDEX)を作成すれば良いのか

索引(INDEX)を作成した方が良いケース

  • 項目数/データ数が多い大規模な表の1%~15%程の行を頻繁にアクセスする場合
  • WHERE句で頻繁に使用されている列である場合
  • 列の値が比較的一意である場合
  • 参照整合性制約で使用されている外部キーになっている列である場合

索引(INDEX)を作成しない方が良いケース

  • データ登録件数が少ない表である場合
  • 列内の値がほぼユニークである場合
  • NULL値が多く、NULL以外の値を検索しない場合

索引(INDEX)のメリット

  • 表検索(SELCET)する際、特定の行を素早く検索する事が出来る為、検索のパフォーマンスが早くなります。
  • ソート作業を省略出来ます。

索引(INDEX)のデメリット

  • データの登録(INSERT)、変更(UPDATE)の際、索引変更のためのオーバーヘッドが加わるため、索引(INDEX)がないテーブルに比べると時間が掛かります。
  • 索引(INDEX)を作成する領域が必要となります。

Eclipse:デフォルトのVM引数を設定する方法

EclipseでJUnitやDjUnitを実行すると「junit java.lang.OutOfMemoryError: Java heap space」とメモリエラーが表示された場合は「デフォルトのVM引数」を設定する事でこの事象を回避する事が出来るのでその設定方法をご紹介します。

環境

  • Eclipse 4.2
  • Windows7 professional 64bit版

対処方法

  1. Eclipseメニューの「ウィンドウ」⇒「設定」を選択します。
  2. 設定画面で「Java」⇒「インストール済みのJRE」⇒使用しているjdkを選択して「編集」ボタンを選択します。
  3. JREの編集画面で「デフォルトのVM引数」へ以下の様に設定します。

Excel:文字列置換する方法

Excelで文字列置換する場合「SUBSTITUTE」関数か「REPLACE」関数のどちらかを使用します。但し、EXCELのREPLACE関数はJa「この指定文字列をまとめてこの文字列へ置換」というような事は出来ません。EXCELで文字列置換する場合は通常「SUBSTITUTE」関数を使用します。

動作環境

    Microsoft Office Professional 2013

「SUBSTITUTE」関数を使用して文字列置換する方法

  • 「SUBSTITUTE」関数の書式。
    「SUBSTITUTE(文字列, 検索文字列, 置換文字列, [置換対象])」
    • 文字列:文字列置換するセルを指定します。
    • 検索文字列:置換前文字列を指定します。
    • 置換文字列:置換後文字列を指定します
    • 置換対象:指定すると全置換ではなく、検索文字列の「置換対象」個目に出現した値のみ置換対象とします。
  • 「SUBSTITUTE」関数の使用例