4.1 データの検索

 本節では登録されたデータの様々な検索方法について、「bookinfo」テーブルを利用して学習していきます。

4.1.1 データ検索の基本

 データの検索は、SQLコマンドの中での最も多く利用されるコマンドです。そもそも、データベースにデータを保管しただけでは、何の使い道もありません。保管したデータをすばやく検索し、取り出せるようになって、初めてデータベースの意味があるのです。
 データの検索には「SELECT」キーワードを使用しますが、一口に検索といってもさまざまなパターンがあり、その全てを覚えるには大変な労力がかかってしまいます。まずは最も基本となるデータ検索の方法について学習しましょう。
 データを検索するための最も基本的な書式は次のようになります。

書式:SELECT文

 この構文を利用すると、指定された列に登録されている全てのデータを取得します。
 「SELECT」キーワードはテーブルからデータを検索する際に、利用するキーワードになります。どのテーブルのどの列のデータを取得するか、を指定する構文になっており、「SELECT」キーワードの後ろに取得したい列名を「,」(カンマ)で区切って記述し、「FROM」キーワードの後ろに検索するテーブル名を指定します。
 それでは「bookinfo」テーブルに登録されたデータを検索し、画面に表示してみましょう。
 次のコマンドを実行して下さい。

 上記のコマンドを実行するとisbn列に登録された全てのデータが表示されます。

図 4.1.1 :isbn列の全データの検索

 もし、「bookinfo」テーブルに登録された全てのデータを検索したい場合には、「SELECT」キーワードの後ろに全ての列名を記述したコマンドになります。

図 4.1.2 :全データの検索

 ここで、思い出していただきたいのが、データ登録をした際に、登録されたデータを確認するために発行した「SELECT」コマンドです。

 このコマンドでは列名部分の記述が「*」(アスタリスク)になっています。SQLのSELECTコマンドでは、全ての列を取得するためのワイルドカードとして「*( アスタリスク)」が指定できます。

図 4.1.3 :「*」を利用した全データの検索

4.1.2 様々な条件をつけたデータの検索

 前項では指定したテーブルの全てのデータを検索する方法を学習しました。ここでは、テーブルの中の特定のデータを取得する方法を学習していきます。

1. 比較演算子を利用したデータの検索

 比較演算子を利用したデータ検索の書式は次のようになります。

書式:条件付きのSELECT文

 「SELECT」キーワードからテーブル名の指定までは、全てのデータを検索する構文と同じです。テーブル名の後ろに記述する「WHERE」キーワードが条件を指定するためのキーワードになります。
 例えば「bookinfo」テーブルからisbnが「00003」のデータのみを検索したい場合、次のようなコマンドになります。

図 4.1.4 :比較演算子「=」を利用したデータの検索

 比較演算子には以下ようなものがありますので、覚えておいて下さい。

表 4.1.1 : 比較演算子の種類一覧

 では、「=」以外の演算子についても実行し確認してみましょう。

例1)isbnが「00003」以外

図 4.1.5 :比較演算子「<>」を利用したデータの検索

 例1ではWHEREキーワードで「isbnが00003以外」を条件としています。
 そのため、isbnが00003以外のすべてのデータを検索し表示しています。

例2)価格が「2000」以上

図 4.1.6 :比較演算子「>=」を利用したデータの検索

 例2ではWHEREキーワードで「priceが2000以上」を条件としています。
 そのため、「priceが2000以上」という条件に該当するデータを検索し、全て表示しています。

例3)価格が「3800」未満

図 4.1.7 :比較演算子「<」を利用したデータの検索

 例3ではWHEREキーワードで「priceが3800未満」を条件としています。
 そのため、「priceが3800未満」という条件に該当するデータを検索し、全て表示しています。
 なお、未満の場合、指定された値は含まれませんので、4件のデータが表示されることになります。

2. あいまいな条件でのデータ検索

 「WHERE」キーワードに「LIKE」キーワードと「%」を組み合わせると、あいまい検索を行うことができます。あいまい検索の書式は3パターンになります。

パターン1)指定した値で始まるデータを検索するSELECT文

 この書式ではデータの始まりの文字列を指定して検索を行うことができます。
 例えば以下のコマンドを実行した場合titleが「Java」から始まる全てのデータを検索できます。

図 4.1.8 :「LIKE」キーワードを利用した指定文字で始まるデータの検索

 「LIKE」キーワードの後に指定する値に「%」をつけることであいまいな検索が可能になります。「%」はワイルドカードとなっており、指定された文字である「Java」のあとにつけた場合、「Java」から始まるすべてのデータを検索できます。

パターン2)指定した値で終わるデータを検索するSELECT文

 この書式ではデータの終わりの文字列を指定して検索を行うことができます。
 以下のコマンドを実行した場合、titleが「テキスト」で終わる全てのデータを検索することができます。

図 4.1.9 :「LIKE」キーワードを利用した指定文字で終わるデータの検索

 ワイルドカードである「%」を、指定文字である「テキスト」の頭につけているため、「テキスト」で終わる全てのデータを検索することができます。

パターン3)指定した値を含むデータを検索するSELECT文

 この書式ではデータに含まれる文字列を指定して検索を行うことができます。
 以下のコマンドを実行した場合、titleに「データベース」が含まれる全てのデータを検索することができます。

図 4.1.10 :「LIKE」キーワードを利用した指定文字が含まれるデータの検索

 ワイルドカードである「%」を、指定文字である「データベース」の前後につけています。そのため、titleに「データベース」という文字列が含まれる全てのデータを検索することができます。

3. 論理演算子を利用した複数条件でのデータ検索

 検索条件は、1つだけとは限りません。場合によっては複数の検索条件を組み合わせて検索したいケースもあります。そのような場合には、論理演算子を利用します。
 ここでは、論理演算子の最も基本となる「AND」と「OR」について学習します。
 論理演算子を利用した複数条件の書式は次のようになります。

書式:複数の条件で検索するSELECT文

 なお、繋げることのできる条件は2つだけではありません。検索条件の後ろに更に論理演算子をつけ、検索条件③、検索条件④といったようにいくつでも繋げることも可能です。
 論理演算子には次のようなものがあります。

表 4.1.2 : 論理演算子

 例えば、「bookinfo」テーブルで、書籍名に「1」という文字を含み、かつ価格が2000円以下のものを検索する場合は、次のようなコマンドになります。

図 4.1.11 :論理演算子「AND」を利用した複数条件の検索

 「title LIKE ‘%1%’」という条件と「price <= 2000」という2つの条件がAND演算子によって繋がっています。
 AND演算子は「かつ」という意味があり、この場合は両方の条件を満たしたデータのみを検索します。
 どちらかの条件を満たすデータ全てを検索したい場合には、OR演算子を利用します。
 例えば、書籍名に「1」という文字を含むか、もしくは価格が2000円以下のものを検索する場合は、次のようなコマンドになります。

図 4.1.12 :論理演算子「OR」を利用した複数条件の検索

 「title LIKE ‘%1%’」という条件と「price <= 2000」という2つの条件がOR演算子によって繋がっています。
 OR演算子は「または」という意味があり、この場合はどちらか片方の条件を満たしたデータを検索します。

4.1.3 データの並び替え

 データベースのデータは、指定した条件に従って並べ替え(ソート)ができます。
 ここでは、データを並び替える方法を学習します。

1. 単一列での並び替え

 データの並べ替えには「ORDER BY」キーワードと「ASC」、「DESC」キーワードを使用します。
 基本的な構文は下記の通りです。

書式:検索結果を並べ替えるSELECT文

 「ASC」は昇順(値の小さい順)、「DESC」は降順(値の大きい順)に並べ替えます。
 例えば、「bookinfo」テーブルで価格の安い順に並べる場合、以下のコマンドを実行します。

図 4.1.13 :昇順での並べ替え

 「ORDER BY」キーワードはデフォルトが昇順になっています。そのため、昇順で表示する場合、「ASC」キーワードを省略することも可能です。

図 4.1.14 :「ASC」を省略した並べ替え

 また、isbnを降順に並べる場合、以下のコマンドになります。

図 4.1.15 :降順での並び替え

2. 複数列での並び替え

 ソート対象の列は複数指定することも可能です。特にソート対象の列に同一の値が合った場合、それらのデータの並べ替えはランダムです。
 例えば「bookinfo」テーブルで価格の安い順に並べ替えた場合、先の例では下記のようにisbnが昇順で並べ替えられていましたが、これは保障されているものではありません。
 場合によっては、1行目と2行目が入れ替わって表示される可能性があります。

図 4.1.16同一の値をもつ並べ替え

 このような場合、複数の列をソート対象に指定することによって、正しく並べ替えることができます。
 複数の列をソート対象に指定するには、1番目のソート条件の指定の後に、「,」(カンマ)で区切って2番目のソート条件を指定します。

 例えば、「bookinfo」テーブルで価格を昇順、isbnを昇順に並べる場合、以下のコマンドを実行します。

 「ASC」は省略が可能なため、次のコマンドでも同じ結果になります。

図 4.1.17 :複数の列を昇順で並べ替え

 ORDER BYキーワードに複数の条件を定義した場合、左の条件から順にソートされます。そのため、上記の例ではデータ全体をpriceの昇順で並べ替え、更にpriceが同じデータがある場合に、isbnを昇順で並べ替えています。

 「bookinfo」テーブルで価格を昇順、isbnを降順に並べる場合、以下のコマンドを実行します。

 「ASC」は省略が可能なため、次のコマンドでも同じ結果になります。

図 4.1.18 :昇順と降順を組み合わせた並べ替え

文字列のソート順序

 ソートの基準列が文字列型の場合、数字→記号→アルファベット→ひらがな→カタカナ→漢字の順にソートされます。また、漢字内のソート順はその漢字を表す文字コードの順になります。

 本節の冒頭でもお伝えしましたが、データ検索はSQLの中でも最も多く使われるものであり、SQLの中心とも言えるものです。また検索条件の指定は、他のSQLコマンドでも使用されるものなので、その考え方と文法をしっかりと押さえておきましょう。