WindowsVista+Apache2.0+PHP5+PostgreSQL8.2
−入門編−

第4章 PostgreSQLによるWebアプリケーションの基礎

前へ | 目次へ |次へ  | Yamada-Lab

4.16 副問い合わせ

■テーブルの全データの取得

 SELECT文、DELETE文、UPDATE文のWHERE句にSELECT文を使った条件式を使うことができます。このWHERE句の中のSELECT文を副問い合わせ(サブクエリ)といいます。副問い合わせのSELECT文は()で囲む必要があります。

 サンプルファイル「subquery01.php」を以下に示します。

「subquery01.php」

<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>subquery01.php for PostgreSQL8.2</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// 処理対象テーブル
$tbl_name1 = "tbl_売上明細";
print "「{$tbl_name1}」<br>";
show_records($db,$tbl_name1);
print "<br>\n";
$tbl_name2 = "tbl_商品2";
print "「{$tbl_name2}」<br>";
show_records($db,$tbl_name2);
print "<br>\n";

// 副問い合わせ
$str_sql = "SELECT * FROM tbl_売上明細
      WHERE tbl_売上明細.商品コード
       IN (SELECT 商品コード FROM tbl_商品2
         WHERE trim(商品名) = '棒チョコ');
";
$rs = pg_query($db,$str_sql);
print "SQL = \"{$str_sql}\";<br>\n";
show_rs($rs);
print "<br>\n";
// 結果セット(結果ID)の開放
pg_free_result($rs);
// データベースの切断
pg_close($db);
?>
</body>
</html>

 この例では、商品名が'棒チョコ'の商品コードを副問い合わせで検索し、その商品コードにあった売上明細のレコードを検索しています。

 サンプルファイルへのアクセス例を下記に示します。

 第2のサンプルファイル「subquery02.php」を以下に示します。

「subquery02.php」

<?php
// インクルードファイルの読み込み
include "common_pgsql.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>subquery02.php for PostgreSQL8.2</title>
</head>
<body>
<?php
// データベースに接続
$db = db_connect($dbname);
// 処理対象テーブル
$tbl_name1 = "tbl_売上明細";
print "「{$tbl_name1}」<br>";
show_records($db,$tbl_name1);
print "<br>\n";
$tbl_name2 = "tbl_商品2";
print "「{$tbl_name2}」<br>";
show_records($db,$tbl_name2);
print "<br>\n";

// 副問い合わせ
$str_sql = "SELECT * FROM tbl_売上明細
      WHERE tbl_売上明細.商品コード
       = (SELECT 商品コード FROM tbl_商品2
         WHERE 商品名 LIKE '%チョコ');
";
$rs = pg_query($db,$str_sql);
print "SQL = \"{$str_sql}\";<br>\n";
show_rs($rs);
print "<br>\n";
// 結果セット(結果ID)の開放
pg_free_result($rs);
// データベースの切断
pg_close($db);
?>
</body>
</html>


 この例では、商品名が'%チョコ'の商品コードを副問い合わせで検索し、その商品コードにあった売上明細のレコードを複数検索しています。

 サンプルファイルへのアクセス例を下記に示します。

4.17 ビュー

 SELECT文によるSQL文をあらかじめビューとして定義しておくことができます。つまり、SQL文を実行した結果リソースであって、行と列からなる仮想的なテーブルです。ビューとしての具体的なデータの集合がデータベース内にある訳でなく、ビューを呼び出したときに、その場でビューで定義したSQL文が実行され一時的に結果リソースが生成されるに過ぎません。

 ビューの定義には、SQLコマンドのCREATE VIEW文を使用します。

CREATE VIEW ビュー名 AS SELECT文

 定義したビューをテーブルとみなして、SQL文を実行することが可能です。

 

 

 

 


前へ | 目次へ |次へ  | Yamada-Lab

執筆 山田豊通
更新日: 2007年9月16日