不等号やnotイコールを使ったSELECT文

テーブル情報を絞り込んで取得するにはWHERE句を使います。またレベルが上がってくるとチューニングのためにWHERE句を使う機会も出てきます。

覚えるべきキーワード
・SELECT 列名 FROM 表名 WHERE 条件式
・<>、^=、!=
・>、<
・>=、<=

このサンプルテーブル1を使って以下のSQLを解説します。

サンプルテーブル1

(テーブル名:employee、id:数値型、name:文字型、age:文字型)

ID NAME AGE
10 SASAKI 29
11 SASAKI 30
12 SUZUKI 30

SELECT 列名 FROM 表名 WHERE 条件式

WHERE句は、FROM句の後ろに記載します。対象のテーブルから特定の条件に合致したレコードを取得します。WHERE句に記載する条件のデータ型は数値、文字、日付があり、文字、日付は条件を’(一重引用符)で囲って指定します。

SELECT 列名 FROM 表名 WHERE 条件式(数値)
SELECT name FROM employee WHERE id = 12;

数値型を条件式に使ったSQLです。数値型のid列を条件式に指定しています。idが12に等しいレコードのname情報を取得します。

(テーブル名:employee、id:数値型、name:文字型、age:文字型)

NAME
SUZUKI

employeeテーブルの中でidの値が12のレコードは、上から3つ目の、「ID:12、NAME:SUZUKI、AGE:30」レコードになります。そしてこのレコードのnameだけをSELECTしているのでSUZUKIが取得できます。ちなみにnameとageをSELECT対象にすればSUZUKIと30のデータを取得します。

SELECT 列名 FROM 表名 WHERE 条件式(文字)
SELECT id,age FROM employee WHERE name= ‘SASAKI’;

文字型を条件式に指定したSQLです。文字列型は条件を’(一重引用符)で囲みます。

ID AGE
10 29
11 30

employeeテーブルのnameがSASAKIなのは、上から1つ目と2つ目のレコードです。この2つのレコードのidとageを取得しています。文字型の条件は’(一重引用符)さえ忘れなければ簡単ですが、条件に指定する文字列は大文字、小文字で結果が異なります。例えば、例文の条件WHERE name= ‘SASAKI’をWHERE name= ‘sasaki’と書いてしまうと取得できるデータは0件です。SASAKIとsasakiは違うからです衣。大文字、小文字で取得できるデータは違うので気を付けてください。

次は文字型を条件式に指定したSQLです。文字列型と同じく、日付型も条件を’(一重引用符)で囲みます。

このサンプルテーブルを使って以下のSQLを解説します。
ここのSQLだけはサンプルテーブル2を使って解説します。

サンプルテーブル2

(テーブル名:employee、id:数値型、name:文字型、bd:日付型)

ID NAME BD
10 SASAKI 20-Feb-09
11 SASAKI 20-Aug-11
12 SUZUKI 11-Jan-09
SELECT 列名 FROM 表名 WHERE 条件式(日付)
SELECT id,age FROM employee WHERE bd= ‘20-Aug-11’;

’20-Aug-11’を条件式としています。これは2011年8月20日を意味しています。日付には書式があって、あらゆる書き方があります。デフォルト設定が「DD-Mon-RR」書式を設定している前提なので、今回はそのまま‘20-Aug-11と’記載していますが、異なる日付書式を指定されている列データを取得する場合は日付書式変換をして取得する必要があります。
(テーブル名:employee、id:数値型、name:文字型、bd:日付型(DD-Mon-RR))

ID NAME
11 SASAKI

<>、^=、!=はすべてnotを意味する

「○○ではない」という条件式を作る時に使う式が<>、^=、!=です。どれも違いはなく、すべてnotを意味します。冒頭のemployeeテーブルを使ってサンプルを実行してみます。

<>、^=、!=
SELECT * FROM employee WHERE id <> 12;

(テーブル名:employee、id:数値型、name:文字型、age:文字型)

ID NAME AGE
10 SASAKI 29
11 SASAKI 30

3つあるデータのidは、10、11、12ですが、その中で「12ではない」が条件なので、idが10と11のデータを取得します。<>を^=や!=に変更しても同じ結果になります。

>、<

不等号を条件式に使うSQLです。値が〇〇より大きい、もしくは小さい時にはこの不等号を使います。

>、<
SELECT * FROM employee WHERE id < 11;

(テーブル名:employee、id:数値型、name:文字型、age:文字型)

ID NAME AGE
10 SASAKI 29

「idが11よりも小さい」が条件なので、idが10のデータのみを取得します。ちなみにWHERE句の列名と値は左右どちらでも良いので、以下のSQLも同じ意味です。

SELECT * FROM employee WHERE 11 > id;

idと11の位置、さらに不等号の向きが変わっていますね。どちらでも問題ありません。

>=、<=

同じく不等号を使うSQLですが、先ほどの不等号とは若干違いがあります。それぞれ不等号に=が付いていますね。これは。値が〇〇以上、もしくは以下を意味するので、条件の値も対象に含まれます。

>=、<=
SELECT * FROM employee WHERE id <= 11;

(テーブル名:employee、id:数値型、name:文字型、age:文字型)

ID NAME AGE
10 SASAKI 29
11 SASAKI 30

このSQLだと11以下なので、idが10のレコードと11のレコードを取得します。

WHERE句はSELECT対象のレコードを絞って取得します。

条件式にはサブクエリなど複雑な書き方も覚える必要がありますが、まずはベースとなる等号、不等号を習得しましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です