目次
WHEREとHAVINGの違いとは?
この記事が解決できること
- SQLとは何かがわかる
- SQLの構文であるWHEREとHAVINGの違いがわかる
はじめに
SQLは、データベースへのデータ登録、検索、更新を効率的に行うための言語です。迅速かつ正確なデータ操作を可能にするため、データの利活用に欠かせません。
本記事では、そんなSQLの構文である「WHERE」と「HAVING」の違いについて解説しています。サンプルクエリも使用しているので、SQLを学習したい方は参考にしてください。
SQLとは
SQL(Structured Query Language)とは、リレーショナルデータベース(RDB)を操作するためのデータベース言語です。1970年代にIBMによって開発され、ISOで標準化されました。リレーショナルデータベースについて知りたい方は、こちらのコラムをご覧ください。
コンピューター言語として「プログラミング言語」を思い浮かべるかもしれませんが、データベース言語とプログラミング言語は異なる言語です。コンピューターに指示を出し、複雑な処理を実行したり、アプリケーションを作成したりするプログラミング言語に対し、データベース言語は、データベースの操作に特化しています。
SQLについてさらに詳しく知りたい方は、こちらのコラムをご覧ください。
WHEREとHAVINGの違い
SQLなどのデータベース言語には、データベースを指示どおりに動作させるために記述する際の文法ルールが設定されています。「WHERE」と「HAVING」もSQLの構文としてルールが定められています。
ここからは、以下の「employees」テーブルを利用しながらWHEREとHAVINGについて解説します。
id | name | age | department | salary |
---|---|---|---|---|
1 | Kishi | 29 | HR | 310000 |
2 | Suga | 41 | HR | 260000 |
3 | Abe | 37 | HR | 350000 |
4 | Noda | 28 | IT | 300000 |
5 | Sugano | 35 | IT | 360000 |
6 | Tomiyama | 31 | IT | 280000 |
7 | Asou | 26 | IT | 400000 |
8 | Fukuda | 40 | Sales | 330000 |
9 | Izumi | 35 | Sales | 260000 |
10 | Mori | 25 | Sales | 450000 |
WHEREとHAVING以外の構文を知りたい方は、こちらのコラムをご覧ください。
WHEREとは
WHEREとは、テーブルにあるデータを検索する際に検索条件を指定する構文です。サンプルクエリは、以下のとおりです。
SELECT *
FROM employees
WHERE age >= 30;
上記のクエリは、employeesから年齢が30歳以上の全ての社員の情報を選択します。
クエリを実行すると、以下のような結果が出力されます。
id | name | age | department | salary |
---|---|---|---|---|
2 | Suga | 41 | HR | 260000 |
3 | Abe | 37 | HR | 350000 |
5 | Sugano | 35 | IT | 360000 |
6 | Tomiyama | 31 | IT | 280000 |
8 | Fukuda | 40 | Sales | 330000 |
9 | Izumi | 35 | Sales | 360000 |
HAVINGとは
HAVINGとは、グループ化された行を検索する際に検索条件を指定する構文です。サンプルクエリは、以下のとおりです。
SELECT department, AVG(age) AS average_age
FROM employees
GROUP BY department
HAVING AVG(age) >= 35;
上記のクエリは、employeesから部署ごとの平均年齢を計算し、平均年齢が35歳以上の部署のみを選択します。
クエリを実行すると、以下のような結果が出力されます。
department | average_age |
---|---|
HR | 35.6 |
WHEREとHAVINGは併用できるのか
結論として、WHEREとHAVINGは併用可能です。WHEREとHAVINGを併用したサンプルクエリは、以下のとおりです。
SELECT department, AVG(age) AS average_age, COUNT(*) AS employee_count
FROM employees
WHERE age >= 30
GROUP BY department
HAVING AVG(salary) >= 320000 AND COUNT(*) >= 2;
上記のクエリは、WHEREで社員の年齢が30歳以上である行をフィルタリングし、HAVING句で平均月収¥320,000以上で社員数が2人以上の部署を選択します。
クエリを実行すると、以下のような結果が出力されます。
department | average_age | employee_count |
---|---|---|
IT | 33 | 2 |
データの利活用についてアナリティクスエンジニアへ相談すべき理由
アナリティクスエンジニアは、データの収集、処理、分析を効率的に行うためのシステムを設計・構築する専門家です。データエンジニアリングとデータアナリティクスの両方のスキルを持ち、データのインフラを整備し、データ分析の基盤を提供します。また、ビジネスインサイトを引き出すために、ETLプロセスの管理やデータパイプラインの構築などを担当します。
アナリティクスエンジニアについて知りたい方は、こちらのコラムをご覧ください。
SQLをはじめとしたデータの利活用でお悩みの方には、アナリティクスエンジニアへの相談がおすすめです。ここからは、その理由を3つ紹介します。
データの利活用についてアナリティクスエンジニアへ相談すべき理由
- データを効率的かつ効果的に利活用できる環境を整えられる
- データの利活用における最新情報を取得できる
- 主要業務に専念できる
1.データを効率的かつ効果的に利活用できる環境を整えられる
アナリティクスエンジニアは、データの収集、処理、分析を専門とし、企業のデータ戦略をサポートしています。ヒアリングを通じて各クライアントに合わせた支援を提供しているため、高度な専門知識を持たない企業でも、アナリティクスエンジニアがいれば自社のデータを有効活用するための環境を整えることができます。
2.データの利活用における最新情報を取得できる
アナリティクスエンジニアは、データ分析の最新技術やトレンドに精通しており、最適なツールや手法を提供します。また、最新のデータセキュリティ対策も把握しているため、安心してデータを活用できます。アナリティクスエンジニアへ相談することで、最先端のデータ活用戦略が実現可能です。
3.主要業務に専念できる
アナリティクスエンジニアは、データの分析・管理・活用を専門としているため、データに関する複雑な作業を任せられます。そのため、企業の他の部門やチームは自分たちの主要業務に集中し、生産性を向上させられます。
SQLについてお悩みの方にはDX-Acceleratorがおすすめ
今回は、SQLにおけるWHEREとHAVINGの違いについて解説しました。
SQLの構文を正確に覚えることは、データベースの操作を効率化し、正確なデータの取得や更新を可能にします。SQLへの理解を深め、データベースを活用できるようになりましょう。
また、SQLについてお悩みの方には、データ人材常駐型サービス「DX-Accelerator」がおすすめです。DX-Acceleratorでは、最短1週間で即戦力アナリティクスエンジニアがチームへ参画し、クライアントの抱えているデータ利活用の悩みを解消しています。DX-Acceleratorについて知りたい方は、こちらのコラムをご覧ください。
データを有効に利活用し、企業のさらなる成長を目指しましょう。