目次
エンジニアの方にとってみれば、SQL は使えてあたりまえかもしれませんが、営業や管理部の人からすれば魅惑の魔法といわれることもあります。 しかし非エンジニアの方でも SQL が使えた方がいいですし、 そのほうがエンジニアの作業も楽になります。
そこで今回は、 非エンジニアの方が SQL を使えるようにするための準備作業について解説します。
環境
- PostgreSQL
- pgAdmin 3
- Windows 10
PostgreSQL を使います。 データベースに Oracle Database, MySQL を使用している場合は一部異なります。
どんなデータがありそうかを見る
pgAdmin を起動します。 左ペインから、ダブルクリックやクリックを繰り返してツリーを下のように展開していきます。
Tables というところに、 テーブル(保存されたデータのセット)が入っています。 左のツリーでも見えますし、右上のペインでも表示されます。 (灰色で隠していますが。)
では例えば users
というテーブルの中にどんなデータが入っているのか予想してみましょう。 テーブルの一覧の中から users
をクリックします。 すると右下に、テーブルの構造が表示されます。
ここでは次のように表示されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
-- Table: users -- DROP TABLE users; CREATE TABLE users ( id serial NOT NULL, email character varying(255) NOT NULL DEFAULT ''::character varying, encrypted_password character varying(255) NOT NULL DEFAULT ''::character varying, reset_password_token character varying(255), reset_password_sent_at timestamp without time zone, remember_created_at timestamp without time zone, sign_in_count integer DEFAULT 0, current_sign_in_at timestamp without time zone, last_sign_in_at timestamp without time zone, current_sign_in_ip character varying(255), last_sign_in_ip character varying(255), failed_attempts integer DEFAULT 0, unlock_token character varying(255), locked_at timestamp without time zone, initial_mail_sent boolean NOT NULL DEFAULT false, created_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL, CONSTRAINT users_pkey PRIMARY KEY (id) ) WITH ( OIDS=FALSE ); ALTER TABLE users OWNER TO test_user; |
上の users
テーブル は管理用のデータが多いのですが、 id, email と書いてあるところから、 ユーザID と メールアドレス が入っていそうです。 ここから、 SQL を使ってデータを抽出していきます。 pgAdmin には、 簡単にデータを見る方法も用意されていますが、 できることに限界がありますので SQL を使用します。
データを見てみる
pgAdmin のツールバーに SQL と書かれたアイコンがあります。 それをクリックします。
すると新しいウインドウが開きます。 左上の “SQL Editor” と書かれた SQL 入力場所、 ツールバーの赤丸で囲んだ実行ボタン、 画面下の結果を表示する “Output pane” を覚えておいてください。
では試しに 10件 だけデータを取り出してみます。 SQL Editor に次のように入力します。
1 2 3 |
SELECT * FROM users LIMIT 10 |
そして実行ボタンをクリックします。 すると “Output pane” にデータが表示されます。
SQL の内容を説明します。
- SELECT
- データを取り出す命令です。
- *
- テーブルにあるデータのすべての列を取り出します。
- FROM users
- users テーブル からデータを取り出します。
- LIMIT 10
- 10件に件数を絞り込みます。
SQL の改行などはエンジニアによってさまざまです。 テーブル名も含めて大文字小文字も自由に使われます。
データの絞り込み
ここからは、データの絞り込み方を考えます。
先ほどのテーブルで、次のようなデータがあるとします。
id | |
---|---|
1 | sample_1@mail.com |
2 | sample_2@mail.com |
3 | sample_3@mail.com |
4 | sample_4@mail.com |
5 | sample_5@example.com |
6 | sample_6@example.com |
7 | sample_7@example.com |
8 | sample_8@example.com |
9 | sample_9@example.com |
10 | sample_10@example.com |
先ほどはアスタリスクを使いましたが、アスタリスクを使うと id
と email
だけがほしいときでも、余計なデータも一緒に表示されます。 そういうときは、カラム名(列名)を並べて記載します。
1 2 3 |
SELECT id, email FROM users |
LIMIT 10
も外しました。 こうすると、 すべてのユーザについて id
, name
が抽出されます。 id
と email
の書く順番を変えると、出力される順番も変わります。
1 2 3 |
SELECT email, id FROM users |
id(数値) で絞り込み
id 5234 のユーザのデータが見たい、 といった時に使える方法を紹介します。
1 2 3 4 |
SELECT id, name FROM users WHERE id = 5234 |
WHERE
のところに id = 5234
という条件を書きます。 簡単ですね。
ほかにも次のようなフィルタができます。
id != 5234
id
が 5234 ではないユーザを抽出します。id > 5234
id
が 5234 より大きいユーザを抽出します。id < 5234
id
が 5234 より小さいユーザを抽出します。id >= 5234
id
が 5234 以上のユーザを抽出します。id <= 5234
id
が 5234 以下のユーザを抽出します。
>=
, <=
は >
, <
が先なのか =
が先なのかややこしいですが、 次のように考えると覚えられます。 不等号ですから、 “不” つまり等しくないものが先に、 “等号” が後にきます。
email(文字列)
email
で絞り込む場合も同じように不等号が使えます。 sample_1@mail.com
がメールアドレスになっているユーザを探してみましょう。
1 2 3 4 |
SELECT id, email FROM users WHERE email = 'sample_1@mail.com' |
こちらも id
で絞り込んだ場合と同じです。 不等号 >
, <
の順序は簡単に言えば、「あいうえお順」のような辞書順になります。 この順番はデータベースごとに設定されており、データベースが異なると比較順序も変わることがあります。
email
のような文字列の場合は、 前方一致、中間一致、後方一致で検索することもできます。
前方一致
email
が sample
で始まるユーザを検索します。
1 2 3 4 |
SELECT id, email FROM users WHERE email LIKE 'sample%' |
後方が決まっていないので %
にします。 このときは 等号・不等号 ではなく、 LIKE
と書いていることにも注意してください。
後方一致
email
が mail.com
で終わるユーザを検索します。
1 2 3 4 |
SELECT id, email FROM users WHERE email LIKE '%mail.com' |
決まっていない前方部分を %
にします。
中間一致
email
に 1
が含まれるユーザを検索します。
1 2 3 4 |
SELECT id, email FROM users WHERE email LIKE '%1%' |
決まっていない前方部分と後方部分を %
にします。
複数条件で絞り込む
複数の条件を使うときは、 AND
, OR
で条件をつなげます。
id
が 8 より小さく、 メールアドレスに ex
が含まれるユーザを検索します。
1 2 3 4 5 |
SELECT id, email FROM users WHERE id < 8 AND email LIKE '%ex%' |
id
が 5 より小さい または id
が 8 より大きいユーザを検索します。
1 2 3 4 5 |
SELECT id, email FROM users WHERE id < 5 OR id > 8 |
簡単ですね。
では AND
, OR
の入り乱れた検索をやってみましょう。
id
が 3以下 で メールアドレスに “am” が含まれるか、 id
が 7以上 で メールアドレスに 1 が含まれるデータを抽出します。
1 2 3 4 5 6 7 |
SELECT id, email FROM users WHERE ( id <= 3 AND email LIKE '%am%') OR ( id >= 7 AND email LIKE '%1%') |
まとまった条件を括弧で囲めば解決できます。 この場合は括弧なしでも動きますが、わかりやすさを重視して括弧をつけるようにしましょう。
もうひとつ例を出します。 メールアドレスに a または e が含まれ、 かつ l または o が含まれるデータを探します。
1 2 3 4 5 6 7 |
SELECT id, email FROM users WHERE ( email LIKE '%a%' OR email LIKE '%e%') AND ( email LIKE '%l%' OR email LIKE '%o%') |
見るためのデータベース・SQL データの並び順 に続きます。