MySQL サブクエリ スカラ・サブクエリの使い方

スポンサーリンク
スポンサーリンク

サブクエリとは

ある問い合わせの結果に基づいて、異なる問い合わせを行う仕組みで、複雑な問い合わせができます。
where句の中で使うことが多いですが、where句以外にも、select句、from句、having句など様々な場所で利用できます。

サブクエリを使うと
日々の業務改善のデータ分析に役立つデータがデータベースから直接SQLで取り出せます。
例:全商品の平均単価より高い商品を取得 など。

サブクエリの構文

select

  列名,...

from

  テーブル名

where

  列名 演算子 (select 列名 from テーブル名2...);

サブクエリ記述サンプル

2017年12月に商品を購入していないユーザー一覧を出力してみます。

必要な情報は、ユーザーid苗字email

  • ユーザーテーブル=users
  • ユーザーid(列名)=id
  • 苗字(列名)=last_name
  • email(列名)=email

  • オーダーテーブル=orders
  • 注文日時を持っている=order_time

とした場合

まず、ユーザー一覧から必要な列だけを取得します。

select
  id,
  last_name,
  email
from
  users;
select
  user_id
from
  orders
where
  order_time >= '2017-12-01 00:00:00'
  and order_time < '2018-01-01 00:00:00';

上記の記述では、商品を購入した一覧になってますので、まず、以下の部分をサブクエリとして使用します。

select
  user_id
from
  orders
where
  order_time >= '2017-12-01 00:00:00'
  and order_time < '2018-01-01 00:00:00';

次に、いないにはnot in演算子を使用

select * from テーブル名 where id not in (1,2,3);

以下がnot演算子を使用したサブクエリの記述例になります。

select
  id,
  last_name,
  email
from
  users
where id not in(
select
  user_id
from
  orders
where
  order_time >= '2017-12-01 00:00:00'
  and order_time < '2018-01-01 00:00:00');

実行結果は以下のように2017年12月に商品を購入していないユーザー一覧が出力できます。

スカラ・サブクエリ

スカラ=単一のという意味です。

スカラ・サブクエリとは

必ず1行1列だけの戻り値を返すサブクエリのことです。

※絶対にサブクエリが複数行返さないようにします。

スカラ・サブクエリ記述サンプル

このサンプルは、全商品の平均単価より、高い商品を取得するサンプルで

商品テーブル(products)の金額(price)から

平均単価をavg(price)で求めています。

select
  *
from
  products
where
  price >
	(
	  select
	    avg(price)
	  from
	    products
      );

これを

商品単価の高い順

商品単価が同じ時は、登録順

に並び変えるには、order byを使います。

select
  *
from
  products
where
  price >
	(
	  select
	    avg(price)
	  from
	    products
    )
order by
  price desc, id asc;

実行結果は、商品単価の高い順に並び替えられました。


にほんブログ村 IT技術ブログへ

スポンサーリンク
スポンサーリンク
SNSフォローボタン

フォローする

スポンサーリンク
スポンサーリンク