UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#006 平均人口以上を抽出 サブクエリ

記入日:2022-12-29 編集日:2022-12-29

SQL見るだけクエリ。今回は、人口の平均値を計算しその値より多くの人口を有する都市を抽出するSQLをサブクエリという方法を使って書いてみようと思います。

この記事を読むと(約5分)
SQLの中にSQLを記述するサブクエリの使い所がわかります。例えばある条件で絞り込むSQLを書く際に条件の値をSQLを使って導く時などに使えます。

以下の様なテーブルを用意しました。(テーブル名:table_name)

idname1name2populationimgarea
1横浜市神奈川県3771961dbsample関東
2大阪市大阪府2756807dbsample関西
3名古屋市愛知県2325778dbsample中部
4札幌市北海道1973000dbsample北海道
5福岡市福岡県1631409dbsample九州

同様に20レコード(件)

テーブルの情報を取得するSQLに関して、注目する部分は、以下の9~10行目のみです。

SELECT * FROM table_name WHERE population > (SELECT AVG(population) FROM table_name) この部分で、データベース内にあるtable_nameテーブルのうち、人口の平均値(今回の場合だと1,386,922人)以上のレコード(保存された内容)を取得しております。

(SELECT AVG(population) FROM table_name)  条件となる数値をSELECT分によって同時に導き出しています。

try {
    include_once '../model/class.php';

    // データベース接続
    $database = new Database();
    $db = $database->connect();

    // SQLを準備し、パラメータをバインドする
    $query = 'SELECT * FROM table_name 
    WHERE population > (SELECT AVG(population) FROM table_name)';
    $stmt = $db->prepare($query);

    // 実行する
    $stmt->execute();

    // 結果を取得する
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    print_r($result);

    // データベースから切断する
    $database->disconnect();

} catch(PDOException $e) {
    echo $e->getMessage();
}

これを実行すると、二次元連想配列という形式で、全ての情報を取得することができます。

            Array
(
    [0] => Array
        (
            [id] => 1
            [name1] => 横浜市
            [name2] => 神奈川県
            [population] => 3771961
            [img] => dbsample
            [area] => 関東
        )

    [1] => Array
        (
            [id] => 2
            [name1] => 大阪市
            [name2] => 大阪府
            [population] => 2756807
            [img] => dbsample
            [area] => 関西
        )

    [2] => Array
        (
            [id] => 3
            [name1] => 名古屋市
            [name2] => 愛知県
            [population] => 2325778
            [img] => dbsample
            [area] => 中部
        )

    [3] => Array
        (
            [id] => 4
            [name1] => 札幌市
            [name2] => 北海道
            [population] => 1973000
            [img] => dbsample
            [area] => 北海道
        )

    [4] => Array
        (
            [id] => 5
            [name1] => 福岡市
            [name2] => 福岡県
            [population] => 1631409
            [img] => dbsample
            [area] => 九州
        )

    [5] => Array
        (
            [id] => 6
            [name1] => 川崎市
            [name2] => 神奈川県
            [population] => 1540890
            [img] => dbsample
            [area] => 関東
        )

    [6] => Array
        (
            [id] => 7
            [name1] => 神戸市
            [name2] => 兵庫県
            [population] => 1510171
            [img] => dbsample
            [area] => 関西
        )

    [7] => Array
        (
            [id] => 8
            [name1] => 京都市
            [name2] => 京都府
            [population] => 1448964
            [img] => dbsample
            [area] => 関西
        )

)
			

見やすくする為に、HTMLとCSSで体裁を整えると、以下のようになります。

全国792市の人口ランキングBEST20
の人口平均(1,386,922)以上の都市

市名 都道府県名 人口 エリア
1 横浜市
神奈川県
3771961
関東
2 大阪市
大阪府
2756807
関西
3 名古屋市
愛知県
2325778
中部
4 札幌市
北海道
1973000
北海道
5 福岡市
福岡県
1631409
九州
6 川崎市
神奈川県
1540890
関東
7 神戸市
兵庫県
1510171
関西
8 京都市
京都府
1448964
関西

サブクエリとは、データベース内のデータを取得するための「SELECT」文です。データを取得するために、サブクエリを使用すると、一つのSQL文内で複数のSQL文を実行することができます。つまり、サブクエリを使用すると、複数の問い合わせを一つの問い合わせ内で実行することができます。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。