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が次のような形なら、
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理解への最短ルートです。

