リストの内包表記とSQL
多分、既にいろんな人が気づいていると思うのですが・・・
リストの内包表記とSQL(SELECT)って似てるよね!!!
-
-
- -
-
これがSQL(SELECT)
SELECT t.a, t.b, t.c FROM sometable t WHERE t.a > 0 and t.b = 'AAA'
で、これがリストの内包表記
[(t.a, t.b, t.c) \\ t <- sometable | t.a > 0 and t.b = "AAA"]
ね、似てるでしょ。
-
-
- -
-
テーブルの結合は、こんな感じ?
SELECT ta.cd, ta.val, tb.val FROM tableA ta, tableB tb WHERE ta.cd = tb.cd [(ta.cd, ta.val, tb.val) \\ ta <- tableA, tb <- tableB | ta.cd = tb.cd]
結合は、SQLなら、こう書くほうがよい。
SELECT ta.cd, ta.val, tb.val FROM tableA ta INNER JOIN -- 外部結合にしたければ、LEFT JOIN tableB tb ON ta.cd = tb.cd
リストの内包表記だと、外部結合はないよね。
-
-
- -
-
サブクエリもできる。
SELECT ta.cd, ta.val FROM tableA ta WHERE ta.cd in (SELECT tb.cd FROM tableB tb WHERE tb.val = 'AAA') [(ta.cd, ta.val) \\ ta <- tableA | isMember ta.cd [tb.cd \\ tb <- tableB | tb.val = "AAA"]]