特定の値に一致しない行に絞り込もう

前のページでは、特定の値のレコードだけに絞り込む方法を学びました。

ここではその逆、"〇〇列の値が XX 以外のレコードだけ欲しい" 場合の抽出方法を学びます。

なお、これ以降、型に応じた書き方は基本的に省きますので、不安な方は前のページで再度把握してください。

書き方

ある列の値が特定の値に一致しないレコードのみに絞り込みたいときは、<> (ノット イコール) を使う

SELECT * FROM テーブル名 WHERE 列名 <> 値;

書き方の説明

特定の値に一致する行に絞り込む場合は、列名 = 値 と示しましたが、

特定の値に一致しない行を抽出したい場合、つまり否定で絞り込みたい場合は、列名 <> 値 を示します。

値をダブルクォートで括るかどうかは、その列の型に依存するのは変わりはないです。

商品情報が入っている products テーブルのち、商品名(name)が apple 以外のレコードだけに絞り込みたいとき

SELECT * FROM products WHERE name <> "apple";

ユーザー情報が入っている users テーブルのうち、所属部署コード(department_id)が 5 以外のレコードだけに絞り込みたいとき

SELECT * FROM users WHERE department_id <> 5;

ユーザー情報が入っている users テーブルのうち、生年月日(birthday)が 2010 年 6 月 10 日 以外のレコードだけに絞り込みたいとき

SELECT * FROM users WHERE birthday <> "2010-06-10";

商品情報が入っている products テーブルのち、最終更新日時(updated_at)が 2010 年 6 月 10 日 7 時 6 分 20 秒 以外のレコードだけに絞り込みたいとき

SELECT * FROM products WHERE updated_at <> "2020-06-10 07:06:20";

練習 1

試しに、SELECT 文で products テーブルで、指定した条件以外のレコードだけを取得してみましょう!

次の SQL 文を実行すると、products テーブルより、価格(price)が 2000 以外 のレコードだけ表示されます。

問題 1

sales というテーブルがあります。この sales というテーブルのうち、売上時刻(列名はsold_at、日付時刻型) が 2021 年 1 月 10 日 10 時 0 分 10 秒以外のレコードのみを取得する SQL 文を書いてみましょう。

答え合わせ

正解を見る
正解:SELECT * FROM sales WHERE sold_at <> "2021-01-10 10:00:10";
解説:否定で絞り込むので、WHERE sold_at <> "2021-01-10 10:00:10" と指定します。また、sold_at列は日付系の列なので、ダブルクォートで括って指定する必要があります。

問題 2

users というテーブルがあります。この users というテーブルのうち、メールアドレス(列名はemail、文字型) が [email protected] 以外のレコードのみを取得する SQL 文を書いてみましょう。ただし、取得する列は id 列と name 列だけとします。

答え合わせ

正解を見る
正解:SELECT id, name FROM users WHERE email <> "[email protected]";
解説:この問題も同じく否定を使うので WHERE email <> "[email protected]" と示します。emailは文字型なので、文字型もダブルクォートで括って指定する必要があります。

問題 3

users というテーブルがあります。この users というテーブルのうち、id(数値型) が 452 以外のレコードのみを取得する SQL 文を書いてみましょう。ただし、取得する列は id 列と name 列と email 列だけとします。

答え合わせ

正解を見る
正解:SELECT id, name, email FROM users WHERE id <> 452;
解説:こちらも否定なので WHERE id <> 452 と示します。idは数値型なので、ダブルクォートで括らずに指定する必要があります。