PR

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

スポンサーリンク
この記事は約4分で読めます。

サブクエリとは

 

ある問い合わせの結果に基づいて、異なる問い合わせを行う仕組みで、複雑な問い合わせができます。
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 in演算子を使用したサブクエリの記述例になります。

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技術ブログへ

 

もっとスキルアップしたい方は
↓   ↓
時間や場所に縛られず学習できるMySQL3選

コメント

タイトルとURLをコピーしました