エンジニアライフスタイルブログを運営しているミウラ(@miumiu06171)です。
普段はフリーランスでシステムエンジニアをしております。
今回は、初心者向けにデータベース、およびテーブルを操作するSQLの文法を紹介していきます。
本記事内のSQL文は、MAMPとMySQL Workbenchを使ったMySQL環境で動作確認しているため、同様に確認したい方はこちらの記事で環境構築を行ってください。
コメントアウト
特定のSQL文を無効にするには、以下のコメントアウトを使用します。
【書式1】
SQL文の行の先頭に「– 」(ハイフン・ハイフン・スペース)を付けることで、行をコメントアウトできます。
1 |
-- select * from <テーブル名>; |
【書式2】
SQL文を「/* */」で囲むことで、複数行をコメントアウトすることができます。
1 |
/* select * from <テーブル名>; */ |
取得(select)
テーブルから値を取得するには、select句を使用します。
テーブルのすべてのデータを取得
テーブルからすべてのデータを取得する場合、以下のように*(アスタリスク)を使用します。
【書式】
1 |
select * from <テーブル名>; |
【例】
studentslistテーブルのすべてのデータを取得する例です。
1 |
select * from studentslist; |
列を指定してデータを取得
特定の列のデータを取得するには、以下のように列名を指定します。
【書式】
1 |
select <列名1>, <列名2>, ... from <テーブル名>; |
【例】
studentslistテーブルのname列だけ取得する例です。
1 |
select name from studentslist; |
列に別名を付ける(as)
selectで出力する列名を別名に変えるには、以下の as を使用します。
【書式】
1 |
select <列名1> as <別名1>, ... from <テーブル名>; |
【例】
studentslistテーブルのname列をfullnameという別の列名にして出力する例です。
1 |
select name as fullname from studentslist; |
条件指定(where)
条件を指定してテーブルから値を取得するには、where句を使用します。
【書式】
1 |
select * from <テーブル名> where <条件>; |
【例】
studentslistテーブルの出席番号001番の生徒の情報を取得する例です。
1 |
select * from studentslist where id = '001'; |
代表的な演算子
where句で使用する代表的な演算子は、以下のとおりです。
- 「=」: 等しい
- 「>」: より大きい
- 「>=」: 以上
- 「<」: より小さい
- 「<=」: 以下
- 「<>」, 「!=」: 等しくない
- 「in」: ある値が in の後に続くセット内に含まれるかどうか
- 「not in」: ある値が in の後に続くセット内に含まれてないかどうか
- 「is null」: 値がnullであるか
- 「is not null」: 値がnullではないか
- 「between <値A> and <値B>」: ある値が値Aと値Bの範囲内に含まれるか
パターンマッチ(like)
パターンマッチした条件でテーブルから値を取得するには、like句を使用します。
【書式】
1 |
select * from <テーブル名> where <列名> like <ワイルドカード文字>; |
【例】
studentslistテーブルのname列の値が’ミウラ’で始まる情報を取得する例です。
1 |
select * from studentslist where name like 'ミウラ%'; |
ワイルドカード文字
ワイルドカード文字とは、以下の2つを指します。
- ‘%’:0文字以上の任意の文字列
- ‘_’:任意の1文字
ワイルドカード文字の使用例
ワイルドカード文字の使用例は、以下のとおりです。
- ’田%’: ’田’で始まる文字列
- ‘%田%’: ’田’を含む文字列
- ‘%男’: ’男’で終わる文字列
- ‘_男’: 何かしらの1文字+’男’で終わる2文字
取得件数を制限(limit)
取得件数を制限するには、以下のlimit句を使用します。
【書式】
1 |
select * from <テーブル名> limit [オフセット,] <最大取得件数>; |
【例】
studentslistテーブルの2番目のデータから最大5つのデータを取得する例です。
1 |
select * from studentslist limit 2, 5; |
テーブルをグループ化(group by)
テーブルをグループ化するには、以下の group by 句を使用します。
【書式】
1 |
select * from <テーブル名> group by <列名>; |
【例】
studentslistテーブルのデータをgender(性別)単位でグループ化して取得する例です。
1 |
select * from studentslist group by gender; |
代表的な集約関数
集約関数とは、SQLでテーブルの値を集計するために使う関数です。
代表的な集約関数は、以下のとおりです。
- sum(式):合計値
- avg(式):平均値
- min(式):最小値
- max(式):最大値
- count(式):カウント値
集約関数countの重複カウント
集約関数countを使用する場合、重複してもそれぞれカウントするか、1つとしてカウントするか指定することができます。
- 重複してもそれぞれカウントする場合: count(式)
- 重複したら1つとしてカウントする場合: count(distinct 式)
集約結果をさらに絞り込む(having)
集約結果をさらに絞り込むには、以下のhaving句を使用します。
【書式】
group by句によってテーブルのデータを集約した結果に対して、having句の条件式を適用する場合に使用します。
1 |
select * from <テーブル名> where <条件> group by <列名> having <条件>; |
【例】
studentslistテーブルのうち15歳以上のデータをgender列でグループ化した後、平均年齢が18歳以上のデータを取得する例です。
1 2 3 4 5 6 7 8 9 10 |
select gender, avg(age) from studentslist where age >= 15 group by gender having avg(age) >= 18; |
データの並び替え(order by)
select句で取得するデータの並び替えをするには、以下のoder by句を使用します。
【書式】
1 |
select * from <テーブル名> order by <列名や式> <並び順>, ...; |
並び順の指定には、以下の2つがあります。
- asc: 昇順(ascending) ※並びを指定しない場合はascがデフォルトです
- desc: 降順(descending)
【例】
studentslistテーブルの情報をname順、かつidの昇順に並び替える例です。
1 |
select * from studentslist order by name, id; |
条件分岐(case式)
SQLで条件に応じて場合分けするには、case式を使います。
【書式】
1 2 3 4 5 |
case when 条件式1 then 値1 [when 条件式2 then 値2 ...] [else 値3] end |
【例】
xの値が10以上なら’評価A’、xの値が5以上10未満なら’評価B’、xの値が5未満なら’評価C’を出力する例です。
1 2 3 4 5 |
case when x >= 10 then '評価A' when x >= 5 then '評価B' else '評価C' end |
selectの記述順序と実行順序
select句の記述順序と実行順序は、以下のとおりです。
順序 | 記述順序 | 実行順序 |
---|---|---|
1 | select | from |
2 | from | where |
3 | where | group by |
4 | group by | having |
5 | having | select |
6 | order by | order by |
7 | limit | limit |
句の記述順序と実行順序が異なることを覚えておいてください。
まとめ
いかがでしたか。
データベース初心者向けにデータベース、およびテーブルを操作するSQLの文法を紹介してきました。
最近では直接SQL文を使うことは減ってきていますが、本記事で紹介したSQL基礎文法は振り返れば使えるようにしておくとよいでしょう。