Clicky

MySQL入門|SELECT・FROM・WHEREの基本を初心者向けにやさしく解説

Database(データベース)
Database(データベース)
この記事は約8分で読めます。

※記事中に広告情報を含みます。

スキルを手に入れた時、人は強くなれる。
Youtubeでスキルアップを始める 電子書籍でスキルアップを始める

MySQLをこれから学び始める方にとって、最初につまずきやすいのが「SQL文が何をしているのか分からない」という点です。英単語が並んでいるだけに見えて、難しく感じる方も多いかもしれません。

ですが、MySQLの基本はとてもシンプルです。どのデータを、どこから、どんな条件で取り出すのか。この流れが分かれば、SQLは一気に読みやすくなります。

この記事では、次のSQL文を例にしながら、MySQL入門として押さえておきたい基本を初心者向けに解説します。

SELECT ID, post_type, post_status, post_name
FROM wp_posts
WHERE post_name REGEXP '^[0-9]{10,11}-[0-9]+$'
ORDER BY post_name;

MySQLとは何か

MySQLは、データベースを管理するための代表的なシステムです。Webサイトや業務システム、アプリなど、さまざまな場面で使われています。

たとえばWordPressも、投稿データやユーザー情報、設定情報などをMySQLに保存しています。画面上では記事や固定ページとして見えていても、裏側ではMySQLに保存されたデータを読み出して表示しています。

MySQLを使うときに必要になるのが、SQLという命令文です。SQLを書くことで、保存されているデータを検索したり、追加したり、更新したりできます。

SQLの基本は「どこから、何を、どう探すか」

MySQL入門でまず覚えたいのは、SQL文の読み方です。特に最初は次の3つを理解すると、一気に分かりやすくなります。

SELECTは「何を表示するか」
FROMは「どこから取るか」
WHEREは「どんな条件で絞るか」

つまり、SQLは次のような流れで読めます。

「このテーブルから、この項目を、この条件で取り出してください」

この形を理解しておくと、ほとんどの基本的なSQL文を読めるようになります。

実際のSQL文を見ながら理解しよう

今回のSQL文は次のとおりです。

SELECT ID, post_type, post_status, post_name
FROM wp_posts
WHERE post_name REGEXP '^[0-9]{10,11}-[0-9]+$'
ORDER BY post_name;

このSQL文は、WordPressのデータベースにある投稿データの中から、特定のパターンに一致するスラッグを持つデータを一覧表示するためのものです。

ぱっと見では難しそうですが、1行ずつ分解すると意味ははっきりしています。

SELECTの意味

最初の行にあるSELECTは、表示したい項目を指定する命令です。

SELECT ID, post_type, post_status, post_name

ここでは、4つの項目を表示するよう指定しています。

IDは投稿ごとの番号です。
post_typeは投稿タイプです。通常投稿ならpost、固定ページならpageなどが入ります。
post_statusは公開状態です。publishなら公開中、draftなら下書きです。
post_nameはスラッグです。URLの末尾に使われる文字列が入ります。

たとえばURLが次のような形なら、

Example Domain

post_nameには「05054822677-3」が入っています。

SELECTは、検索結果として何を見たいかを決める部分です。初心者のうちは、まず「表示したい列を選ぶ命令」と覚えると理解しやすいです。

FROMの意味

次の行にあるFROMは、どのテーブルからデータを取るのかを指定しています。

FROM wp_posts

この場合は、wp_postsというテーブルからデータを取得しています。

WordPressでは、記事や固定ページ、添付ファイルなどの多くの情報がwp_postsに保存されています。名前はpostsですが、通常の投稿だけではなく、さまざまな種類の投稿系データが入っています。

MySQL入門では、FROMは「対象の表を選ぶもの」と覚えると分かりやすいです。Excelで言えば、どのシートを見るかを決めるイメージに近いです。

WHEREの意味

次のWHEREは、条件を付けてデータを絞り込むためのものです。

WHERE post_name REGEXP '^[0-9]{10,11}-[0-9]+$'

ここでは、post_nameが特定の文字パターンに一致するものだけを取り出しています。

WHEREがない場合、テーブルの中にあるすべてのデータが対象になります。ですが、必要なものだけを探したいときはWHEREで条件を付けます。

たとえば、公開中の投稿だけを見たいならpost_status = ‘publish’のように書きます。特定のIDだけ見たいならID = 100のように書きます。

今回は、文字の形で絞り込むためにREGEXPが使われています。

REGEXPとは何か

REGEXPは、正規表現を使って文字列のパターンを検索するための機能です。

普通の比較なら、完全一致で探すことが多いです。たとえば、

WHERE post_name = 'sample-post'

と書けば、sample-postと完全に一致するものだけを探します。

一方でREGEXPを使うと、「このような形の文字列」という条件で検索できます。つまり、文字そのものではなく、文字の並び方で探せます。

今回の条件は次のとおりです。

'^[0-9]{10,11}-[0-9]+$'

これは少し難しく見えますが、分解すると理解できます。

正規表現の意味をやさしく解説

まず、先頭の ^ は「文字列の先頭」を表します。ここから始まるという意味です。

次の [0-9]{10,11} は、「数字が10文字または11文字続く」という意味です。たとえば、0505482267や05054822677のような数字列が当てはまります。

その次の – は、そのままハイフンです。数字の後にハイフンが必要ということです。

最後の [0-9]+ は、「数字が1文字以上続く」という意味です。-1、-2、-10のような形が該当します。

そして末尾の $ は「文字列の終わり」を表します。余計な文字が後ろに付いていてはいけない、という意味です。

つまりこの条件は、全体として見ると次のような文字列に一致します。

05054822677-1
05012345678-2
0123456789-99

逆に、次のようなものは一致しません。

05054822677
05054822677-a
abc05054822677-3
05054822677-3-test

このように、REGEXPを使うと文字列の形で柔軟に検索できます。

ORDER BYの意味

最後のORDER BYは、検索結果を並び替えるための命令です。

ORDER BY post_name;

これは、post_nameの値で昇順に並び替えるという意味です。簡単に言うと、スラッグの文字順で表示するということです。

似たデータがまとまって見えるので、重複や連番付きスラッグを確認するときに便利です。

たとえば、次のような順で並びます。

05054822677-1
05054822677-2
05054822677-3
05012345678-1

このように並ぶことで、同じ元の番号に対して複数のデータがあるかどうかを見つけやすくなります。

このSQL文は何を調べるためのものか

このSQL文は、WordPress内にある「数字だけのスラッグに連番が付いたデータ」を探すためのものです。

たとえば、元々05054822677というスラッグを使いたかったとしても、同じスラッグがすでに存在すると、WordPressは自動で05054822677-2や05054822677-3のように末尾へ番号を付けることがあります。

そのため、このSQLを使うと次のような確認ができます。

同じようなページが重複していないか
不要な自動生成ページが残っていないか
電話番号のようなスラッグが連番付きで増えていないか
削除や整理の対象がないか

WordPressを運用していると、意図しない重複ページやスラッグの増殖がSEOや管理面で問題になることがあります。そうした確認にも役立つSQLです。

MySQL入門で覚えておきたい読み方のコツ

初心者のうちは、SQLを一気に全部理解しようとしなくて大丈夫です。まずは上から順番に意味を追っていくことが大切です。

今回のSQLなら、次のように読むと分かりやすいです。

wp_postsテーブルから
ID、投稿タイプ、公開状態、スラッグを取得して
スラッグが「10桁または11桁の数字-数字」の形に一致するものだけ絞り込み
スラッグ順に並べる

このように、日本語に置き換えて読めるようになると、SQLへの苦手意識はかなり減ります。

つまずきやすいポイント

MySQL入門で多いのが、SQL文の見た目に圧倒されることです。特にREGEXPや正規表現は難しそうに見えます。ですが、SQL全体を理解する必要はありません。まずはSELECT、FROM、WHERE、ORDER BYの役割だけを押さえるだけでも十分です。

そのうえで、条件部分が少し複雑なときに「ここは文字のパターンで絞っているんだな」と分かれば、かなり実用的に読めるようになります。

また、wp_postsのようにWordPressのテーブルは名前だけでは中身が分かりにくいこともあります。こうした場合は、まずテーブルの役割を知ることから始めると理解が進みます。

MySQL入門として最初に覚えるべきこと

MySQLを学び始めたばかりの方は、次の順番で覚えるのがおすすめです。

まずはSELECTで何を取り出すかを理解すること。
次にFROMでどのテーブルを見るのかを理解すること。
その次にWHEREで条件を付ける考え方を理解すること。
慣れてきたらORDER BYで並び替えを覚えること。
さらに進んだらLIKEやREGEXPなどの検索方法を覚えること。

この順番で学ぶと、難しいところにいきなり入らず、基礎を固めながら理解できます。

まとめ

MySQL入門として今回のSQL文を見てきましたが、基本の流れはとてもシンプルです。SELECTで表示したい項目を決め、FROMで対象のテーブルを指定し、WHEREで条件を付け、ORDER BYで並び替える。この流れを理解すれば、MySQLの基礎はかなり見えてきます。

今回のSQL文は、WordPressのwp_postsテーブルから、数字の連番付きスラッグを持つデータを検索するものでした。特に重複ページやスラッグの整理、異常なデータの確認に役立つSQLです。

最初は難しく見えるSQLも、一つずつ日本語に置き換えればしっかり読めるようになります。MySQL初心者の方は、まずは短いSQL文を分解しながら意味を追う練習から始めてみてください。それが、実務で使えるSQL理解への最短ルートです。

ホーム
掲載依頼
WordPress
スキルアップ
記事カテゴリ
お問い合わせ
Youtube