SQLで否定条件を書く方法

はじめに

開発中のRailsアプリケーションでは、postgresqlを使っている。

仕事で最近、pentahoというETLの作成ツールを使う機会があった。

SQL文を直接書くことはない。

しかし、データベースを扱っているので、SQLの学習をしてみようと思った。

ProgateのSQLを学習をしていて、NOT演算子の書き方を覚えていないことに気がついた。

なので、その書き方についての記事を書いていく。

せっかくなので、現在作成中のRailsアプリケーションで使用しているPostgreSQLで試してみたいと思う。

結論

where NOT(条件)と書く。

以下の例の場合は、select * from posts where NOT(content = ‘ジャンカラ’); というSQL文。

postsテーブルから全てのデータを選択している。条件は、contentカラムが「ジャンカラ」ではないこと。

NOTの後の()は無くても、同じ結果が得られる。

データベースにアクセス

まずは、PostgreSQLデータベースに接続して、テーブルの中身を確認する方法を参考にして、データベースにアクセスしよう。

テスト環境のデータベースにアクセスして、postsテーブルから全てのレコードを取り出すことが出来た。

否定条件を書く方法

WHEREの後に、NOTと条件を書くといいらしい。

SQLのWHERE句でNOTを極めて否定できる人間になろう | ジユーズ

試行錯誤

色々とやってみたが、上手くいかなかった。

select where not content = “ジャンカラ”だと、どのテーブルかが分からないからダメ。

from postsでテーブル名を指定すると、from付近で文法エラーがあると注意された。

select from posts where not content = “ジャンカラ”だと、ジャンカラをカラム名と見なされてしまった。

別の参考記事を見てみる

先程の参考記事では、WHEREから始まっているため、その前後が書いてある参考記事を探していこう。

ポテパンスタイルの記事が参考になった。

SQLで「~以外」を指定するには、NOT(否定)とサブクエリの組み合わせ | ポテパンスタイル

select * from テーブル名 where NOT (条件); でいけそうだ。

もう一度チャレンジ

先程の方法で上手くいかなかった。どうやら、ダブルクオテーションが使えないらしい。

シングルクオテーションにしたら、上手く行った。

別のやり方で、selectの後に全てを表す「*」を付けない場合は、1つの行という表示だけがされた。

コメントを残す

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

投稿ID : 24911