はじめに
最近SQLの学習を始めたので、その内容を整理していきます。
本記事の概要
どんな人に読んで欲しいか
- SQLの学習を始めたばかりの人
- データの取得・加工の基本的な操作方法をまだ整理できていない人
この記事に書くこと
- SQLを使ってデータベースから特定のデータを取得する基本的なクエリの書き方
- 取得したデータを並び替えるなど、基本的なデータの加工方法
目次
SELECTFROMWHEREORDER BY, LIMIT
今回用いるテーブルデータ
お惣菜屋さんの売り上げデータと想定します。販売した商品名と販売者名、売り上げ金額から構成されています。
sales_data
| food | name | sales |
|---|---|---|
| ローストビーフ | あさひ | 2000 |
| ハンバーグ | たかと | 1000 |
| ローストビーフ | たつや | |
| ハンバーグ | ゆうき | 1000 |
| ローストビーフ | たかと | 3000 |
| ローストビーフ | たつや | 1000 |
| ハム | たかと | 500 |
具体的な内容
SELECT
まず一番初めにSELECTを使ってテーブルのどのカラムからデータを取得するかを指定します。例えば、foodのカラムを取り出したいときは、
SELECT food
とします。
しかし、このままではデータを取得することはできません。どのテーブルデータなのかを指定していないからです。そこで次のFROMを使います。
FROM
先ほどカラムを指定するためにSELECTを使用しました。ただ、カラムを指定するには、どのテーブルデータから取り出すのかを明示しなければなりません。その時に用いるのがFROMです。今回であれば、sales_dataのテーブルを使っているので次のように指定します。
SELECT food
FROM sales_data;
最後にセミコロン;がついていると思います。これはここまでがクエリであるということをデータベースに伝える役割をしています。なので、最後に必ずセミコロンを忘れないようにします。
個人的にはSELECTとFROM順番逆の方がわかりやすいなと思ったのですが、最初にSELECTを持ってくるらしいです。
※クエリ:データベースに対して情報を取得したり、データを操作するための要求や命令文のことを指します。
実行結果
| food |
|---|
| ローストビーフ |
| ハンバーグ |
| ローストビーフ |
| ハンバーグ |
| ローストビーフ |
| ローストビーフ |
| ハム |
このようにfoodのカラムを取り出すことができました。
複数のカラムを取り出したい時
この場合はSELECTの時に複数のカラムを指定するだけでOKです。
SELECT food, name
FROM sales_data;
実行結果
| food | name |
|---|---|
| ローストビーフ | あさひ |
| ハンバーグ | たかと |
| ローストビーフ | たつや |
| ハンバーグ | ゆうき |
| ローストビーフ | たかと |
| ローストビーフ | たつや |
| ハム | たかと |
全てのカラムを取り出したい時
この場合は*を用いてSELECT *とすればOKです。
WHERE
これまではテーブルのカラムを指定してデータを取り出す基本的な操作のみでした。ここからは、さらに条件を絞ってデータを取り出す方法を紹介します。その基本となるのがWHEREです。
WHEREで用いる主なメソッドの一覧
- 等号:
= - 比較演算子:
<=,<,>,>= - LIKE演算子:
name LIKE - ワイルドカード:
% - NOT演算子:
NOT IS NULL- AND,OR演算子:
AND,OR
ここでは特に、LIKE演算子とワイルドカード、IS NULL、AND,OR演算子について整理します。
LIKE演算子とワイルドカード
カラム内の特定の文字列と一致するデータだけを取り出したいときに用います。例えば、sales_dataの「たかと」だけのデータを取り出したい時は以下のように実行します。
SELECT *
FROM sales_data
WHERE name LIKE '%たかと%';
実行結果
| food | name | sales |
|---|---|---|
| ハンバーグ | たかと | 1000 |
| ローストビーフ | たかと | 3000 |
| ハム | たかと | 500 |
このようにして「たかと」のみのデータを取得することができました。この時%たかと%と指定しましたが、%のことをワイルドカードと呼びます。ワイルドカードを使うことで指定した文字列を含むデータを取得することができます。
ワイルドカードの使い方
-
'%指定した文字列%':指定した文字列が含むデータを全て取得する -
'指定した文字列%':前方一致(%以降はどんな文字列にも一致する) -
'%指定した文字列':後方一致(%以前はどんな文字列にも一致する)
IS NULL
何もデータが入っていないデータを取り出すためのものになります(NULLはデータが入っていないという意味)。今回であれば、このように
| food | name | sales |
|---|---|---|
| ローストビーフ | あさひ | 2000 |
| ハンバーグ | たかと | 1000 |
| ローストビーフ | たつや | |
| ハンバーグ | ゆうき | 1000 |
| ローストビーフ | たかと | 3000 |
| ローストビーフ | たつや | 1000 |
| ハム | たかと | 500 |
「たつや」の売り上げが記録されていません。このデータを取り出そうと思ったら、
SELECT *
FROM sales_data
WHERE sales IS NULL;
実行結果
| food | name | sales |
|---|---|---|
| ローストビーフ | たつや |
逆に記録されているもののみのデータを取り出すときはNOTを使って次のように書きます。
SELECT *
FROM sales_data
WHERE sales IS NOT NULL;
実行結果
| food | name | sales |
|---|---|---|
| ローストビーフ | あさひ | 2000 |
| ハンバーグ | たかと | 1000 |
| ハンバーグ | ゆうき | 1000 |
| ローストビーフ | たかと | 3000 |
| ローストビーフ | たつや | 1000 |
| ハム | たかと | 500 |
AND,OR演算子
WHEREに複数の条件を指定したいときに用います。ANDであればWHERE 条件1 AND 条件2とすることで、条件1と条件2を共に満たすデータを取り出すことができます。
例えば、商品がローストビーフかつ、売り上げが2000円以上のデータを取り出したいときはANDを使って次のように条件を指定します。
SELECT *
FROM sales_data
WHERE food = 'ローストビーフ' AND sales >= 2000;
実行結果
| food | name | sales |
|---|---|---|
| ローストビーフ | あさひ | 2000 |
| ローストビーフ | たかと | 3000 |
ORに関してもANDと同様にして条件を指定します。例えば、「あさひ」または「たかと」のデータを取り出したいときは、
SELECT *
FROM sales_data
WHERE name = 'あさひ' OR name = 'たかと';
実行結果
| food | name | sales |
|---|---|---|
| ローストビーフ | あさひ | 2000 |
| ハンバーグ | たかと | 1000 |
| ローストビーフ | たかと | 3000 |
| ハム | たかと | 500 |
ORDER BY, LIMIT
この2つはデータの並び替えをしたい時に用います。
ORDER BY
例えば、売り上げの高い順に並べたいときは、次のように書きます。
SELECT *
FROM sales_data
ORDER BY sales DESC;
実行結果
| food | name | sales |
|---|---|---|
| ローストビーフ | たかと | 3000 |
| ローストビーフ | あさひ | 2000 |
| ハンバーグ | たかと | 1000 |
| ハンバーグ | ゆうき | 1000 |
| ローストビーフ | たつや | 1000 |
| ハム | たかと | 500 |
降順:DESC
昇順:ASC
また、ORDER BYはWHEREと併用が可能です。
Pythonのsorted()メソッドのような感じ。
LIMIT
これは最大で何件データを取得するかを指定する際に使います。先頭から数えていくつだけとるといったような感じです。Pythonの.head()のようなイメージです。クエリの末尾に記述することで、取得するデータの数を指定できます。
先ほどのORDER BYで並べ替えたデータの先頭3件を取り出すとすると、
SELECT *
FROM sales_data
ORDER BY sales DESC
LIMIT 3;
実行結果
| food | name | sales |
|---|---|---|
| ローストビーフ | たかと | 3000 |
| ローストビーフ | あさひ | 2000 |
| ハンバーグ | たかと | 1000 |
まとめ
今回はSQLの基本の基本を整理しました。
まず最初にSELECTで取り出したいカラムを指定、次にFROMを使ってどのテーブルデータなのかを指定します。その後にWHEREやLIMITなどを用いて条件を追加していくという流れになります。