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コマンドでも使用されるものなので、その考え方と文法をしっかりと押さえておきましょう。