はじめに
最近SQLの学習を始めたので、その内容を整理していきます。
本記事の概要
どんな人に読んで欲しいか
- SQLの学習を始めたばかりの人
- データの取得・加工の基本的な操作方法をまだ整理できていない人
この記事に書くこと
- SQLを使ってデータベースから特定のデータを取得する基本的なクエリの書き方
- 取得したデータを並び替えるなど、基本的なデータの加工方法
目次
SELECT
FROM
WHERE
ORDER 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
などを用いて条件を追加していくという流れになります。