![見出し画像](https://assets.st-note.com/production/uploads/images/21320795/rectangle_large_type_2_f0815801c2176e8cca52caf361ee8b1c.png?width=800)
SQLって何?MySQLで学ぶ、初めてのSQL入門(SELECT文/データ抽出・分析)
はじめまして、ひぐまです。
本日はSQLの概要と、一番利用頻度の高いSELECT文というデータを抽出する技術についてご説明します。なお、YouTubeで解説動画も公開していますので、併せてご視聴いただけるとなお理解が促進されると思います。
SQLとは
SQLとはデータベースを操作するための言語で、データベースの構築や、データベース内のデータの目の抽出・更新・削除をするための技術です。
データベースとは、データを蓄積するためのソフトウェアです。データベースにはオブジェクトと呼ばれる操作対象が複数存在します。データを格納する「テーブル」、データの見せ方を定義した「ビュー」などです。
SQLはこのオブジェクトに対して操作します。オブジェクトを定義する「DDL(データ定義言語:Data Definition Language)」、データを操作する(抽出や更新など)「DML(データ操作言語:Data Manipulation Language)」、データベース内の権限やトランザクションなどを制御する「DCL(データ制御言語:Data Control Language)」が存在します。
今回ご説明する「SELECT文」はDMLに分類され、データベースからデータを抽出する技術です。抽出対象の絞り込みや合計・平均などの集計など、様々な加工をしたうえで抽出することができます。詳細は下記動画をご視聴ください。
以降はSELECT文の使い方についてご説明していきます。手元で試しながら学習すると理解が進みやすいのでお勧めです。動画の中で環境構築の手順もご紹介していますので、ぜひお試しください。それではSELECT文の使い方を学んでいきましょう!
SELECT文(データ抽出)の基本
では、さっそくSELECT文の基本的な使い方を見ていきましょう。一般的なデータベースでは行と列からなるデータ(Excelのような表データ)が格納されており、下記のようなクエリと呼ばれる文章を使って抽出します。
select YM
, item_cd
, customer_cd
, quant
from test.t_actual_detail
where YM = '201703';
SELECT文は上記のように記載します。このSELECT文はどの列を取得するか記載するSELECT句、どのテーブルからデータを取得するか記載するFROM句、そしてどのような条件でデータを取得するか記載するWHERE句から成り立ちます。SELECT句で「*」(アスタリスク)を指定すると、対象のテーブルの全べての列を取得します。
上記を読むだけではイメージが湧きにくいと思いますので、実践を交えていきたいと思います。動画で解説していますので、ぜひご視聴ください!
様々な抽出条件
基本的なデータ抽出は前述の内容で学びましたが、今度は様々な条件句(WHERE句)を利用して自分の欲しいデータを抽出していきたいと思います。主要な検索条件は下記になります。
◆数値や日付(文字列でも利用可能)
・列名 = A (等しい)
・列名 != A (等しくない。列名 <> Aでも可)
・列名 > A (大小比較。境界値を含める場合「>=」と記載)
◆文字列
・列名 like ‘B%’ (前方一致)
・列名 like ‘%B%’ (部分一致)
・列名 like ‘%B’ (後方一致)
◆複数条件
・列名1 = B and 列名2 = C (2つの条件を満たす)
・列名1 = B or 列名2 = C (2つのいずれかの条件を満たす)
・列名 in(A,B,C,D) (A~Dのいずれかに該当)
例えば下記のようなSQLを書くと、「m_dept」というテーブルから、「dept_name」列に「事業」という文字を含んでいるデータを抽出します。
select * from test.m_dept where dept_name like '%事業%'
上記を読むだけではイメージが湧きにくいと思いますので、実践を交えていきたいと思います。動画で解説していますので、ぜひご視聴ください!
並び替え(ソート)
続いては並び替えについてです。並び替えには「order by」という句を利用します。
例えば下記のようなデータがあった時に、YMやquantで並び替える手段をご紹介します。
まず、YMで昇順(小さい順。徐々に大きくなる)に並び替える方法です。下記のように記載すると、YMで昇順に抽出されます。
select *
from test.t_actual_detail
order by YM
次にquantで降順(大きい順。徐々に小さくなる)に並び替える方法です。下記のように記載すると、quantで降順に抽出されます。降順を指定するには「DESC」を記載します。
select *
from test.t_actual_detail
order by quant DESC
集計
続いては集計です。集計とは指定した列で合計や平均を求める技術です。「集計関数」と呼ばれる関数を利用して集計します。主な集計関数は下記のものとなります。
・合計:SUM(列名)
・平均:AVG(列名)
・件数:COUNT(列名)
・重複を排除した件数:COUNT(DISTINCT 列名)
・最大値:MAX(列名)
・最小値:MIN(列名)
例えば下記のようなデータがあったとします。
YMごとのquant合計を求めるには、下記のようなSQLを記載します。
select YM,sum(quant) as quant
from test.t_actual_detail
group by YM
YM・item_cdごとのquant合計を求めるには、下記のようなSQLを記載します
select YM,item_cd,SUM(quant) as quant
from test.t_actual_detail
group by YM,item_cd
詳細や演習問題は動画にまとめていますので、ぜひご視聴ください。
演算・関数
SELECT句の中では四則演算や関数を利用した加工を行うことができます。よく使う演算子は下記のものがあります。(ただし関数はDBの種類で少し異なる場合があります)
◆4つの微積分
・足し算:列名A + 列名B
・引き算:列名A - 列名B
・かけ算:列名A * 列名B
・わり算:列名A / 列名B
◆文字列操作
・文字列結合:CONCAT(列名A, 列名B)
・文字の切り出し:SUBSTR(列名A, 開始位置,終了位置)
・文字列の長さ:LENGTH(列名)
・置換:REPLACE(列名A,変更前の文字,変更後の文字)
◆その他
・値の分岐:CASE WHEN 条件式1 THEN 値1 WHEN 条件式2 THEN 値2
END
・NULLの時のみ置換:IFNULL(値1,値2)(値1がNULLの時値2を返却)
※ NULLとは値が存在しないということを表す特殊文字です。NULLは「=」で比較することはできず、「列名 is NULL「、」列名はNOT NULLです」のように比較します。
例えば下記のようにすると、quantに100を足したquant2を取得できます。
select quant, quant + 100 as quant2 from test.t_actual_detail
詳細や演習問題は動画にまとめていますので、ぜひご視聴ください。
表の結合
ここまでは1つのテーブル(表)からのデータ抽出をご紹介してきましたが、ここでは複数のテーブルからデータを抽出する方法についてご紹介します。この技術は「結合」と呼ばれます。イメージとしてはExcelのVLOOKUP関数に似ています。
例えば下記の2つのテーブルが存在するとします。
この2つのテーブルを利用して下記のようなデータを抽出することを想定します。
上記は「t_actual_detail」に「m_item」を結合して、「item_name」や「unit_price」を取得しています。Excelで例えるなら、「item_cd」を検索キーとしてVLOOKUP関数を利用しているようなものです。これをSQLで実現するには、下記のようなクエリを発行します。
select t.YM
,t.item_cd
,t.customer_cd
,t.quant
,t.dept_cd
,m.item_name
,m.unit_price
from test.t_actual_detail t
left outer join test.m_item on t.item_cd = m.item_cd
新しく「LEFT OUTER JOIN」という句が出てきました。この句を利用して表を結合させます。「ON」で指定した条件を満たす場合のみ結合します。(上記の例では「item_cd」が一致するデータ同士を結合させます。
結合には両方のテーブルに存在するデータのみ(キーが一致するデータのみ)抽出する「内部結合」と、左側(先に記載したテーブル。上記の例ではFROM句で記載した「t_actual_detail 」)に存在するデータはすべて抽出する「左側外部結合」が存在します。左側外部結合の場合、結合しようとしているテーブルに値が存在しない場合、NULLとなります。上記の例では「item_name」や「unit_price」がNULLになります)
なお、余談になりますが、外部結合には左側外部結合以外にも右側外部結合、完全外部結合が存在しますが、使う機会は非常に稀です。(これはあくまでも推測ですが、日本は左から書いていく文化なので、左側外部結合がよく使われているのだと思います)
こちらも動画にまとめていますので、ぜひご視聴ください。
サブクエリ(副問い合わせ)
さて、少し特殊なデータ抽出方法をご紹介します。それがサブクエリ(副問い合わせ)と呼ばれる技術です。
サブクエリとは、SELECTの結果を、SELECT句の中で再利用する機能です。SELECT文のことをクエリや問い合わせと呼ぶので、サブクエリ(副問い合わせ)と呼びます。
例えば、下記のデータが存在するとします。
これを「YM」で集計した結果を結合し、構成比(シェア)を表示させます。
下記のようなクエリを発行することで、実現できます。
select t.YM
, t.item_cd
, t.customer_cd
, t.quant
, s.quant_sum
, t.quant/s.quant_sum as share
from test.t_actual_detail t
inner join (select YM
,sum(quant) as quant_sum
from test.t_actual_detail
group by YM
)s on t.YM = s.YM
上記の例のように、サブクエリはJOIN句で利用できますが、他にもSELECT句、FROM句など様々なところで利用できます。
詳細や演習問題は動画にまとめていますので、こちらもぜひご視聴ください。
総合演習
さて、これまで学んだ内容の総復習ということで、総合演習を用意しております。こちらもぜひ挑戦してみてください!
最後に
今回はSQLの中でも利用頻度の高い「SELECT文」というデータ抽出の技術をご紹介しました。最近では扱うデータも多岐にわたり、事前に準備された形式以外のデータが必要になってきています。SELECT文を扱えれば、自分で好きなようにデータを抽出することが可能です。ぜひこの機会にマスターしてみてください。
また、SQL以外にもシステム開発に関するノウハウやセミナー動画を公開しています。ご興味がある方はぜひご視聴ください!
この記事が気に入ったらサポートをしてみませんか?