おきらくmanholeの日記

id:manhole

2004-05-28

FROM句でのサブクエリと左外部結合 (http://d.hatena.ne.jp/higayasuo/20040527#1085642737) 11:05

PostgreSQL 7.4.1 (Linux) で確認しました。

# ひがさんの日記へ結果だけコメントしましたので、こちらに詳細を。

準備: Seasarに付属のdemo-oracle.sqlを流してテスト用のデータを作成しておきます。(Oracle用のスクリプトですけれど、PostgreSQLにもそのまま流せます。)

まずは、

  • 左外部結合
  • select A.*, B.* from A, B;

を確認しました。

・SQL文と結果

SELECT 
    DEPT.*
   ,EMP.*
  FROM
    DEPT DEPT
    LEFT OUTER JOIN EMP EMP ON (DEPT.DEPTNO = EMP.DEPTNO)
;

  deptno |   dname    |   loc    | empno | ename  |    job    | mgr  |  hiredate  |   sal   |  comm   | deptno
 --------+------------+----------+-------+--------+-----------+------+------------+---------+---------+--------
      10 | ACCOUNTING | NEW YORK |  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |         |     10
      10 | ACCOUNTING | NEW YORK |  7839 | KING   | PRESIDENT |      | 1981-11-17 | 5000.00 |         |     10
      10 | ACCOUNTING | NEW YORK |  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |         |     10
      20 | RESEARCH   | DALLAS   |  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |         |     20
      20 | RESEARCH   | DALLAS   |  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |         |     20
      20 | RESEARCH   | DALLAS   |  7788 | SCOTT  | ANALYST   | 7566 | 1982-12-09 | 3000.00 |         |     20
      20 | RESEARCH   | DALLAS   |  7876 | ADAMS  | CLERK     | 7788 | 1983-01-12 | 1100.00 |         |     20
      20 | RESEARCH   | DALLAS   |  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |         |     20
      30 | SALES      | CHICAGO  |  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30
      30 | SALES      | CHICAGO  |  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30
      30 | SALES      | CHICAGO  |  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30
      30 | SALES      | CHICAGO  |  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |         |     30
      30 | SALES      | CHICAGO  |  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30
      30 | SALES      | CHICAGO  |  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |         |     30
      40 | OPERATIONS | BOSTON   |       |        |           |      |            |         |         |
 (15 rows)

続いて、

  • FROM句でのサブクエリ

を確認しました。

・SQL文と結果 (社員の所属数が多い順に、部署と社員数を取得)

SELECT 
    COUNT(A.EMPNO)  AS COUNTS
   ,A.DEPT_DEPTNO   AS DEPTNO
  FROM
   (SELECT 
        DEPT.DEPTNO AS DEPT_DEPTNO
       ,EMP.EMPNO   AS EMPNO
      FROM
        DEPT DEPT
        LEFT OUTER JOIN EMP EMP ON (DEPT.DEPTNO = EMP.DEPTNO)
    ) A
  GROUP BY A.DEPT_DEPTNO
  ORDER BY 1 DESC
;

  count | dept_deptno
 -------+-------------
      6 |          30
      5 |          20
      3 |          10
      0 |          40
 (4 rows)

higayasuohigayasuo2004/05/28 18:07どうもありがとうございました。m(_ _)m

manholemanhole2004/05/28 21:30お役に立てて何よりです (*^_^*)

MohmedMohmed2013/11/25 17:06Kudos to you! I hadn't thgouht of that! http://pakteo.com [url=http://uobeniit.com]uobeniit[/url] [link=http://rcrjkhcny.com]rcrjkhcny[/link]

2004-05-23

DBデータのキャッシュ (http://d.hatena.ne.jp/higayasuo/20040523#1085279892) 14:32

SQL*Plusなどから更新をかけた場合、キャッシュには反映されないのでしょうか? SQL*Plusに限らず、他システムからのDB更新が反映されないのは困る、と思います。

キャッシュの有効期限を自由にできれば良いのかなー。もしくは非常に狭い範囲に限定するとか。(1リクエスト単位でのみキャッシュする、とか)

追記:

ひがさんの日記のコメントに、結果セット単位でキャッシュする、って書かれていました。ですから上記の心配は杞憂で済みそうです。

fetchを速くするためのキャッシュなのですね。(先読みキャッシュと認識しました。)

HenrietaHenrieta2013/11/25 10:44I don't even know what to say, this made things so much <a href="http://ctdipkiwlmq.com">eaiesr!</a>

BatuhanBatuhan2013/11/25 16:59At last! Someone who unddtsranes! Thanks for posting! http://boathuck.com [url=http://ckjppqmzlix.com]ckjppqmzlix[/url] [link=http://flzgvulwb.com]flzgvulwb[/link]

2004-05-20

ELSE 01:36

進化の過程を新しい順に拾いました。

S2Daoはめちゃめちゃ便利だと思ってるのですけれど、イマイチ各界の反応が薄い気がするのはなんでなんだろ…? ダイコンのインパクトが強すぎなのか~!?

皆さんS2JDBCで十分なのかしら。それとも今までの資産が充分にあるのかなぁ。

# S2Dao見てると今までの資産を捨てる気になれます!

ManuelaManuela2013/11/25 04:08Kneowldge wants to be free, just like these articles! http://fegkmukivw.com [url=http://zfgneewmlg.com]zfgneewmlg[/url] [link=http://jvrweqy.com]jvrweqy[/link]

MaksimMaksim2013/11/25 17:30Ho ho, who woudla thunk it, right? http://fsgiabtz.com [url=http://famgtjqrg.com]famgtjqrg[/url] [link=http://xuovjqcjm.com]xuovjqcjm[/link]

2004-05-13

Re elseはどうなる (d:id:higayasuo:20040512#1084327619) 00:44

おおお、elseのコメントアウトにぐっときました。 \(^o^)/

ただ、大文字だけ追っていくと BEGIN → ELSE → END ってちょっと違和感が。(elseがifとセットに見えづらい!?)

# と言いつつ他の案を思いつかないのが辛い…

higayasuohigayasuo2004/05/14 06:58elseは小文字にしましょう。ってあまりかわらないか。(^^;

manholemanhole2004/05/15 00:37りょーかいです! ぱっと見たときに把握しやすくなると思います。でも、もう少し改善できそうな気もしています。ムムムム。

2004-05-11

elseもできるかしら? 00:19

次のような場合にはelseを書きたいな~と、妄想してみます。(^^;

/*BEGIN if(#bar != null)*/
  bar=/*#bar*/'a'
/*END*/
/*BEGIN if(#bar == null)*/
  bar is not null
/*END*/

疑似式で書くと...

if (a) {
  // ...
}
if (!a) {
  // ...
}

よりは

if (a) {
  // ...
} else {
  // ...
}

の方が見やすいですし。

# Strutsのタグなんかですと、elseが使えなくてイライラしたりします。

で、ちょっと考えてみました。

・(A)途中にEND, BEGINを置く

/*BEGIN if(#bar != null)*/
  bar=/*#bar*/'a'
/*END*/
/*BEGIN else */
  bar is not null
/*END*/

・(B)途中のEND, BEGINを省く

/*BEGIN if(#bar != null)*/
  bar=/*#bar*/'a'
/* else */
  bar is not null
/*END*/

# (B)の方が好み~。

2004-05-07

登録しました 03:21

RDBスキーなSeasarファンです。よろしくお願いしまーす。(^^)

マイクのテスト中~ 23:12

ふつーの日記と同じに書けば良いのかな?

2004 | 05 | 06 | 07 | 08 | 09 |