最大値を含むレコードを取得する場合
サブクエリで最大値を取得する方法もあるが
考え方を変えれば、そのレコードより大きい値は無い
というアルゴリズムになる。
テーブル:USERS
┌─┬───┬──┐
│ID│NAME │AGE │
├─┼───┼──┤
│1 │TARO │24 │
├─┼───┼──┤
│2 │HANAKO│22 │
├─┼───┼──┤
│3 │JIRO │23 │
└─┴───┴──┘
このテーブルから年齢が最大のレコードを取得する。
SELECT
*
FROM
USERS A
WHERE
NOT EXISTS (
SELECT 'X' FROM USERS B WHERE B.AGE > A.AGE
);
結果
┌─┬───┬──┐
│ID│NAME │AGE │
├─┼───┼──┤
│1 │TARO │24 │
└─┴───┴──┘
逆に最小値を取得するなら
SELECT
*
FROM
USERS A
WHERE
NOT EXISTS (
SELECT 'X' FROM USERS B WHERE B.AGE < A.AGE
);
結果
┌─┬───┬──┐
│ID│NAME │AGE │
├─┼───┼──┤
│2 │HANAKO│22 │
└─┴───┴──┘
分かりやすい♪
サブクエリで最大値を取得する方法もあるが
考え方を変えれば、そのレコードより大きい値は無い
というアルゴリズムになる。
テーブル:USERS
┌─┬───┬──┐
│ID│NAME │AGE │
├─┼───┼──┤
│1 │TARO │24 │
├─┼───┼──┤
│2 │HANAKO│22 │
├─┼───┼──┤
│3 │JIRO │23 │
└─┴───┴──┘
このテーブルから年齢が最大のレコードを取得する。
SELECT
*
FROM
USERS A
WHERE
NOT EXISTS (
SELECT 'X' FROM USERS B WHERE B.AGE > A.AGE
);
結果
┌─┬───┬──┐
│ID│NAME │AGE │
├─┼───┼──┤
│1 │TARO │24 │
└─┴───┴──┘
逆に最小値を取得するなら
SELECT
*
FROM
USERS A
WHERE
NOT EXISTS (
SELECT 'X' FROM USERS B WHERE B.AGE < A.AGE
);
結果
┌─┬───┬──┐
│ID│NAME │AGE │
├─┼───┼──┤
│2 │HANAKO│22 │
└─┴───┴──┘
分かりやすい♪