MySQLでSELECTを使ってデータを取得・確認する方法【初心者向け】
MySQLで「データを取得・確認する方法」を初心者向けに解説した記事です。データを取得するには【SELECT】の構文を使います。MySQLの基本中の基本ですので、しっかりと覚えておきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
MySQLの初心者向けに、基本的な使い方を解説する記事です。
今回は、MySQLでSELECTを使ってデータを取得・確認する方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
SELECT文はMySQLの基本中の基本ですので、しっかりと覚えておきましょう。
他のレコードの操作方法は下記の記事をご覧ください。
目次
そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。
今回の記事の内容は動画でもご覧いただけます。
テキストよりも動画の方が理解しやすいという場合はぜひご覧ください。
田島メンター!ブログなどにアクセスしたとき、最新の5件の記事などが表示されてますけど、あれはどうやってるんですか?
SELECT文でデータベースから、データを取得して表示してるんだよ。
SELECT文は検索に使うSQLなんですか?
そうなんだ。SELECT文の書き方を見てみよう!
レコードを取得・確認する
MySQLでINSERT INTOを使ってレコードを追加する方法では、最終的に次のような情報が入ったテーブルを作るため、sampledb というデータベース上でuser テーブルを作り、レコードを1つ追加しました。
ここでは、userテーブルに実際にレコードが入ったのかを「select」というコマンドを使って確認します。
select フィールド名 from テーブル名 where 抽出条件;
フィールド1つ1つを確認してもいいのですが、ここでは「*」を使って一度にすべてを確認したいと思います。
※「*」アスタリスクによるすべてのフィールド(列)の取得は、フィールドが多い場合などに負荷がかかってしまいます。すべてのフィールドを取得する必要がない場合は、アスタリスクを使わず取得したいフィールドを指定するとパフォーマンスの改善につながります。
select * from user;
レコードが1つ確認できましたね。
それでは、残りの2つのレコードを追加していきましょう。
insert into user(username,email,password) values(‘suzuki’,’suzuki@techacademy.jp’,’bbbbbb’);
insert into user(username,email,password) values(‘sato’,’sato@techacademy.jp’,’cccccc’);
レコードが追加できたら、「select」で確認します。
select * from user;
3つのレコードがすべて確認できました。
レコードの表示数を制限する
レコードの表示数を制限するには(LIMIT句)
SELECT文ではLIMIT句を使って表示するレコードの数を制限できます。
LIMIT句により表示するレコードの数を一定にできます。
表示するレコードの数を制限することによって、件数が多くてもページング(一定数ごとにページ単位で表示すること)で見やすく表示でき、データ取得時間も短縮できます。
LIMIT句は以下のように、SELECT文の中で指定します。
select フィールド名 from テーブル名 limit レコード件数;
以下の画面は、sampledbデータベースのuserテーブルから、LIMIT句で表示数を2件に制限した例です。
userテーブルには3件のレコードがありますが、最初の2件目までを表示しています。
指定したレコードから表示する
LIMIT句を使えば表示する件数だけでなく、何件目から表示するかも指定できます。
LIMIT句で、取得位置を指定するには次のように指定します。
select フィールド名 from テーブル名 limit レコード位置, レコード件数;
取得するレコード位置は0から始まるので1件目なら0、2件目なら1です。
たとえば10件目から5件のレコードを取得したい場合は、「limit 9, 5」と指定します。
以下の画面は、sampledbデータベースのuserテーブルから、LIMIT句で3件目以降を取得した例です。
LIMIT句で取得位置が「2」なので、3件目から表示されています。
またLIMIT句の表示数が「5」に設定されていますが、userテーブルのレコードは3件しかないので1件だけ表示されています。
まとめ
LIMIT句を使って取得を始める件数と表示する件数を指定して、レコードの取得数を制限できます。
検索サイトなどで使われているページングを行うときに便利です。
条件式を組み合わせてレコードを取得する
レコードの取得に条件を付けるには(WHERE句)
SELECT文で条件をつけた取得を行うには、WHERE句を使います。
WHERE句の使い方は以下ように指定します。
select フィールド名 from テーブル名 where 条件式;
※WHERE句は省略できます。省略するとすべてのレコードを取得します。
たとえば、idフィールドの値が 「1」であるレコードを取得するなら、WHERE句に「where id = 1」と指定します。
以下の画面は、userテーブルからidフィールドの値が「1」であるレコードを取得した結果です。
userテーブルには3件のレコードが存在しますが、条件にidフィールドが「1」であるレコードを指定したので、該当するレコードのみが取得されます。
以下のような演算子を、WHERE句の条件式で使います。
演算子 | 意味 | 条件式の例 | |
---|---|---|---|
= | 等しい | id = 1 | idが1 |
< | 小さい | id < 10 | idが10より小さい (10を含まない、10より小さい数) |
> | 大きい | id > 5 | idが5より大きい (5を含まない、5より小さい数) |
<= | 以下 | id <= 10 | idが10以下 (10を含んだより小さい数) |
>= | 以上 | id >= 5 | idが5以上か (5を含んだより大きい数) |
!= <> |
等しくない | id != 3 | idが3ではない |
※今回はSELECT文で条件を指定するためにWHERE句を使っていますが、SELECT文以外のDELETE文やUPDATE文で条件を指定するためにも使えます。
文字列であいまいな条件を作る
文字列があるフィールドを条件式に指定するには、「=」(等しい)演算子の他にLIKE演算子が使えます。
LIKE演算子はパターンで条件を指定するので、「先頭だけ」「含まれる」のようなあいまいな条件を指定できます。
LIKE演算子は以下のように使います。
select フィールド名 from テーブル名 where フィールド名 like ‘パターン文字列’;
※パターン文字列は ‘(シングルクォーテーション)で囲みます。
たとえばusernameフィールドの「s」から始まるレコードを取得するには「where username like ‘s%’」と指定します。
パターン文字列にある「%」は、LIKE演算子で使用されるワイルドカードという特定のパターンに一致することを表す特殊な記号です。
以下の画面は、userテーブルからusernameフィールドの「s」から始まるレコードを取得した結果です。
userテーブルのusernameフィールドに、「s」から始まる「suzuki」と「sato」が表示されています。
LIKE演算子で使用できるワイルドカードには、以下の2つがあります。
演算子 | 意味 | 条件式の例 |
---|---|---|
% (パーセント) |
0個以上の何かの文字 | name like `%food%` nameに「food」が含まれる値。 food、foodcoat、seafoodなど |
_ (アンダースコア) |
何か1つの文字 | name like `_food` nameが何かの1文字に続いて「food」で終わっている値。 2food、efoodなど。「food」だけのレコードは含まない。 |
※ワイルドカードの「_」は複数使用でき、続けて任意の何文字かを指定できます。たとえば、「like ___food」とすると「seafood」などのように任意の3文字に続く「food」を取得できます。
複数の条件を使う
WHERE句には複数の条件式を指定できます。
AND演算子は両方の条件式が成立するレコードを取得します。
OR演算子はいずれかの条件が成立するレコードを取得します。
AND演算子とOR演算子の使い方は以下の通りです。
select フィールド名 from テーブル名 where 条件式1 and(またはor) 条件式2;
以下の画面は、AND演算子やOR演算子を使ってレコードを取得した結果です。
最初の結果は、AND演算子によりusernameフィールドが「s」から始まりかつidが3より小さいレコードを取得しています。
次の結果は、OR演算子によりusernameフィールドが「s」から始まるかまたはemailフィールドが「y」から始まるレコードを取得しています。
WHERE句でAND演算子やOR演算子を複数でつなげて条件をさらに増やせます。
1つのSELECT文で複数のANDやOR演算子をつなぐ場合、( ) で囲って優先順位を指定します。
たとえばemailフィールドが「.jp」か「.com」で終わるidフィールドが10以上のレコードを取得するには、「where (email like ‘%.jp’ or email like ‘%.com’) and id >= 10」のように指定します。
おわりに
今回の記事は以上です。
SELECTを使ってデータを取得・確認できたら、次はMySQLでUPDATEを使ってレコードを更新してみてください。
フィールド名の指定、テーブルの指定、抽出条件の指定と、少し複雑ですね。
確かに。まずは練習として*(アスタリスク)を使ったよ。フィールド名にこれを指定すると全部のフィールドという意味になるんだ。
全部取得したほうが楽そうですね。
あんまり大きなデータになってなければ、悪くないね。後は、抽出条件を指定すると、大きい順に並べたりいろいろできるんだよ。
PHPを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPHP/Laravelコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、PHP/Laravelを使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!