記入日:2022-12-29 編集日:2022-12-29
SQL見るだけクエリ。今回は、人口の平均値を計算しその値より多くの人口を有する都市を抽出するSQLをサブクエリという方法を使って書いてみようと思います。
この記事を読むと(約5分)
SQLの中にSQLを記述するサブクエリの使い所がわかります。例えばある条件で絞り込むSQLを書く際に条件の値をSQLを使って導く時などに使えます。
以下の様なテーブルを用意しました。(テーブル名:table_name)
id | name1 | name2 | population | img | area |
---|---|---|---|---|---|
1 | 横浜市 | 神奈川県 | 3771961 | dbsample | 関東 |
2 | 大阪市 | 大阪府 | 2756807 | dbsample | 関西 |
3 | 名古屋市 | 愛知県 | 2325778 | dbsample | 中部 |
4 | 札幌市 | 北海道 | 1973000 | dbsample | 北海道 |
5 | 福岡市 | 福岡県 | 1631409 | dbsample | 九州 |
同様に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で体裁を整えると、以下のようになります。
市名 | 都道府県名 | 人口 | エリア | |
---|---|---|---|---|
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化のディレクションなどを行っています。