データ検索

本章ではSQLの中心とも言える、データ検索の基本について解説します。
本章の目標
  • データ検索の基礎を理解する
  • データの抽出条件を理解する
  • 検索結果の並べ替え方法をおぼえる
ページの先頭へ
ページの先頭へ

1.データ検索の基礎

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

1. 最も単純なデータ検索

ここでは最も単純なデータ検索の方法を説明します。とはいっても、この方法は今までの学習で既に出てきています。
まずデータ検索の基本形の書式を説明します。

SELECT 列名1,列名2,・・・ FROM テーブル名;

これは指定したテーブルの全てのデータを検索し、列名で指定した列のデータを表示する方法です。
例えば、「bookinfo」テーブルのisbn番号を全て検索したい場合は、

SELECT isbn FROM bookinfo;

になります。




また、「bookinfo」テーブルの全てのデータを表示したい場合は、

SELECT isbn,title,price FROM bookinfo;

になるわけです。




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

SELECT * FROM bookinfo;





列名の部分が「*」(アスタリスク)になっていますね。
全ての列を表示する場合には、列名を一括して「*」で代用することができます。

2. 列名の別名

先程の検索結果表示では、各列のタイトルが、列名そのままになっていました。 しかし、テーブルの内容をよく知っている場合は問題ないですが、知らない人が見た場合にわからない可能性があります。そこで、列名に別名をつけて表示してみましょう。
書式は下記の通りです。

SELECT
列名1 AS 別名,
列名2 AS 別名,
・・・・
FROM テーブル名
;

実際に「bookinfo」テーブルで試してみましょう。

SELECT
isbn AS ISBN番号,
title AS 書籍のタイトル,
price AS 価格
FROM bookinfo
;





テーブル内容がわからない人でも、これならわかりやすいですね。
ページの先頭へ

2.データの抽出条件

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

1. 比較演算子を使用したデータの抽出

比較演算子を使用した「SELECT」文の構文は、下記の通りです。

SELECT 列名 FROM テーブル名 WHERE 検索対象の列名 比較演算子 値;

例えば「bookinfo」テーブルからISBN番号が「00003」のデータを抽出したい場合は、

SELECT * FROM bookinfo WHERE isbn='00003';

となります。






比較演算子には下記のようなものがあります。

演算子 使用例 意味
= a = b aとbが等しい
<> a <> b aとbが等しくない
< a < b aがbより少ない
> a > b aがbより大きい
<= a <= b aがb以下
>= a >= b aがb以上

「bookinfo」テーブルで確認してみましょう。
例1)ISBN番号が「00003」以外

SELECT * FROM bookinfo WHERE isbn <> '00003';







例2)価格が2,000円以上

SELECT * FROM bookinfo WHERE price >= 2000;







例3)価格が3,800円未満

SELECT * FROM bookinfo WHERE price < 3800;








2. あいまい検索

データ検索をするとき、WHERE句にLIKE演算子を使用すると、あいまい検索をすることができます。
書式は、次の3パターンがあります。
パターン1)指定した値で始まるデータ

SELECT 列名 FROM テーブル名 WHERE 検索対象の列名 LIKE '値%'

パターン2)指定した値で終わるデータ

SELECT 列名 FROM テーブル名 WHERE 検索対象の列名 LIKE '%値'

パターン3)指定した値を含むデータ

SELECT 列名 FROM テーブル名 WHERE 検索対象の列名 LIKE '%値%'


「bookinfo」で確認してみましょう。

パターン1)書籍名が「SQL」で始まるデータ

SELECT * FROM bookinfo WHERE title LIKE 'SQL%';







パターン2)書籍名が「テキスト」で終わるデータ

SELECT * FROM bookinfo WHERE title LIKE '%テキスト';







パターン3)書籍名に「入門」を含むデータ

SELECT * FROM bookinfo WHERE title LIKE '%入門%';








3. 論理演算子

検索条件は、一つだけとは限りません。複数の検索条件を組み合わせて検索したいケースもあります。
複数の検索条件を組み合わせるには、論理演算子を使用します。ここでは、論理演算子のもっとも基本となる「AND」と「OR」を説明します。
まず基本文法です。

SELECT 列名 FROM テーブル名 WHERE 検索条件① AND(または)OR 検索条件② AND(または)OR ・・・;

「AND」はかつ、「OR」はもしくはを表します。
例えば「bookinfo」で、書籍名が「SQL」で始まり、かつ価格が2000円以下のものを検索する場合は、




となります。






また、書籍名が「SQL」で始まるか、もしくは価格が2000円以下のものを検索する場合は、




となります。






ページの先頭へ

3.データの並び替え

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

1. 単一列での並び替え

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

SELECT 列名 FROM テーブル名 ORDER BY ソート対象の列名 ASC|DESC;

ASCは昇順、DESCは降順を示します。
昇順は値の小さい順に並べ、降順は値の大きい順に並べます。
例えば「bookinfo」で価格の安い順に並べ替えるには、

SELECT * FROM bookinfo ORDER BY price ASC;

となります。




尚、「ORDER BY」句の昇順降順のデフォルトは昇順になっているので、昇順で並べ替える場合はASCを省略できます。

SELECT * FROM bookinfo ORDER BY price;



ISBN番号で降順に並べ替えるには下記のようになります。



SELECT * FROM bookinfo ORDER BY isbn DESC;




2. 複数列での並べ替え

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


場合によっては下記のように並べ替えられる場合があります。


このような場合、ソート対象の列を複数指定することによって、正しく並べ替えることができます。
ソート対象の列を複数指定するには、昇順降順の指定の後に、続けて第2基準の列を指定します。

SELECT 列名 FROM テーブル名 ORDER BY ソート対象の第1列名 ASC|DESC, ソート対象の第2列名 ASC|DESC,・・・;

例えば、「bookinfo」で価格の安い順、isbn番号の昇順に並べ替えるには、

SELECT * FROM bookinfo ORDER BY price ASC,isbn ASC;

もしくは

SELECT * FROM bookinfo ORDER BY price,isbn;

と指定します(前述しましたが、ASCは省略できます)。


また、価格の安い順、isbn番号の降順に並べ替えるには、

SELECT * FROM bookinfo ORDER BY price ASC,isbn DESC;

もしくは

SELECT * FROM bookinfo ORDER BY price,isbn DESC;

と指定します(ASCは省略できます)。



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

ページの先頭へ

4.本章のまとめ

本章ではデータ検索の手法を解説してきました。
前述しましたが、データ検索はSQLの中でも最も多く使われるものであり、SQLの中心とも言えるものです。
また抽出条件の指定は、他のDML文でも使用されるものなので、その考え方と文法をしっかりと押さえておいてください。
ページの先頭へ