1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLパズル p113 26 DFDその1の学習メモ

Posted at

概要

SQLパズル p113 26 DFDその1の学習メモです。

解くうえで以下2つがポイントです。
・cross結合で順序対を作ることと
・exceptを使った差集合演算

要件

DFDで存在しないフローを取得したい

image.png

DFDで図示した場合、赤線部分を取得したい

image.png

SQL

DDL

drop table if  EXISTS DataFlowDiagrams; 
CREATE TABLE DataFlowDiagrams
(diagram_name CHAR(10) NOT NULL,
 bubble_name CHAR(10) NOT NULL,
 flow_name CHAR(10) NOT NULL,
    PRIMARY KEY (diagram_name, bubble_name, flow_name));

INSERT INTO DataFlowDiagrams VALUES('Proc1',  'input' ,   'guesses');
INSERT INTO DataFlowDiagrams VALUES('Proc1',  'input' ,   'opinions'); 
INSERT INTO DataFlowDiagrams VALUES('Proc1',  'crunch',   'facts');
INSERT INTO DataFlowDiagrams VALUES('Proc1',  'crunch',   'guesses');
INSERT INTO DataFlowDiagrams VALUES('Proc1',  'crunch',   'opinions' );
INSERT INTO DataFlowDiagrams VALUES('Proc1',  'output',   'facts');
INSERT INTO DataFlowDiagrams VALUES('Proc1',  'output',   'guesses');
INSERT INTO DataFlowDiagrams VALUES('Proc2',  'reckon',   'guesses');
INSERT INTO DataFlowDiagrams VALUES('Proc2',  'reckon',   'opinions' );


答えのSQL

-- 26 DFD その1
SELECT *
FROM ( -- bubble_nameとflow_nameの組み合わせを全部算出する。
    SELECT F1.diagram_name, F1.bubble_name,F2.flow_name
        FROM DataFlowDiagrams AS F1
        CROSS JOIN DataFlowDiagrams AS F2) AS TMP
	EXCEPT -- 存在するテーブルを弾く。
	SELECT F3.diagram_name,F3.bubble_name,F3.flow_name
	FROM DataFlowDiagrams AS F3
;
-- FROM以下のSQLを確認する
--クロス結合で直積を求める。(9*9=81の組み合わせ)
SELECT F1.diagram_name, F1.bubble_name,F2.flow_name
FROM DataFlowDiagrams AS F1
CROSS JOIN DataFlowDiagrams AS F2;

-- 既にあるフローを表示する
SELECT F3.diagram_name,F3.bubble_name,F3.flow_name
FROM DataFlowDiagrams AS F3
;

image.png

参考

SQLパズル p113 26 DFD

SQLパズル サポートページ
https://mickindex.sakura.ne.jp/database/db_support_sqlpuzzle.html#LocalLink-p26

達人に学ぶSQL徹底指南書第2版 p44 重複順列、順列 組み合わせ クロス結合を使って順序対を作成

dfdの例
https://cacoo.com/ja/blog/what-is-dfd/#i

postgresql except
https://www.postgresql.jp/docs/15/queries-union.html

github 差分
https://github.com/RYA234/SQL_Puzzle_Learning/commit/1d2c0e852024ee85957b3825f6140cc25808da8b

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?