フルスタックエンジニアのノウハウ
2020.12.03    2021.01.04

データベース操作の基礎を学ぼう!SELECT編

この記事の動画版はこちら(画像クリックでYoutubeに飛びます)

チャンネル登録お願いします!



今回は、データベース操作の基礎として「SELECT文の使い方」をご説明していきたいと思います。


データベースの基礎知識については、こちらの記事でご説明しています。


関連記事

データベースの基礎知識【実例を交えて説明】


その動画の中でもご説明していますが、プログラムからデータベースに対して行う主な命令は以下の「4種類」です。


①データを取得する
②データを新規登録する
③データを更新する
④データを削除する


そして、実際にこれらの操作を行う際は、データベースの命令言語である「SQL」という言語を使って行います。


これら4つには、それぞれ対応する命令文があり、このようになっています。


①データを取得する  (SELECT文)
②データを新規登録する(INSERT文)
③データを更新する  (UPDATE文)
④データを削除する  (DELETE文)


つまり、これら4種類のSQLの書き方を理解すれば、プログラムからデータベースに対して行う

大抵の操作は出来るようになります。


実際にWebプログラムを作っていく際も、これら4つのSQL文を駆使しながら作っていくことになるので、しっかり覚えていきましょう!


ということで、今回は1つ目の「SELECT文」について、初心者向けに説明していきます。



SELECT文とは?


SELECT文を使うと、データベースに登録されているデータを取り出す(取得する)ことが出来ます。


単純に全データを取り出すことも、条件を指定して検索したデータだけを取り出すことも可能です。


データベースには、データを種類ごとに保存するための「テーブル」があり、テーブルの中はこのように表形式になっています。


表の各列のことを「カラム」といいます。




SELECT文は、このテーブルに登録されているデータを取り出します。



SELECT文の基本


SELECT文は、このような書式になっています。


まず、FROMの後にデータを取得するテーブル名を指定します。


SELECT [取得するカラム名] FROM [テーブル名]


例えば、このようなテーブルからデータを取り出したい場合、FROMの後にはテーブル名である「product」を指定します。




そして、SELECTの後ろには取得したいカラム名を指定します。


SELECT [取得するカラム名] FROM product


例えば、商品名が保存されている「name」カラムを取り出したいなら、このように書きます。


SELECT name FROM product


取り出したいカラムが複数ある場合は、カンマ区切りで列挙出来ます。


例えば、nameとpriceを取り出したいならこんな感じです。


SELECT name, price FROM product


テーブルの全てのカラムを取り出したい場合は、「*」で指定することも出来ます。


SELECT * FROM product


では、ユーザー情報が保存されている、このようなテーブルがあったとして、このテーブルから「email」カラムだけを取り出したい場合は、どのように書くでしょう?


考えてみてください。




分かりましたか?


正解は、このようになります。


SELECT email FROM user


ちなみに、SELECTやFROMは大文字で書いていますが、ここは大文字でも小文字でも同じように動きます。


僕は、SQLの文法として表記するこのような固定の文字は大文字で書くことが多いですが、この辺りは会社やプロジェクトのコーディング規約に従いましょう。



オプション①「検索条件を指定する方法」


では次に、テーブルの全データを取り出すのではなく、検索条件を指定して、マッチするデータだけを取り出してみましょう。


検索条件を指定するには、テーブル名の後に「WHERE」という指定を追加します。


WHEREの後には、「カラム名=値」といった形で、検索条件を指定出来ます。


SELECT * FROM product WHERE [検索条件]


例えば、このように書くと


SELECT * FROM product WHERE name = 'ステッカー'


userテーブルの「name」カラムが「ステッカー」というデータだけが取り出されます。



=の部分は比較演算子といって、=以外にも色々な指定方法があります。


=   (等しい)
!=  (等しくない)
>   (より大きい)
<   (より小さい)
>= (大きいか等しい)
<= (小さいか等しい)


例えば、商品価格(price)が1000より大きいデータだけを取り出すなら、このように書きます。


SELECT * FROM product WHERE price > 1000


また、条件は複数指定することも出来ます。


条件を複数指定する場合は「AND(かつ)」か「OR(または)」で区切ります。


例えば、このように書くと


SELECT * FROM product WHERE name = 'ステッカー' AND price > 1000


商品名が「ステッカー」かつ、価格が「1000円以上」のデータだけが取り出されます。



オプション②「ソート条件を指定する方法」


取り出したデータは、何も指定しなければ「登録した順番」で取得されますが、並び順を指定して取り出すことも出来ます。


ソート条件を指定する場合は、ORDER BYという指定を追加します。


SELECT * FROM product ORDER BY ソートしたいカラム名


ORDER BYの後にカラム名を指定すると、そのカラムを基準にデータをソートして取り出してくれます。


例えば、このように書くと、価格の安い順にソートして取り出してくれます。


SELECT * FROM product ORDER BY price



並び順を「降順」にしたい場合は「DESC」というキーワードを付けます。


SELECT * FROM product ORDER BY price DESC


こうすると、価格の高い順にソートして取り出してくれます。




オプション③「取得範囲を指定する方法」


何も指定しなければ、検索条件にマッチしたデータを「全件」取り出しますが、LIMITという指定を付けると、取得するデータの件数を制限することも出来ます。


SELECT * FROM product LIMIT 3


このように書くと、productテーブルから「3件だけ」取り出すことが出来ます。



また、さらにOFFSETという指定を付けると「何番目のデータから取り出すか」を指定することも出来ます。


SELECT * FROM product LIMIT 3 OFFSET 10


例えば、このようにすると、先頭から10件のデータは無視され、11件目のデータから3件分が取得されます。



なお、これらのオプションは組み合わせることも出来ます。


組み合わせる場合は、説明した順番で追加していきます。


SELECT * FROM product WHERE name = 'ステッカー' ORDER BY price LIMIT 3 OFFSET 10



まとめ


以上が、SELECT文の基本的な使い方になります。


SELECT文では、さらに高度な使い方として、複数のテーブルから一気にデータを取得したり、データをグルーピングして集計したりといったことも行えますが、まずは、今回説明した基本的な書き方(テーブル、カラム指定の方法)と、3つのオプション指定方法を理解して、テーブルから自在にデータを取り出せるように訓練しましょう。


SELECT文を使えるようになることで、実際のWebアプリ開発では、「データの一覧表示」や「詳細表示」系の機能が作れるようになります。


例えば、ネットショップの「商品一覧」や「商品詳細」などの画面は、SELECT文を使ってデータが取得されています。


Webアプリを作る上では、かなり頻繁に使うことになるので、しっかりマスターしていきましょう!


おすすめ記事