📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 288行目: | 288行目: | ||
C 20210103 100 | C 20210103 100 | ||
<br><br> | <br><br> | ||
== その他の使用例 == | |||
==== サブクエリと集約関数の組み合わせ ==== | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|+ employees テーブル構造 | |||
! style="background-color:#00ffff;" | カラム名 | |||
! style="background-color:#00ffff;" | データ型 | |||
! style="background-color:#00ffff;" | 説明 | |||
! style="background-color:#00ffff;" | 制約 | |||
|- | |||
| id || SERIAL || 従業員ID || PRIMARY KEY | |||
|- | |||
| department_name || VARCHAR(50) || 部署名 || NOT NULL | |||
|- | |||
| employee_name || VARCHAR(100) || 従業員名 || NOT NULL | |||
|- | |||
| position || VARCHAR(50) || 役職 || NOT NULL | |||
|- | |||
| salary || INTEGER || 給与 || | |||
|- | |||
| hire_date || DATE || 入社日 || NOT NULL | |||
|} | |||
</center> | |||
<br> | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|+ employees テーブルのサンプルデータ | |||
! style="background-color:#00ffff;" | id | |||
! style="background-color:#00ffff;" | 部署名 | |||
! style="background-color:#00ffff;" | 従業員名 | |||
! style="background-color:#00ffff;" | 役職 | |||
! style="background-color:#00ffff;" | 給与 | |||
! style="background-color:#00ffff;" | 入社日 | |||
|- | |||
| 1 || 営業部 || 山田太郎 || 営業担当 || 350000 || 2022-01-15 | |||
|- | |||
| 2 || 営業部 || 鈴木一郎 || 営業担当 || 350000 || 2022-02-01 | |||
|- | |||
| 3 || 営業部 || 佐藤花子 || 営業主任 || 400000 || 2021-04-01 | |||
|- | |||
| 4 || 営業部 || 田中美咲 || 営業担当 || 350000 || 2022-03-15 | |||
|- | |||
| 5 || 営業部 || 高橋健一 || 営業部長 || 600000 || 2020-01-01 | |||
|- | |||
| 6 || 総務部 || 伊藤真理 || 総務担当 || 330000 || 2022-06-01 | |||
|- | |||
| 7 || 総務部 || 渡辺裕子 || 総務担当 || 330000 || 2022-07-15 | |||
|- | |||
| 8 || 総務部 || 加藤正男 || 総務主任 || 380000 || 2021-08-01 | |||
|- | |||
| 9 || 総務部 || 中村智子 || 総務担当 || 330000 || 2022-09-01 | |||
|- | |||
| 10 || IT部 || 小林洋介 || プログラマー || 400000 || 2022-01-15 | |||
|} | |||
</center> | |||
<br> | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|+ インデックス定義 | |||
! style="background-color:#00ffff;" | インデックス名 | |||
! style="background-color:#00ffff;" | 対象カラム | |||
! style="background-color:#00ffff;" | 説明 | |||
|- | |||
| idx_department_name || department_name || 部署名での検索を高速化 | |||
|} | |||
</center> | |||
<br> | |||
以下の例では、特定の部署の人数が10人以上の場合、その部署の従業員を抽出している。<br> | |||
<br> | |||
* IN句を使用した方法 | |||
*: 可読性が良い。 | |||
*: 全カラムを取得する場合に適している。 | |||
* 特定のカラムを選択する方法 | |||
*: 必要なカラムのみを指定する。 | |||
*: ORDER BYで結果を並び替えが可能 | |||
*: <br> | |||
* EXISTS句を使用した方法 | |||
*: 大量データの場合、IN句よりもパフォーマンスが良いことがある。 | |||
*: 存在確認のみを行うため、メモリ使用量が少なくなる可能性がある。 | |||
<br> | |||
<syntaxhighlight lang="sql"> | |||
-- 基本的な書き方 : 10人以上いる部署の全従業員情報を取得 | |||
SELECT * | |||
FROM employees | |||
WHERE department_name IN ( | |||
SELECT department_name | |||
FROM employees | |||
GROUP BY department_name | |||
HAVING COUNT(*) >= 10 | |||
); | |||
-- 複数のカラムを指定する場合 : 10人以上いる部署の従業員の基本情報のみを取得 | |||
SELECT | |||
t1.department_name, | |||
t1.employee_name, | |||
t1.position | |||
FROM employees t1 | |||
WHERE t1.department_name IN ( | |||
SELECT department_name | |||
FROM employees | |||
GROUP BY department_name | |||
HAVING COUNT(*) >= 10 | |||
) | |||
ORDER BY t1.department_name; | |||
-- EXISTS句を使用した別の書き方 : 10人以上いる部署の全従業員情報を取得 | |||
SELECT * | |||
FROM employees t1 | |||
WHERE EXISTS ( | |||
SELECT 1 | |||
FROM employees t2 | |||
WHERE t2.department_name = t1.department_name | |||
GROUP BY t2.department_name | |||
HAVING COUNT(*) >= 10 | |||
); | |||
-- 部署ごとの人数を確認する | |||
SELECT | |||
department_name, | |||
COUNT(*) as employee_count | |||
FROM employees | |||
GROUP BY department_name | |||
ORDER BY employee_count DESC; | |||
</syntaxhighlight> | |||
<br><br> | |||
{{#seo: | {{#seo: | ||