今、サブクエリを勉強しているのですが
サブクエリの話を聞くにつれて、「これ外部または内部結合で代用できるしそっちの方が見通しいいような。。。」
と思って、、、
ここで聞きたいのが、サブクエリを用いた時のうまみ、そしてサブクエリにしかできないこととはなんなのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
副問合せ(サブクエリー)には相関副問合せも含まれます。
相関でない副問合せを結合(join)に置き換え、同じ結果になるのは、直積(cross join)のみです。
相関副問合せを結合に置き換え、同じ結果とするには必然的に外部結合(outer join)になります。
基本的には結合で考えて、状況次第でサブクエリーとする方が良いと思いますよ。
結合にするか相関問い合わせにするかの選択は、コストとの見合いです。
DBMSとデータの状況によるものですから、必要に応じて検討すべきものだと思います。
投稿2019/04/18 05:14
総合スコア25430
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私も勉強(1年ちょっとですが)したての頃はサブクエリを使う利点は何だろうと思ってました…。
1. JOIN テーブルA ON 結合条件 = 結合条件 2. JOIN (SELECT id,name FROM テーブルA) as テーブルA ON 結合条件 = 結合条件
上記2種類の結合方法がありますが、サブクエリを用いた場合だと参照してくるテーブルのカラム名を絞れます。
1.の場合だとテーブル内の全カラムを参照してきます。
カラムが数個ならそこまで問題ありませんが、業務ではカラムが数百個あるテーブルもあるためパフォーマンスに影響したりします。
個人的にサブクエリを用いるならWITH句がオススメです。
WITH句はSQL内で仮テーブルを作れるイメージです。
調べると色々と出てくるので参考にしてみてください。
投稿2019/04/18 05:23
総合スコア40
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
あるテーブルに集計関数をかけた結果を使って、別のテーブルに対してWHERE
を行いたい場合、「WHERE
の条件内でサブクエリを書く」あるいは「集計関数をかけた結果をサブクエリとしてJOIN
を行う」の2択となります。
結合では実行できない一般的な形式のサブクエリー比較の例を次に示します。これは、
column1
値がテーブルt2
内の最大値に等しいテーブルt1
内のすべての行を検索します。(MySQL 5.6リファレンスより)
sql
1SELECT * FROM t1 2 WHERE column1 = (SELECT MAX(column2) FROM t2);
投稿2019/04/18 04:07
総合スコア146550
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
勉強中とのことなのでMySQLマニュアルを参考に
サブクエリの種類と置き換えが可能かどうかをよく勉強してみてください
投稿2019/04/18 03:44
総合スコア117682
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。