2_04_10-検索処理(副問い合わせ-1 )(select)

PHPとPostgreSQLを利用したWEBシステムの開発例を掲載していきます。腕時計 販売サイト my-watch.biz



● 2_04_10-検索処理(副問い合わせ-1 )(select)

副問い合わせには「相関副問い合わせ」、「複数列副問い合わせ」があります。ここでは簡単な副問い合わせを演習します。
テーブルは1つだけを対象にします。

まずSQLを打つ前にデータの検索条件を示します。

1.全ての商品の平均額以上の商品だけを検索せよ。

まず商品の平均額を出す。そしてその額以上の商品を検索する。これを今までのSQLでは1行で書くことはできません。
2回に分ければ可能です。

平均額を求めるのは簡単です、以下の4行です。
SELECT
  avg(kakaku)
FROM
  shouhin_t

平均値は「9484.7445255474452555」で検索されます。

では全ての商品を検索するSQLは以下です。
SELECT
  name,
  kakaku
FROM
  shouhin_t

ではこれを繋いでみます。

SELECT
  name,
  kakaku
FROM
  shouhin_t

繋ぐ物が必要

SELECT
  avg(kakaku)
FROM
  shouhin_t

繋ぐ物が必要」には「WHERE kakaku >= 」となります。
そして後ろのSQLは括弧「()」でくくります。

SELECT
  name,
  kakaku
FROM
  shouhin_t
WHERE
  kakaku >= ( SELECT avg(kakaku) FROM shouhin_t )

(SELECT avg(kakaku) FROM shouhin_t)を一つの値として見れば今まで演習したSQLと同一です。
「>=」の演算子以外に色々使えば多様な検索が可能です。

where句のカラムの条件を構成する一部として認識して下さい。
そうすればSQLが長くても単純に理解できます。

このSQLを実行すれば、以下のように検索されます。



もう一例を紹介します。

条件は、
・商品A4と同じ価格の商品を検索せよ。

まず、商品A4の価格を検索するSQLは以下です。
SELECT
  kakaku
FROM
  shouhin_t
WHERE
  name = 'a4'

次にある価格と同じ商品を検索するSQLは以下です。
SELECT
  name,
  kakaku
FROM
  shouhin_t
WHERE
  kakaku = 'ある価格'

ある価格と商品A4の価格は同じですから、以下になります。
SELECT
  name,
  kakaku
FROM
  shouhin_t
WHERE
  kakaku = ( SELECT kakaku FROM shouhin_t WHERE name = 'a4' )

検索結果は以下となります。


実際の検索作業ではSQLを複数発行すれば事足ります。

しかし、PHPなどのプログラムに組み込んで何回もデータベースに問い合わせを行う事が出ますので、できれば2回のところを1回で済ませればデータベースの問い合わせの負荷が減少できます。

戻る

Copyright (c) 2007 MSweb All Rights Reserved

腕時計 クロノグラフ(時計)のメンズ専門販売サイトカシオ G-SHOCK、Baby-G(腕時計)専門の通信販売サイトG-SHOCK、Baby-G専門通販サイト 運営ブログ

腕時計 女性専用 販売のladies-watch.biz腕時計 メンズ(男性)専門販売のmens-watch.biz