ふりかえり

本記事は、SQLの基本、実務使用例編になります。
SQLの基礎に関しましては、
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

本編に入ります!
ALL関数の基本構文

まずは、基本構文から見ていきましょう!
SELECT 列名
FROM テーブル名
WHERE 値や列名 演算子 ALL (サブクエリ);

ANY構文と似ているね!

はい、そうです!
ALL は、サブクエリで取得したすべての値に対して条件を適用する SQL の演算子です。
比較演算子(>、<、>=、<=、= など)と組み合わせて使います。
演算子 には >(より大きい)、<(より小さい)、=(等しい)などを使います。
(サブクエリ) の部分は、SELECT 文を使って値のリストを取得します。
メインクエリの値と、サブクエリのすべての値を比較 します。
実務レベルの使用例を見ていこう!

実際に、SQLを使用してデータを確認していきましょう。
SQLに関しては以下を使用して解説していきます。
create table文、select文、insert文、update文、delete文、
drop table文、につきましては、過去にアップロードした
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

目次の、「ふりかえり」のところにそれぞれの記事のリンクが
貼ってあるよ!
または、サイドバーのカテゴリーにSQLがあるから、そちらからでも
参照できます!
[事前準備]今回、実行するSQLの一覧
-- 申請管理情報テーブルの作成
create table 申請管理情報 (
STAFF_NO varchar2(10) not null, -- 職員番号 (Staff Number)
APPLI_NO varchar2(10) not null, -- 申請番号 (Application Number)
APPLI_DATE date, -- 申請年月日 (Application Date)
DEPARTMENT varchar2(10), -- 部署名(Department)
constraint PK_申請管理情報 primary key (STAFF_NO, APPLI_NO)
);
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1001', 'A001', TO_DATE('2024-02-25', 'YYYY-MM-DD'),'営業');
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1001', 'A002', TO_DATE('2024-02-26', 'YYYY-MM-DD'),'営業');
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1002', 'A003', TO_DATE('2024-02-27', 'YYYY-MM-DD'),'開発');
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1002', 'a003', TO_DATE('2024-01-27', 'YYYY-MM-DD'),'開発');
insert into 申請管理情報 (STAFF_NO, APPLI_NO, APPLI_DATE, DEPARTMENT)
values ('1003', 'A004', TO_DATE('2024-02-28', 'YYYY-MM-DD'),'営業');
すべての申請日より後の日付の申請を探す
select *
from 申請管理情報
where appli_date > all (select appli_date from 申請管理情報 where department = '営業');
営業 部署のすべての appli_date を取得し、そのすべてよりも後の日付 (appli_date > ALL) の申請を取得します。
営業 部署の申請日は '2024-02-25'、'2024-02-26'、'2024-02-28' です。これらの すべてより後 という条件なので、2024-02-28 より後の申請があるかをチェックする ことになります。
しかし、テーブル内に 2024-02-28 より後の申請はないため、このクエリは 結果なし になります。
すべての申請が行われた後の申請がある職員を探す
select *
from 申請管理情報
where appli_date > all (select appli_date from 申請管理情報 where staff_no = '1001');

staff_no = '1001' の appli_date は 2024-02-25 と 2024-02-26。
appli_date がそれら すべてより後(2024-02-26 より後) の申請を探します。
2024-02-27、2024-02-28 は 2024-02-26 より後なので該当します。
まとめ
ALLは サブクエリのすべての値に対して条件を適用します。>ALL (...)は すべてより大きい値 を取得します。<ALL (...)は すべてより小さい値 を取得します。=ALL (...)は すべての値と等しい場合のみ取得します(現実的にはほぼ使わない)。- 結果がゼロになるケースが多い ので、意図を明確にして使う必要があります。

ALLについて解説しました。
通常、ALL よりも ANY や IN を使うことが多いですが、すべての値を基準に比較したい場合 には ALL が有効です。
次回もお楽しみに!










コメント