タグ

sqlに関するmya3のブックマーク (6)

  • 複雑なSQLをデチューンしてみよう - SQLer 生島勘富 のブログ

    初級編の続きは、 インデックスについて(カラオケで考えよう) IN、EXISTSと違いについて などなどを予定しているのですが、twitter で何度かつぶやいたもののまとめなので、ログなどと差は大きくはありません。 ちょっと訳あって、初級編をお休みして、複雑なSQLのデチューンについて書こうと思います。 というのも、当に私は前提が抜けるというか、相手が理解したと勘違いして進めてしまうことが多いようです。 「『これはできないよ』と思う人が多いだろう」という予想で、複雑なSQLを演習問題として提示してきましたが、もしかすると、ハードルを上げすぎているのかと思い直しました。ストアドプロシージャで処理するにしても、そんな複雑なSQLでなくても当然できます。 私も提示しているSQLは、多分、現場では使いません。 実際に現場で使うのは、多少、デチューンしたものになりますので、何回かに分けてデチュ

    複雑なSQLをデチューンしてみよう - SQLer 生島勘富 のブログ
    mya3
    mya3 2010/06/22
  • 新たなデータベースの選択肢は“NoSQL”

    昨年末から「NoSQL」という言葉をネット上で見かけるようになった。字面だけを見ると「もはやSQLは必要ない」(No SQL)という意味にも取れる。だが実際には、「SQLだけに限らない」(=Not Only SQL)というのが正しいようだ。 NoSQLとは、SQL言語を利用しない非リレーショナルデータベース(RDB)を総称した表現である。代表的なものとして、数値や文字列といったデータ(value)を1個のキー(key)にひも付けて管理する「key-valueストア」がある。 key-valueストアで処理できるのは、keyで検索を実行してvalueの値を読み書きすることだけである。「販売単価が100円以上、1000円未満の製品情報だけを抽出」といった、SQLでは当たり前のように処理できる操作をNoSQLでは実行できない。RDBのようにデータの一貫性を厳密に保持しているわけでもない。 過去に

    新たなデータベースの選択肢は“NoSQL”
  • オブジェクト指向言語ならNoSQLで、RDBMSを使うならサービス指向アーキテクチャで - SQLer 生島勘富 のブログ

    図1 オブジェクト指向言語での一般的な処理 この図は、オブジェクト指向言語としていますが、構造としてはCOBOL技術者がオープンの世界に流れてきて確立した文化からなんの変化もない。非常にいびつで、SQLとオブジェクト指向言語の言語のスパゲッティプログラムです。いびつなことはみんな分かっていて、「インピーダンスミスマッチが……」と言い出すわけです。 オブジェクト指向言語が目指すところは下の図2のようになるでしょう。 図2 オブジェクト指向言語での理想的な処理 この形が可能なら「なぜRDBMSを使う意味があるのか?」という疑問がふつふつと沸いてくる。この構成で可能であるならばRDBMSを使うことのメリットは「一貫性の維持」というところしかないのですが、(これは経験則で目一杯偏見を含んでいますが)図2の構成を選ぶ人が一貫性を維持するためのトランザクション処理を理解し、考慮して構築しているとは思え

    オブジェクト指向言語ならNoSQLで、RDBMSを使うならサービス指向アーキテクチャで - SQLer 生島勘富 のブログ
  • FROM句とWHERE句 - SQLer 生島勘富 のブログ

    SQLが分からないという人は、文法を理解しようとしてしまっていることが多い。ですが、私は文法解説は極力やりません。SQLは全体を把握してイメージでとらえないとまっとうに書けないからです。 SQLのSELECTは次の順で処理されます。 FROM・WHERE句の中のサブクエリ FROM・WHERE句(WHERE句の中の相関サブクエリ) GROUP BY句 HAVING句の中のサブクエリ HAVING句(HAVING句の中の相関サブクエリ) SELECT句 ORDER BY句 SQLが苦手だという人のほとんどは、最初に処理されるFROM句・WHERE句が理解できていません。SQLの基礎はFROM句とWHERE句で、これが理解できるだけで7〜8割できたのも同じですので、しっかりと身につけてください。 まずはイメージから TABLE_A と TABLE_B をそれぞれ B_ID と ID で結合する

    FROM句とWHERE句 - SQLer 生島勘富 のブログ
    mya3
    mya3 2010/06/22
  • ストアドプロシージャでできないと思うのはOracleのせい - SQLer 生島勘富 のブログ

    ストアドプロシージャでできない。できるわけがない。というのは、Oracleのストアドプロシージャ(ファンクション)でSELECT系の処理がどうしても難しいからです。 ストアドプロシージャで弊社で使っているスタブとしてのストアドプロシージャ(ファンクション)は以下のようになります。特にOracleは長くなりますが、番時に書き換えるのは赤い部分だけです。 Oracleの場合 CREATE OR REPLACE PACKAGE TEST_PKG AS /* * テスト作成 */ -- TEST_FUNC 用のオブジェクトタイプを作成 TYPE TEST_FUNC_ROW IS RECORD ( ID NUMBER  -- 主キーです , NAME VARCHAR2(40)  -- 名前 , Bdate DATE  -- 誕生日 , ADDRESS VARCHAR2(255)  -- 住所 );

    ストアドプロシージャでできないと思うのはOracleのせい - SQLer 生島勘富 のブログ
    mya3
    mya3 2010/06/21
  • java.util.Dateをjava.sql.Dateにきちんと変換する方法 - ひがやすを技術ブログ

    多くの人はこうやればいいと思っているかもしれません。 java.util.Date d = new java.util.Date(); java.sql.Date d2 = new java.sql.Date(d.getTime());確かにこれでも一応変換はできますが、きちんと変換してはいません。java.sql.DateのJavadocを見るとこう書いてあります。 SQL DATE の定義に対応させるために、java.sql.Date のインスタンスでラップされたミリ秒の値は、インスタンスが関連した特定のタイムゾーンで時間、分、秒、ミリ秒をゼロに設定することで、「標準化」する必要があります。 つまり、java.util.Date#getTime()をjava.sql.Dateにただ渡すだけでは不十分で、「特定のタイムゾーンで時間、分、秒、ミリ秒をゼロに設定しなければいけない」のです。そ

    java.util.Dateをjava.sql.Dateにきちんと変換する方法 - ひがやすを技術ブログ
    mya3
    mya3 2010/05/19
  • 1