見出し画像

EXCELユーザーがSQLに挑む!新たな分析ツールで業務効率化を実現


こんにちは!今日はみんなが仕事に役立てられる、データ分析のためのSQLの基本について、30分で学んでいきましょう。

SQL(Structured Query Language)は、データベースから情報を抽出するための言語です。でも心配ない、皆さんが普段触れているExcelやWordの知識があれば、SQLも楽しく学べますよ!

SQLの構造と基本的なコマンド

まずはSQLの基本的なコマンドについて学んでいきましょう。

1:SELECTとFROM

SELECTFROMはSQLの基本です。SELECTで何を見たいか、FROMでどこから見たいかを指定します。

例:

SELECT
 *
FROM 
 Employees;

このコードは、Employeesテーブルのすべてのカラムを取得します。ただし、注意が必要なのは*を使うとデータ量が大きくなりすぎる可能性があるため、必要なカラムだけを指定することが推奨されます。

2:WHERE

WHEREを使用すると、特定の条件に一致するデータだけを取得できます。

例:

SELECT
 * 
FROM
 Employees
--年齢30歳以上
WHERE
 Age > 30;

このコードは、Employeesテーブルから、年齢が30歳以上の従業員の情報を取得します。

3:ORDER BY

ORDER BYを使用すると、指定したカラムの値に基づいて結果を並べ替えることができます。

例:

SELECT
 *
FROM
 Employees
--年齢が若い順
ORDER BY 
 Age ASC;

このコードは、Employeesテーブルのすべてのデータを年齢順に並べて取得します。※ASC:昇順,DESC:降順

4:LIMIT

LIMITを使用すると、取得するデータの件数を制限できます。

例:

SELECT 
*
FROM
 Employees
ORDER BY 
 Age ASC
--10個表示
LIMIT 10;

このコードは、Employeesテーブルのデータを年齢順に並べて、上位10件だけを取得します。

5:GROUP BY

GROUP BYは、指定したカラムの値に基づいてデータをグループ化します。商品のカテゴリ別の集計や日別売上を求める際にはGROUP BYを用いると良いです。

例:

SELECT
 Category, COUNT(*)
FROM
 Products
--カテゴリーでグルーピング
GROUP BY
 Category;

このコードは、各カテゴリごとの商品数をカウントします。

6:HAVING

WHERE句は、グループ化する前のデータに対して条件を適用しますが、グループ化した後のデータに対して条件を適用するためにはHAVINGを使用します。

例:

SELECT
 Category, COUNT(*)
FROM
 Products
GROUP BY
 Category
--商品数10を超える
HAVING
 COUNT(*) > 10;

このコードは、商品数が10を超えるカテゴリのみを取得します。

SQLの実行順序

SQLは以下の順序で実行されます:

  1. FROM

  2. JOIN

  3. WHERE

  4. GROUP BY

  5. HAVING

  6. SELECT

  7. ORDER BY

  8. LIMIT

この順序を理解しておくと、より複雑なクエリを書くときに役立ちます。

データの結合: JOIN

テーブル間の関連性を表現するためにJOINを使用します。INNER JOINLEFT JOINRIGHT JOINがありますが、データ分析でよく使われるのはINNER JOINLEFT JOINです。

例:

SELECT
 *
FROM
 Orders
--横に結合
INNER JOIN Customers 
ON Orders.CustomerID = Customers.CustomerID;

このコードは、OrdersテーブルとCustomersテーブルをCustomerIDに基づいて内部結合し、両方のテーブルに存在するすべてのデータを取得します。※左外部結合の場合は、Ordersテーブルに存在する全てのデータを取得する。

データの統合: UNION

UNIONは、2つのテーブルを縦方向に結合します。ただし、結合するテーブルは同じカラム数と同じデータ型でなければなりません。

例:

SELECT
 Category 
FROM
 Products

--縦に結合
UNION

SELECT
 Category
FROM
 Categories;

このコードは、ProductsテーブルとCategoriesテーブルのCategoryカラムの値を結合します。

条件分岐: CASE

CASE式は、条件に応じて異なる値を返します。複数の条件をまとめて取得する場合は、UNIONで縦持ちするよりもCASE式で横持ち出力した方が効率的です。

例:

SELECT 
 Category,
--範囲指定
CASE 
 WHEN Price >  100  THEN 'Expensive'
 WHEN Price <= 100  THEN 'Cheap'
 ELSE 'Unknown'
 END AS PriceRange
FROM
 Products;

このコードは、商品の価格範囲を「高価(Expensive)」と「安価(Cheap)」に分け、それぞれの商品がどの範囲に属するかを示します。

クエリ内のクエリ: サブクエリ

サブクエリは、一つのSELECT文の中に書く別のSELECT文です。これにより、より複雑な分析を行うことができます。

例:

SELECT 
 *
FROM
 Employees
 WHERE Salary >
(
SELECT
 AVG(Salary)
FROM 
 Employees
)
;

このコードは、社員の平均給与よりも高い給与をもらっている社員の情報を取得します。

一時的なビュー: WITH

WITH句は、複雑なクエリを一時的なビューとして作成します。これにより、コードが読みやすくなり、再利用性も高まります。また、再帰クエリを書くためにも使われます。

例:

WITH Sales_CTE (SalesPersonID, NumberOfOrders) AS
(
  SELECT SalesPersonID, COUNT(OrderID)
  FROM SalesOrderHeader
  GROUP BY SalesPersonID
)
SELECT
 E.EmployeeID, E.FirstName, E.LastName, S.NumberOfOrders
FROM
 Employee AS E
JOIN Sales_CTE AS S
ON E.EmployeeID = S.SalesPersonID
ORDER BY
 S.NumberOfOrders DESC;

このコードは、各営業員がどれだけの注文を処理したかをランキングしています。ここで、Sales_CTEは一時的なビューで、主要なクエリで利用しています。

WITH句は、長くて複雑なSQLクエリをより管理しやすく、読みやすいものにするのに役立ちます。複数の場所で同じサブクエリを使用する場合や、クエリの複雑さを抑えるためにも使用されます。

それでは、Happy coding!


※参考文献
データ分析力を高める ビジネスパーソンのためのSQL入門
・Written with ChatGPT

この記事が気に入ったらサポートをしてみませんか?