質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

1742閲覧

SQLのサブクエリについて

duster

総合スコア13

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/02/10 15:13

編集2017/02/10 15:38

SQLのサブクエリについて教えて下さい。

以前に下記のような質問をした者です。

================================
県テーブル
県コード 県名
1 A県
2 B県
3 C県

店テーブル
店コード 店名
1 A店
2 B屋

店舗数テーブル
県コード 店コード 店舗数
1 1 3
1 2 4
2 2 5

上記のテーブルを結合した場合の結果が、

県コード 店コード 店名 店舗数
1 1 A店 3
1 2 B店 4
2 1 A店 0
2 2 B店 5
3 1 A店 0
3 2 B店 0

上記のように、店舗数テーブルにレコードがない、
県テーブルの県コード’3’の情報も取得したいと考えております。
================================

上記の質問に対し、下記の解答を頂きました。

================================
SELECT
p.県コード,
s.店コード,
s.店名,
IFNULL(nos.店舗数, 0) AS 店舗数

FROM
県テーブル AS p

INNER JOIN 店テーブル AS s

LEFT OUTER JOIN 店舗数テーブル AS nos
ON p.県コード = nos.県コード
AND s.店コード = nos.店コード

ORDER BY
県コード,
店コード;
================================

上記の解答の

「県テーブル AS p

INNER JOIN 店テーブル AS s」

をサブクエリに置き換え、項目を取得したいと考えております。

ご教授の程、よろしくお願い致します。

ツール:A5
言語:MySQL

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Panzer_vor

2017/02/10 23:51

サブクエリしたい目的というのは何かありますでしょうか?(サブクエリ使った方が解決しやすい課題があるなど)
guest

回答1

0

ベストアンサー

依頼を別で出させていただいてますが、
おそらく勉強目的でのサブクエリ化という認識で相違ないですかね?
(※サブクエリ化するメリットがあまり見受けられないので要件・仕様的なところではないとは思ってます。)

質問者様があげられて箇所をサブクエリ化した場合、
修正後のクエリは以下のようなイメージとなります。

SQL

1SELECT 2  
 t.*, 3  
 IFNULL(nos.店舗数, 0) AS 店舗数 4FROM  
 5 ( 6 SELECT 7 p.県コード, 8  
 s.店コード, 9  
 s.店名 10 FROM 11 県テーブル AS p 12 -- 下記は前回回答追記の通り「CROSS JOIN」へ置き換え可能です 13 INNER JOIN 店テーブル AS s 14 ) AS t 15 LEFT OUTER JOIN 店舗数テーブル AS nos 16ON  t.県コード = nos.県コード 17  
 AND t.店コード = nos.店コード 18ORDER BY 19  
 t.県コード, 20  
 t.店コード 21;

結局サブクエリ(副問い合わせ)って何ぞやというと、
基本的には**一番外側のSELECT文(主問合わせ)**内の、
いずれかの部分(SELECTのカラムリスト部分、FROM句内、WHERE句内など)に登場するSELECT文を総称した呼び名です。

あまり難しく考えすぎなくとも良いかなと思います。

投稿2017/02/11 00:38

編集2017/02/11 00:46
Panzer_vor

総合スコア1636

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

duster

2017/02/11 02:15

ご回答頂きありがとうございます。 おっしゃる通り、勉強目的の質問でございます。 ご解説頂きありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問