- ベストアンサー
SQLの副問い合わせと相関副問い合わせの違い
- SQLの副問い合わせと相関副問い合わせの違いについて教えてください。
- 副問い合わせと相関副問い合わせを判断するコツを教えてください。
- EXISTSを使った場合の副問合せと相関副問い合わせの違いを解説してください。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- 相関副問い合わせについて
いつもお世話になっています。 相関副問い合わせについて質問です。テーブルSalesに三つのカラム、ProductID、QuantityとSaleDateがあるとします。 各商品の日ごとの売上数量が商品毎の平均の売上数量より上の日を取り出すSQL文がSQL1のようになるようです。ここでわからないのがSQLの動きです。AVG関数は集合関数だと思うのですが、副問い合わせにGROUP BY句がないけど、相関によりそれが成り立っているというのはそういう動きなんだなと理解しました。 ただ自分のこれまでの経験では、こういったものをやったことがないので、基本的に副問い合わせが先に評価され、その結果と主SQLのWHERE句で比較をして主SQLが評価されるという基本的な動きが普通という考え方がこびりついています。 この相関副問い合わせのSQL1だとテーブルs1がProductID毎に評価され、ProductIDが移り変わると副問い合わせのテーブルs2でそのs1.ProductIDと同じ値毎に平均が計算されていくという動きをしているととらえているのですが、それであっているのでしょうか? よろしくおねがいします。 (SQL1) SELECT s1.SaleDate FROM Sales AS s1 WHERE s1.Quantity > (SELECT AVG(s2.Quantity) FROM Sales AS s2 WHERE s1.ProductID = s2.ProductID )
- ベストアンサー
- その他(データベース)
- SQLの質問
3つわからないことがあります。 1.SQLのINとEXISTSって何が違うんですか? 本を見ると ・WHERE 項目 IN(select・・・) ・WHERE EXISTS(select・・・) INはWHEREとの間に何か入り、EXISTSは何も入ってないようですが・・。違いがわかりません。 2.そして、上の質問の続きですが、副問合せ文中で主問合せの表を参照する ことを相関問合せと、いうらしいのですが、解説を見ると、existsのときの み相関問合せは使える、ように書いてあります。しかし別の本ではINを使用 してるときでもこの相関問合せが使われていて・・・・・??何がなん だかわからなくなりました。 3.そしてまた別の本では、”相関副問合せ”というものがあり、相関問合せと同じ ものなのか、違うものなのかわかりません。ぱっと見た限りでは相関問合せと同じに見えるのですが・・・
- ベストアンサー
- その他(データベース)
- SQL Server を使っています。SQLの質問です。
SQL Server を使っています。SQLの質問です。 得意先テーブルと商品テーブルと売上明細テーブルがあります。 一つの商品に関して得意先ごとに最新の売上明細データの一覧を作成したいと考えて います。 ■売上明細データ 明細ID (meisai_id) 得意先ID (tokuisaki_id) 商品ID (syohin_id) 売上金額(uriage_kingaku) 売上日 (uriage_date) ■売上明細データ(table_uri_maisai) meisai_id tokuisaki_id syohin_id uriage_kingaku uriage_date ================================================================= 1 aaa 001 100 2010/01/01 2 aaa 002 200 2010/01/01 3 bbb 001 105 2010/01/02 4 bbb 002 205 2010/01/02 5 ccc 001 110 2010/01/03 6 ccc 002 210 2010/01/03 7 aaa 001 100 2010/01/04 8 aaa 002 200 2010/01/04 9 bbb 001 105 2010/01/05 10 bbb 002 205 2010/01/05 11 ccc 001 110 2010/01/06 12 ccc 002 210 2010/01/06 上のような明細があり、「syohin_id」が「001」のデータに関して、 得意先ごとの最新のデータだけを抽出したいと考えています。 この場合ですと、以下の3件のデータが抽出できればよいわけです。 7 aaa 001 100 2010/01/04 9 bbb 001 105 2010/01/05 11 ccc 001 110 2010/01/06 tokuisaki_id と syohin_id の2つを特定して1件のデータを抽出するには 以下のSQLで実現できましたが、syohin_id だけを指定して複数のデータを 出すことがどうしてもできません。 SELECT * FROM table_uri_meisai WHERE uriage_date = (select max(uriage_date) FROM table_uri_meisai WHERE tokuisaki_id = 1 AND syohin_id = 1) AND tokuisaki_id = 1 AND syohin_id = 1 どなたかご指導ください。 よろしくお願いします。
- ベストアンサー
- SQL Server
- 単一SQL文にて抽出可能でしょうか?
単一SQL文にて抽出可能でしょうか? Ver8.3系 予めサブクエリーにて任意の条件にて抽出した店データのIDの値を基に、 商品データを抽出するのですが、その商品は、お店毎にランダムに1件抽出される。 <抽出例> 例えば、サブクエリーにて5店舗対象となり、そのお店紐付けられる商品は お店毎にランダムに1商品しか抽出されない。 店ID、商品ID 000001、100001 000002、305001 010000、200010 011111、300001 020000、150000 色々試しているのですが、うまくいきません。 お詳しい方、ご教授願えないでしょうか? よろしくお願いします。
- ベストアンサー
- PostgreSQL
- SQLが分かりません
SQLの初心者です。 ACCESSで売上げ管理をしようと考えています。 売上げに関するテーブルは以下のようになっています。 ●売上げヘッダ テーブル 伝票番号(キー) 売上日 売上げ金額 : ●売上げ明細 テーブル 伝票番号(キー) 枝番(キー) 商品コード 商品名 単価 数量 値引金額 : 値引金額は商品ごとに決まり、値引きしなければ0が、値引きがあればその金額が入ります。 売上げ一覧を表示する時に、以下のようなイメージで、 ワークテーブルを作って、値引きがあれば「あり」と画面に表示させたいのです。 ※無い時は何も表示させません 伝票番号 売上日 売上げ金額 値引き有無 9999 2004/1/1 10,000 10000 2004/1/2 1,500 あり 10001 2004/1/2 20,000 10002 2004/1/3 18,900 10003 2004/1/4 23,500 あり 1回のSQLで実行したいのですが、SQLには詳しくないので、 どのように書けばよいか分かりません。 よろしくお願いします。 値引き区分が無ければ、売上げヘッダを見るだけなのですが、 値引きがあるかどうかは、売上げ明細まで見なければいけないので、 SQLの書き方が分からないのと、以下のようなワークテーブルを 作る必要があると思うのですが、どうなのでしょうか。 ●ワーク テーブル 伝票番号 売上日 売上げ金額 値引き区分
- ベストアンサー
- その他(データベース)
- 1つのSQLで2段階の抽出を行いたい
恐らくそれほど複雑なSQLではないと思いますが、中々SQLが作成できず困っています。 回答いただければ嬉しいです。 以下のテーブルがあったと仮定します。 テーブル名: 売上げ明細 カラム: ・商品ID … 売上げ明細なので一意ではありません ・単価 … 同じ商品IDでも、レコードによって単価は異なります ・数量 … 1~5の整数のみとします 実際のデータは以下の通りです。 商品ID,単価,数量 1001,50,2 1001,60,5 1002,90,3 1003,60,5 1003,80,4 1003,90,1 1004,60,3 上記データを以下の通り抽出するには、どのようなSQLを組めばいいでしょうか? 1.まず各商品IDの中から単価が最大のレコードだけを取り出す 商品ID,単価,数量 1001,60,5 1002,90,3 1003,90,1 1004,60,3 2.次に数量でgroup by して、件数をカウントする 数量,件数 1,1 3,2 5,1 1つのSQL文で2の結果が得られれば、途中の抽出条件は特に問いません。 ちなみにMySQL5を使っています。 よろしくお願いします。
- ベストアンサー
- MySQL
- SQL文を教えて下さい
VB2008、SQL Server で開発をしています。 下記の条件でデータを取得したいのですが、SQL文がうまくできず、困っています。 おわかりの方、教えてください。 仕様:得意先マスタ(得意先M)の全件と、売上テーブル(売上T)を読みます。 売上テーブルの商品コードの商品名を商品マスタ(商品M)より取得します。 得意先マスタの全得意先を取得する必要があります。 すべての得意先の売上データが存在するわけではありません。 ACCESS上でクエリを作成し、SQLビューにすると、こうなります。 inptSyoCD:画面から入力した商品コード 1,まず、クエリ1: SELECT 売上T.伝票日付, 売上T.伝票番号, 売上T.得意先コード, 売上T.明細区分, 売上T.商品コード, 商品M.商品名称 FROM 売上T LEFT JOIN 商品M 売上T.商品コード = 商品M.商品名 WHERE 売上T.明細区分=1 AND 売上T.商品コード= inptSyoCD ; 2,次に、実際に処理するSQL文: SELECT 得意先M.得意先コード, 得意先M.得意先名称, クエリ1.伝票日付, クエリ1.伝票番号, クエリ1.明細区分, クエリ1.商品コード, クエリ1.商品名 FROM 得意先M LEFT JOIN クエリ1 ON 得意先M.得意先コード = クエリ1.得意先コード ORDER BY 得意先M.得意先コード,売上T.伝票日付,売上T.商品コード; この2つをひとつのSQL文にする方法がわかりません。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- SQLを教えて下さい
SQL server 2008 R2 と VB2010 で開発を行っています。 いま、月別の合計金額を計算するSQLがわからなくて困っています。 【売上明細テーブル】 ・明細ID ・年月日 ・得意先ID ・売上金額 出力したい内容は以下のような月別売上合計の推移です。 具体的にはこんな感じです。 得意先ID 3月売上 4月売上 5月売上 --------------------------------------- 0001 1,111 2,222 3,333 0002 2,222 3,333 4,444 0003 5,555 0 6,666 得意先の中には売上の無い月もあります(0003の4月)が、 この場合も一覧に出したいと考えています。 1つのロウの中に異なる条件の値がある場合のSQLの組み立てがわかりません。 どうぞ宜しくお願いします。
- ベストアンサー
- SQL Server
- SQLiteによる相関副問い合わせ
SQLiteによる相関副問い合わせ SQLiteのデータベースについて質問です。 以下のような、商品データベースと、その商品の色に関するデータベースを持っています。 【テーブル head 】 帽子のデータベース name | 値段 | 季節 ------------------------- シルクハットA | 3980 | 春 シルクハットB | 2980 | 夏 キャップA | 1980 | 春 【テーブル color 】 name | color | 配合率 ------------------------- シルクハットA | 赤 | 80 シルクハットA | 白 | 20 シルクハットB | 黄 | 40 シルクハットB | 黒 | 60 キャップA | 青 | 30 キャップA | 黒 | 70 上記のデータベースから黒を含む商品の名前と値段を出力しようと以下の構文を実行しました。 SELECT * FROM head AS H WHERE EXISTS ( SELECT * FROM color WHERE H.name = name AND color = '黒' ) 上記で「Error: near "SELECT": syntax error」になってしまいました。どこが間違っているのでしょうか?
- ベストアンサー
- その他(データベース)
- 要求を満たすことのできるSQL文を教えてください
現在、売上の明細を明細IDごとにグループ化し合計値を表示させるプログラムを開発中です。 以下のような要件を満たすSQL文を教えてください。 【もともとの売上の明細のテーブル】 明細ID | NAME | KINGAKU 001 |商品A | 1000 001 |商品B | 500 001 |商品C | 300 002 |商品A | 1000 002 |商品D | 1500 【グループ化後のテーブル】 明細ID | NAME | KINGAKU 001 |商品A | 1800 002 |商品D | 2500 ・明細IDごとに金額を合計する。 ・NAMEの列については、その明細IDの中で最大の金額の商品名を入れる。 ※現在、明細IDごとに金額を合計するのはできているのですが、 もう1つの要件をどのようにすれば達成できるのか分からない 状況です。要件を満たすことのできるSQL文をぜひ教えてください。 よろしくお願いいたします。
- ベストアンサー
- SQL Server
お礼
ありがとうございます。なんとなく解った気がします。主問い合わせの列名と副問合せの列名が一致していたら相関問い合わせなんですね?なるほどぉ~と感心しました!