MySQL -データ検索と抽出-
データの検索
既存のデータの検索(問い合わせ結果)には、SELECT命令を使用します。
SELECT 列名1,列名2,… FROM テーブル名 [条件句など];
SELECT * FROM テーブル名;
レコードの抽出
特定に条件に合致したレコードを抽出する場合には、WHERE句を使用します。
WHERE句に集計関数は使用できません。
その場合は、HAVINGを使用します。
比較演算子
比較演算子を利用して値を比較することができます。
演算子 | 概要 | 例 |
---|---|---|
= | 等しい | title = ’Java’ |
> | より大きい | birth > ’2012-01-01’ |
< | より小さい | birth < ’2012-01-01’ |
>= | 以上 | birth >= ’2012-01-01’ |
<= | 以下 | birth <= ’2012-01-01’ |
<> | 等しくない | title <> ’Java’ |
IS NULL | NULLである ※NULL値の抽出に 「=」は使用できません。 |
title IS NULL |
IS NOT NULL | NULLではない | title IS NOT NULL |
LIKE | 指定パターンに一致 | title LIKE ’Ja%’ |
NOT LIKE | 指定パターンに一致しない | title NOT LIKE ’Ja%’ |
BETWEEN | 指定範囲に含まれる | price BETWEEN 1000 AND 2000 |
NOT BETWEEN | 指定範囲に含まれる | price NOT BETWEEN 1000 AND 2000 |
IN | 指定値のいずれかである | id IN(’A0001’,’A0002’,’A0003’) |
NOT IN | 指定値のいずれでもない | id NOT IN(’A0001’,’A0002’,’A0003’) |
論理演算子
論理演算子を利用することで、複数の条件式を組み合わせることも可能です。
演算子 | 概要 | 例 |
---|---|---|
AND | a と b が共にTRUEの時にTRUE | a AND b |
&& | a と b が共にTRUEの時にTRUE | a && b |
OR | a か b の少なくとも1つがTRUEの場合にTRUE | a OR b |
|| | a か b の少なくとも1つがTRUEの場合にTRUE | a || b |
XOR | a か b のどちらか1つがTRUEの場合にTRUE | a XOR b |
NOT | a がTRUEならFALSE、a がFALSEならTRUE | NOT a |
! | a がTRUEならFALSE、a がFALSEならTRUE | ! a |
- 論理演算子の優先順位
- NOT → AND → OR
- ただし、カッコで囲むと最優先して評価されます。
あいまい検索
既存のデータの検索とは、列にある文字列が含まれる(あるいは、「で始まる」「で終わる」)というような あいまいな条件で検索することをいいます。
SELECT 列名1,列名2,… FROM テーブル名 WHERE like %文字列;
「%」は、ワイルドカードと呼ばれる記号で、「0文字以上の文字列」です。
- 「で始まる」 %文字列
- 「を含む」 %文字列%
- 「で終わる」 文字列%
ワイルドカードには、その他にも任意の1文字を表す「_」(アンダースコア)があります。
ソート件数の指定
ソートした結果からレコード数を指定することができます。
ソート条件が明確でない場合、データベースは任意の順でレコード取得してしまいますので、 LIMIT句は、原則としてORDER BY句とセットで利用します。
SELECT 表示したい列名1,列名2… FROM テーブル名 ORDER BY 取出したい列名 LIMIT 開始位置,件数;
レコード取得の開始位置は、省略可能です。省略した場合は、0(先頭)を指定したことになります。
重複行を取り除く
通常SELECT文での問い合わせ結果には重複行が含まれることがあります。
こうした検索内容から重複する行を取除くためには、DISTINCT句を利用します。
SELECT DISTINCT 列名1,列名2,… FROM テーブル名;
DISTINCTで重複を抑制しているのは、SELECT文で得られた行データです。
言い換えれば、SELECT文に含まれる全列名の組み合わせでの重複データということになります。
よって、単独列のみの重複ではありません。