なぜこの記事を書いたのか
自分が忘れたとき見返せるからです!笑
それにMySQL初心者さんにも共有したいので!
独り言が多いですが、わかりやすく書いていきます。
初投稿というわけもあり、見にくいところもあるかと思いますがお許しください。
対象者
- MySQL初心者
- SQLキライだけど友だちになりたい方
- つまずいちゃった人
できるか不安
大丈夫です!
僕でもできるのだから。
気難しい操作をするわけでもないので「へー、そうやるのか」程度でやっていきましょー!
それではやっていこう!
まずは今回使用するテーブルの項目の型です。
商品CD | 商品名 | 値段 | 発売日 | |
---|---|---|---|---|
型 | char(3) | varchar(20) | int | date |
- char/varchar:文字型のこと。()内の数値は最大格納文字数
- int:数値
- date:日付のこと。年月日
今回紹介したい範囲でないので簡単に説明をしました。
型については今日覚える必要はないです。が
一度自分で調べながらテーブル作ると覚えられます
型について詳しく知りたい場合は調べてください。
実際のテーブルです。
+--------+--------------------+---------+------------+
| 商品CD | 商品名 | 値段 | 発売日 |
+--------+--------------------+---------+------------+
| 128 | いちごジャム | 400 | 2023-09-13 |
| 151 | いちごパイ | 300 | 2023-06-22 |
| 256 | ブルーベリージャム | 400 | 2023-02-14 |
| 314 | バナナジュース | 200 | 2023-10-13 |
| 512 | りんご雨発生器 | 100000 | 2099-12-25 |
| 777 | りんごジュース | 200 | 2023-05-27 |
| 840 | おせんべい | 100 | 2023-06-22 |
| 999 | りんごの車 | 5000000 | 2099-11-28 |
+--------+--------------------+---------+------------+
先日バイト先の人から、いちごパイ、お菓子をもらったので、いちご...?フルーツだ!という風になりこのような項目になりました笑
僕と同じDBでやりたい方はこれをSQLにコピペしてください
貼った後エンター忘れずに。
create database sample;
use sample;
create table 商品(
商品CD char(3) primary key,
商品名 varchar(20) not null,
値段 int not null,
発売日 date not null);
insert into 商品 values("151","いちごパイ",300,"2023/6/22");
insert into 商品 values("840","おせんべい",100,"2023/6/22");
insert into 商品 values("777","りんごジュース",200,"2023/5/27");
insert into 商品 values("314","バナナジュース",200,"2023/10/13");
insert into 商品 values("128","いちごジャム",400,"2023/9/13");
insert into 商品 values("256","ブルーベリージャム",400,"2023/2/14");
insert into 商品 values("512","りんご雨発生器",100000,"2099/12/25");
insert into 商品 values("999","りんごの車",5000000,"2099/11/28");
これでsampleデータベースと商品テーブルとその情報が作れましたね!
そしたらuse DB名;
つまりuse sample;
と打ち込みましょう。
これでsampleデータベースに切り替えられました。
またmysqlでは文の最後に ; を挿入して実行してください。
CUI環境だと ; がないと実行できません。
疲れたって?ここからが本番ですよ。
SELECT・FROM句
簡単にいうと、
FROMは、 取得したいテーブル名を記述するところ。
SELECTは、FROMで指定したテーブルの、取得したい項目名を記述するところ。です。
書いてみましょう
書き方はselect 項目名 from テーブル名;
です。
商品名を表示させてみましょうか。
また書くにあたって、select や from などの 「句」 と呼ばれるものは大文字でも小文字でもどちらでもOKです。
僕は小文字派です。
あと空白は半角でないとエラーになるので注意してください。
select 商品名 from 商品;
を打ってエンターです
mysql> select 商品名 from 商品;
+--------------------+
| 商品名 |
+--------------------+
| いちごジャム |
| いちごパイ |
| ブルーベリージャム |
| バナナジュース |
| りんご雨発生器 |
| りんごジュース |
| おせんべい |
| りんごの車 |
+--------------------+
どうですか?できましたか?
簡単ですよね。
え?基礎のキだからできて当然?
そんな一丁前なことを言えるのは成長した証です!
お次は2つの項目を表示させてみましょうか
カンマで区切ってください。「,」 ですよ
何でも構いませんが僕は商品名と発売日を表示させてみます!
select 商品名,発売日 from 商品;
mysql> select 商品名,発売日 from 商品;
+--------------------+------------+
| 商品名 | 発売日 |
+--------------------+------------+
| いちごジャム | 2023-09-13 |
| いちごパイ | 2023-06-22 |
| ブルーベリージャム | 2023-02-14 |
| バナナジュース | 2023-10-13 |
| りんご雨発生器 | 2099-12-25 |
| りんごジュース | 2023-05-27 |
| おせんべい | 2023-06-22 |
| りんごの車 | 2099-11-28 |
+--------------------+------------+
select 発売日,商品名 from 商品;
にしてあげれば最初に発売日が表示されるようになります。
次はすべての項目をがんばって表示させてみましょう。
商品CD、商品名、値段、発売日ですね。
select 商品CD,商品名,値段,発売日 from 商品;
mysql> select 商品CD,商品名,値段,発売日 from 商品;
+--------+--------------------+---------+------------+
| 商品CD | 商品名 | 値段 | 発売日 |
+--------+--------------------+---------+------------+
| 128 | いちごジャム | 400 | 2023-09-13 |
| 151 | いちごパイ | 300 | 2023-06-22 |
| 256 | ブルーベリージャム | 400 | 2023-02-14 |
| 314 | バナナジュース | 200 | 2023-10-13 |
| 512 | りんご雨発生器 | 100000 | 2099-12-25 |
| 777 | りんごジュース | 200 | 2023-05-27 |
| 840 | おせんべい | 100 | 2023-06-22 |
| 999 | りんごの車 | 5000000 | 2099-11-28 |
+--------+--------------------+---------+------------+
できましたか?
にしても良いテーブルだなぁ...
ん?全部の項目なんて打ってられないって?
項目名を 「*」 にして実行してみてください
select * from 商品;
です。
mysql> select * from 商品;
+--------+--------------------+---------+------------+
| 商品CD | 商品名 | 値段 | 発売日 |
+--------+--------------------+---------+------------+
| 128 | いちごジャム | 400 | 2023-09-13 |
| 151 | いちごパイ | 300 | 2023-06-22 |
| 256 | ブルーベリージャム | 400 | 2023-02-14 |
| 314 | バナナジュース | 200 | 2023-10-13 |
| 512 | りんご雨発生器 | 100000 | 2099-12-25 |
| 777 | りんごジュース | 200 | 2023-05-27 |
| 840 | おせんべい | 100 | 2023-06-22 |
| 999 | りんごの車 | 5000000 | 2099-11-28 |
+--------+--------------------+---------+------------+
便利でしょう!!アスタさまは偉大です!
これでSELECT,FROM句はマスターですね。
よくできました。えらいです。
WHERE句
え、selectとfromで表示できたしいいんじゃないの?なんて思いました?
特定のデータだけを表示させたい場合はどうしますか?
いちいち探してたら大変です。
それを解決してくれるのがWHERE句
正しいWHERE句を書いてあげればきっと僕らの役に立ってくれます。
使用するにあたって比較演算子を扱うのですが...
覚えようとしなくていいです。
使っていくうちに自然と覚えていきます。
比較演算子
これです
比較演算子 | 条件式 | 意味 |
---|---|---|
> | a>b | aはbより大きい |
>= | a>=b | aはbより大きいか等しい |
< | a<b | aはbより小さい |
<= | a<=b | aはbより小さいか等しい |
= | a=b | aとbは等しい |
!= <> | a!=b / a<>b | aとbは等しくない |
今回はWHERE句の使い方が分かればいいのでここまでにします。
どんな時に使うの?
データを抽出したいとき。。。
では値段が500円以下のものですべての項目を表示させましょう。
500円以下ということはwhere 値段<=500
ですね。
つまりselect * from 商品 where 値段<=500;
です。
mysql> select * from 商品 where 値段<=500;
+--------+--------------------+------+------------+
| 商品CD | 商品名 | 値段 | 発売日 |
+--------+--------------------+------+------------+
| 128 | いちごジャム | 400 | 2023-09-13 |
| 151 | いちごパイ | 300 | 2023-06-22 |
| 256 | ブルーベリージャム | 400 | 2023-02-14 |
| 314 | バナナジュース | 200 | 2023-10-13 |
| 777 | りんごジュース | 200 | 2023-05-27 |
| 840 | おせんべい | 100 | 2023-06-22 |
+--------+--------------------+------+------------+
見事値段が500円以下のデータのみ抽出されました。
次は200円のもので商品名と値段だけを表示させてみましょうか。
商品名と値段だけってことはselect 商品名,値段 from 商品
ですね。
そこにWHERE句で値段が200円のものだけだからwhere 値段=200
になる。
これらを組み合わせるとselect 商品名,値段 from 商品 where 値段=200;
になります。
mysql> select 商品名,値段 from 商品 where 値段=200;
+----------------+------+
| 商品名 | 値段 |
+----------------+------+
| バナナジュース | 200 |
| りんごジュース | 200 |
+----------------+------+
いいですね!
あと商品名と発売日をやって終わりにしましょう。
いまやった値段はint型なので数値です。
文字列を指定する場合は"で囲ってあげないといけません。
"いちごジャム"
のような感じです。
やってみましょう
商品名がいちごパイのデータをすべて表示してみよう。
where 商品名="いちごパイ"
ですね。
なのでselect * from 商品 where 商品名="いちごパイ";
+--------+------------+------+------------+
| 商品CD | 商品名 | 値段 | 発売日 |
+--------+------------+------+------------+
| 151 | いちごパイ | 300 | 2023-06-22 |
+--------+------------+------+------------+
できましたか?
エラーが出た場合はスペルミスがないか、全角空白が含まれていないか、セミコロン等の記号をつけ忘れていないか確認してください。
LIKEという大変便利なものもあるのですが、次回やろうかと思います。
次は発売日(日付)ですね。
日付であるdate型の指定は"年-月-日"
なのです。がこの「-」は「@」「/」「.」に置き換えて入力してもいいのです。
例として2023年12月25日を指定するとしましょう
(あー、今年のクリスマスもどうせ何も予定ないんだろうな。)
例where 発売日 = "2023/12/25"
where 発売日 = "2023@12@25"
where 発売日 = "2023.12.25"
また数値として入力もできます。
例where 発売日 = 20231225
おすきな記号で、方法で入力してください。
僕は記号派です。見やすいので。
発売日が2023年6月22日のデータをすべて表示させましょう。
where 発売日 = "2023-06-22"
ですね。
なのでselect * from 商品 where 発売日="2023-06-22";
になります。
実行してみましょう!
mysql> select * from 商品 where 発売日="2023-06-22";
+--------+------------+------+------------+
| 商品CD | 商品名 | 値段 | 発売日 |
+--------+------------+------+------------+
| 151 | いちごパイ | 300 | 2023-06-22 |
| 840 | おせんべい | 100 | 2023-06-22 |
+--------+------------+------+------------+
できましたか?
涙が出てくるテーブルです。
上出来です。
最後に発売日が2023年12月25日以前のデータを抽出してみましょう。
以前はその日も含みます。
なのでselect * from 商品 where 発売日<="2023-12-25";
ですね。
走らせてみましょう
mysql> select * from 商品 where 発売日<="2023-12-25";
+--------+--------------------+------+------------+
| 商品CD | 商品名 | 値段 | 発売日 |
+--------+--------------------+------+------------+
| 128 | いちごジャム | 400 | 2023-09-13 |
| 151 | いちごパイ | 300 | 2023-06-22 |
| 256 | ブルーベリージャム | 400 | 2023-02-14 |
| 314 | バナナジュース | 200 | 2023-10-13 |
| 777 | りんごジュース | 200 | 2023-05-27 |
| 840 | おせんべい | 100 | 2023-06-22 |
+--------+--------------------+------+------------+
できましたか?上出来です。おめでとうございます。
もっといろいろ試してみてください。新たな発見が見るかるかもしれません。
さいごに
僕のお話にお付き合いいただきありがとうございます!
書くの好きなのでついたくさん書いてしまいました。
自分自身がガッチガチの技術記事がどうもわかりにくくて苦手に感じるのでお話も交えながら、できるだけわかりやすく書いてみました。
一緒にMySQLライフを楽しみましょう。
では次の投稿でお会いしましょう!!