SQLer 生島勘富 のブログ

RDB・SQLの話題を中心に情報発信をしています。

CODE VS 2.1 をSQLでやるとどうなる7

前回、こんな「落ちゲー」の ブロックを一つ一つ加算していって、合計が10になる組合せをSQLで探しました。 今回は消すお邪魔ブロック(最初から10以上(= 11)のブロック)を探すSQLを書きます。 繋げるか、一旦テーブルに書き出すか。 前回でも充分な長さ…

CODE VS 2.1 をSQLでやるとどうなる6

前回の続きです。今回は消すブロックを選択するところまで作ります。 作るのは http://codevswc.jp/jpn/rule.html これです。 是非、ルールをよく読んで、「自分なら SQL でこういう方針で作る」 「Javaなら、.Netなら、Rubyなら…… こういう方針で作る」 と…

CODE VS 2.1 をSQLでやるとどうなる5

前回の続きです。今回は、パックを投下するところまでを作ります。 作るのは http://codevswc.jp/jpn/rule.html これです。データは、与えられるInputのサンプルとします。 是非、ルールをよく読んで、「自分なら SQL でこういう方針で作る」 「Javaなら、.N…

CODE VS 2.1 をSQLでやるとどうなる4

前回の続きです。今回はパックを回転するするところまでを作ります。 作るのは http://codevswc.jp/jpn/rule.html これです。データは、与えられるInputのサンプルとします。 是非、ルールをよく読んで、「自分なら SQL でこういう方針で作る」 「Javaなら、…

CODE VS 2.1 をSQLでやるとどうなる3

前回の続きです。 作るのは http://codevswc.jp/jpn/rule.html これです。所謂、「落ちゲー」もある程度、SQLで作れます。 是非、ルールをよく読んで、「自分なら SQL でこういう方針で作る」 「Javaなら、.Netなら、Rubyなら…… こういう方針で作る」 と想像…

CODE VS 2.1 をSQLでやるとどうなる2

作るのは http://codevswc.jp/jpn/rule.html これです。 所謂、「落ちゲー」をSQLで作るにはどうしたらよいか?ということになります。 かなり複雑でルールを良く読み込まないの理解できないでしょう。 是非、よく読んで、「自分なら SQL でこういう方針で作…

CODE VS 2.1 をSQLでやるとどうなる1

CODE VS というコーディングコンテストに参加しました。 CODE VS 2.1 で勝てなかったからネタに 結果は惨憺たるもので、私は1手読みまでで、Largeの条件で9億ぐらいのスコアー。時間とメモリーさえあれば無限に先読み(総当たりで)できるけれど、数手先まで…

MySQLで全文検索2

前回(MySQLで全文検索1)の続き。 my.cnf(my.ini)の調整 FullTextIndex でインデックスされる最小の文字数を確認する。 MySQL5.5以下 mysql> SHOW VARIABLES like 'ft_min_word_len'; +-----------------+-------+ | Variable_name | Value | +------------…

MySQLで全文検索1

私は、MySQLをほとんど使わないのであまり考えたこともないのですが、MySQLの全文検索はブランクやカンマで区切られた単語単位でしかインデックスしてくれないので、単語の区切れのない日本語ではほぼ使えません。 そこで nGram でカットするファンクション…

SQL的(集合的)考え方と、ループ(手続き型)の考え方3

問題を少し変更 問題)部品在庫から、作成可能な製品の情報をとる。 ※本来はマスタテーブルと組み合わすべきですが、ツールの関係上2テーブルしか同時に表示出来ないので名称で結合する形になります。 SQLで考えるなら という風に考えます。 言い換える 『在…

SQL的(集合的)考え方と、ループ(手続き型)の考え方2

もう一度問題 問題)部品在庫から、作成可能な製品名をとる。 ※本来はマスタテーブルと組み合わすべきですが、ツールの関係上2テーブルしか同時に表示出来ないので名称で結合する形になります。 SQLで考えるなら 答えは SELECT 製品名 FROM 部品表 INNER JOI…

SQL的(集合的)考え方と、ループ(手続き型)の考え方1

前回、勉強会に参加したときに感じたことの続き。 みんなはどう考えているか? この問題は正答率が低かった。答えを見たら「あぁ〜」ってなるレベルですが、なかなか、出てこないようです。 問題)部品在庫から、作成可能な製品名をとる。 ※本来はマスタテー…

久しぶりに更新

昨日、SQLWorldの「みんなでSQLを書いてみよう」というハンズオンの企画の勉強会に参加した。 最初にお知らせ 次回の企画のために、「実務で困っているSQL」を募集するそうです。 「こんなのSQLで出来るの?」という問題があれば、コメントやメール info@g1s…

MySQL Cluster: NoSQL について

MySQLの Cluster: NoSQL がなかなか良さそうです。 私自身は、それを使う様な案件に恵まれてないので使わないとは思うけれど、チャンスがあれば使ってみたい。所謂、NoSQLは半端すぎて使いにくい。NoSQLという新たなモノを作るよりも、RDBMS が NoSQL を飲み…

なぜごり押しなのか4

私は基本的に、インターネット上の議論では個別の事情は挟むべきではない。と考えています。 私が個別の事情を挟んでいるとか、感情的とかいう人がいるけれど、全く逆です。 相手が【詐欺師レベル】と分かったとき、議論を打ち切って感情的に怒っているだけ…

なぜごり押しなのか3 -- 初級シスアドレベルは超えるべき。

なぜ、煽って【詐欺師】なんて言うかというと、これは初級シスアドで出題された問題です。 初級シスアドの午後の問題を見れば分かりますが、他が満点でもSQLができなければ合格できない比重になっています。それでも、初級シスアドなんて、就職氷河期を乗り…

なぜごり押しなのか2 -- 詐欺師になるな。

世の中には本当に【詐欺師】のような技術者が詐欺的なものを作って飯を食っています。 例えば、以下、ぱっと見て何をやっているSQLか理解できるでしょうか。 ■ テーブル構造 ■SQL SELECT 資格取得履歴表.社員番号,COUNT(*) FROM 資格取得履歴表,社員表 WHE…

なぜごり押しなのか。

私は妥協点をほとんど出しません。なぜそんなに頑ななのか?その答えは単純です。 SQLを使うか、使わないかでは以下の様なグラフになります。 しかし、多くの人達は以下の様なイメージ上で、議論を行っています。 皆さんがある程度許せるという妥協点は赤丸…

重要な言い換え

ユーザが話したことを、システム化するのがSEの仕事ですが、ユーザが言ったことは、適宜、言い換えなければならない。私は SE の業務理解、設計能力に最も必要な能力は「どれだけ言い換えられるか」ではないかと考えています。 受注のない売上はない! ユー…

トリガーを自動生成2

前回の続き。 非正規化した項目の整合性を維持するトリガーをかいてみます。 トランザクションテーブルにトリガーを設定する。 例として、以下の様な受注明細があったとして、その非正規化項目の整合性を維持するトリガーを書いてみます。 CREATE TABLE T010…

トリガーを自動生成1

トリガーの適応範囲はエクセルで出力できるところまでとすると、必然的にできることは限られます。関連チェックや整合性の維持に限られるでしょう。 まずは書いてみる。 以前書いたトリガーを少し修正してみましょう。(SQLServerで書きました。) トリガー…

トリガーの勘所 -- 「自動的にやってくれる」と「勝手に変わった」

トリガーを嫌う人は非常に多い。 トリガーはレコードの更新を起点(トリガーにして)に自動的に動くので、アプリケーション側のプログラムソースからは追いかけられず、プログラマが意図しない結果になることがある。というのが嫌われる一番の理由でしょう。…

効率の山は複数回訪れる。

正規化の効率を考えてみる。 正規化は基本的な技術ですが、COBOLから抜けきれていないと正規化すると遅くなると感じる様になる。 これはおそらく私もだろうと思うけれど、効率をグラフ化して最初に訪れた山が最高と感じるものです。それはつまり、落ち始めた…

無意識を意識する。

そもそも、私はプログラムを習ったことがないから、一般的な専門学校などでやっている様な講義は知らないしやりようがない。私が講師をやると厳しすぎるので、新人教育を担当することはないのですけれど……。 新人を相手するときに、私が最初に説明するのは「…

OLAP(分析)関数について -- 完成

前回の続きです。やっと完成です。 ざっくりとした考え方(毎回) GROUP BY は集約するので、結果が(集約キーを出力すれば)一意になる。つまり、出力される結果が一意になるまで集約される。 しかし、OLAP(分析)関数は、SELECTされた結果を区切って処理…

OLAP(分析)関数について -- OLAP(分析)関数はSELECT句で並び替え

前回の続きです。やっとOLAP(分析)関数までたどり着きました。 ざっくりとした考え方(毎回) GROUP BY は集約するので、結果が(集約キーを出力すれば)一意になる。つまり、出力される結果が一意になるまで集約される。 しかし、OLAP(分析)関数は、SEL…

OLAP(分析)関数について -- その前にサブクエリーで処理

前回の続きです。 ざっくりとした考え方(毎回) GROUP BY は集約するので、結果が(集約キーを出力すれば)一意になる。つまり、出力される結果が一意になるまで集約される。 しかし、OLAP(分析)関数は、SELECTされた結果を区切って処理する。そのため、…

OLAP(分析)関数について -- SQLはテストファースト指向

OLAP(分析)関数は考え方としては、SQLの他の構文よりも手続き型言語と差が小さい。 考え方ではなく、文法から入る人にとってはとんでもない違いに感じるかも知れませんが、答えは同じなのですから違いはないのです。 長くなるので数回に分けて書こうと思う…

サロゲートキーは後付けでもできる。

業務システムのほとんどはナチュラルキーで構築されていると思います。 しかし、シノニムやトリガーを利用すれば、既存システムを変更することなくサロゲートキーを追加して、それ以降、サロゲートキーによる運用も可能になります。手順は以下の通りです。 …

命名法 - 主キーはサロゲートキーで、テーブル名はナチュラルキーで(笑)

完全に新規の案件というのは本当に少ないので、実践できることはほぼない理想論ですが、私の理想とするテーブル構造と命名法です。 まずは、サロゲートキーについて サロゲートキーというのは業務上意味のないキーのことです。 例えば、生徒テーブルは、年次…