PostgreSQL where句
where句を使って条件つきの検索を試す。
データはこれまでにつくったtestデータベース、testsテーブルに入っているボートレース(レガッタ)の結果を使う。
目次
PostgreSQLドキュメント
SQLコマンドについてはPostgreSQLドキュメント内のリファレンスに詳細が載っている。
さらにSQLコマンド > select文とすすむとwhere句について書かれている。
PostgreSQLドキュメント
リファレンス SQLコマンド
select文where句
https://www.postgresql.jp/document/10/html/sql-commands.html
SQLファイルをつくる
SQL文が長くなるので今回も外部ファイルを読み込む方法を使う。
次のようなファイルをつくる。
select_where.sql
select raceno, events, groups, rank1, crew_rank1, rank2, crew_rank2, rank3, crew_rank3 from tests where crew_rank1 = 'A大学' or crew_rank2 = 'A大学' or crew_rank3 = 'A大学' ;
上のselect文の説明。
- selectコマンドにつづいて表示したいカラムの名称を書く
- fromにつづいてテーブル名を書く
- whereにつづいて条件を書く
- 今回はクルー名がA大学のレコードを検索
- 条件は複数つけられる。今回はorでつなげている
SQLファイルを実行する
ターミナル/PowerShellから次の順でコマンドを実行する。
- PostgreSQLサーバーを起動
-
pg_ctl
コマンドを使用 - データベースに接続
psql
コマンドを使用- 今回はtestという名のデータベースに接続
- カラム数が多いので拡張表示をオンにして縦表示にする
\x
コマンドを使用
- ファイルを読み込む
\i ファイル名
コマンドを使用- 読み込むとファイルに書かれたコマンドが実行される
1から3の詳細は前に書いた記事を参照。
実行結果
実際にファイルを読み込む。
\i select_where.sql
実行結果
今回からmacOS10の結果のみ紹介。
(Windows10の結果は特に違いがある場合のみ紹介)
希望どおりA大学が含まれるレース結果だけが表示された。
Windows10の文字エンコーディング
Windows PowerShellの環境によっては外部ファイルが正しく読み込まれない。
今回の環境だと(0 行)
と返ってきた。
文字エンコーディングの違いでwhere句以下の値が文字化けするのが原因だと思う。
コマンド自体は読み込まれてしまいエラーにならないので不具合に気づきにくい。注意が必要。
先ほどつくったselect_where.sqlの文字エンコーディングはUTF-8。PowerShellの文字エンコーディングはSJIS。
テキストエディタ側でselect_where.sqlの文字エンコーディングをShift-JISにすると正しく認識された。
PostgreSQL、PowerShell、外部ファイルの文字エンコーディングの違いに注意が必要。
必要に応じて前回使った\encoding
コマンドを使う。
今回の場合、ファイル読み込みではなく、PowerShellからselectコマンドを入力すれば設定変更せずに問題なく実行される。
where句を使ってボートレース(レガッタ)結果から必要な情報だけを抜き取れた。
次回からPostgreSQLをRubyで操作していきます。
今回の動作確認環境
macOS 10.13.3
ターミナル 2.8.2
Windows10 1709
Windows PowerShell 5.1.16299.251
PostgreSQL 10.3