こんなお悩みはありませんか?
結構使う頻度の高いSELECT文なんだけど、いつも書き方がわからなくて困るんだよね〜。書き方がまとまっているサイトはないかなぁ?
そのお悩み、私が順を追って解決します。

- プログラミング技術ブログ【SUGAWAYA BLOG】管理人
- 現役WEBエンジニア
- 普段からSQLを使用している
結論
SELECT文の作り方は、覚える必要は全くありません!
必要な時になったら本サイトを参考に当てはめて使えば問題ありません。
【準備】テスト用のデータベースを作る
すでにデータベースを作っている方は、データベースの作成の必要はありません!
次に進みます!
create database test_db;
【準備】テスト用のテーブルを作る
create table test_db.test_table (
id int(6) unsigned default 0 comment 'ID',
mame varchar(20) default '名無しさん' comment '名前'
);
上記のSQLを実行すると以下のようなテーブルができます。
- 【テーブル名】test_table
- 【カラム1つめ】idカラム
- 符号なし整数型「6桁」
- nullの時に代替で入力する値であるdefault値は「0」
- 日本語表記のカラム名は「ID」
- 【カラム2つめ】nameカラム
- 可変長の文字列型「20文字」
- nullの時に代替で入力する値であるdefault値は「名無しさん」
- 日本語表記のカラム名は「名前」
できたテーブルは以下になります。
Field|Type |Collation |Null|Key|Default|Extra|Privileges |Comment|
-----+---------------+---------------+----+---+-------+-----+-------------------------------+-------+
id |int(6) unsigned| |YES | |0 | |select,insert,update,references|ID |
mame |varchar(20) |utf8_general_ci|YES | |名無しさん | |select,insert,update,references|名前
【準備】テーブルにテストデータを挿入する
以下に2つのSQLがあります。順番に実行してください。
use test_db;
insert into test_table
value (1,'サブロー'),(2,'シロー'),(3,'ゴロー');
- use test_db;
- 使用するDBを指定しています。
- insert into test_table・・・・
- インサート文です。
【ここから】SELECT文で全カラム取得する
以下のSQLを流すと、指定したテーブルの全カラムの情報を取得することができます。
select * from test_table;
取得した情報は以下のようになります。
id|mame|
--+----+
1|サブロー|
2|シロー |
3|ゴロー |
何件のレコード(行)があるかをカウントする
以下のSQLを流すと、指定したテーブルの行数をカウントすることができます。
select count(*) from test_table;
結果は以下になりました。
count(*)|
--------+
3|
取得結果にラベルをつけたい時
以下のSQLを実行すると、検索結果にラベルを付ける事ができます。
select count(*) as "件数" from test_table;
結果は以下になります。
件数|
--+
3|
重複行を省いて値を取得する【DISTINCT】
ここで、テスト的に重複したデータをテーブルに一旦挿入します。
insert into test_table
value (1,'サブロー');
結果は以下になります。
サブローが重複しているのがわかりますね。
id|mame|
--+----+
1|サブロー|
2|シロー |
3|ゴロー |
1|サブロー|
上の状態では、人数は何人いるかを求める時、同じ人が複数回登録されていると正しい人数を求める事ができませんね。
そのような時に活躍するのが、今から紹介するDISTINCT句です。
DISTINCTは重複を省いて値を求めてくれます。
以下で実際にDISTINCT句を用いた記述をしてみます。
select distinct * from test_table;
取得結果は以下になります。
サブローが1つしか取れていませんよね!
この結果からDISTINCT句を使うと重複していない値を取る事ができるのがわかりました。
id|mame|
--+----+
1|サブロー|
2|シロー |
3|ゴロー |
もちろん、重複していない値の個数も取得できます。
その場合は以下のように記述します。
個数を求める時のカラム指定には*を使うことはできません。
必ずどれかのカラムを指定します。
select count(distinct mame) from test_table;
取得結果は以下になります!
count(distinct mame)|
--------------------+
3|
まとめ
これで基本的なSERECT文の使い方を体験できたと思います。しかし一言一句使い方を覚え切らなくても大丈夫なので安心して下さい。プログラミングの世界はカンニングOKなのです。忘れたら当ブログや参考になるブログを検索して真似すればいいわけなんです。
以下に参考記事リンクがあります。気になる記事があれば覗いてみてください。
参考になれば幸いです。本日も最後までお読みくださりありがとうございます!!!

