リストの内包表記と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"]]