タグ

sqlに関するmasaki0303のブックマーク (13)

  • MySQLノウハウ

    いろいろなからメモってきたメモのメモ。出典を書いておくのを忘れた。思い出し次第補完するかも。 deleteのコストは高いので、無効化を示すフィールドを作ってupdateすべき slow query logに要注意 多くのエントリでほとんどのフィールドが同じ値を持つ場合はインデックスの効果が小さい →複合インデックスの効果が大きい 複合インデックスは指定の順番が大切。AとBという指定の場合、A単独でもインデックスの効果がある。逆は真でない。 インデックスが使われる場面は フィールド値を定数と比較するとき (where name = 'hogehoge') フィールド値でJOINするとき (where a.name = b.name) フィールド値の範囲を求めるとき (<,>,between) LIKE句が文字列から始まるとき (where name like 'hoge%') min(),

  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • 第1回 サブクエリ・パラノイア~副問い合わせ乱用による性能劣化を治療せよ! | gihyo.jp

    図1 テーブルのレイアウト 図2 リスト1の実行結果 cust_id | seq | price --------+-----+------- A | 1 | 500 B | 5 | 100 C | 10 | 600 D | 3 | 2000 リスト1 サブクエリ・パラノイア 患者1号 SELECT R1.cust_id, R1.seq, R1.price FROMReceiptsR1 (※) INNER JOIN (SELECT cust_id, MIN(seq) AS min_seq FROMReceipts ※ GROUP BY cust_id) R2 ON R1.cust_id = R2.cust_id AND R1.seq = R2.min_seq; ※ 同一テーブルを結合する自己結合 さてワイリー、お前ならどうする。 ええっ、ちょっと待ってください。整理します。このReceip

    第1回 サブクエリ・パラノイア~副問い合わせ乱用による性能劣化を治療せよ! | gihyo.jp
  • 3値論理とNULL

    要するに、データベースにnullが1つでも含まれていれば、クエリから正しくない結果が返される可能性がある。しかも、一般的には、どのクエリから正しくない結果が返されるのかを知る方法はないので、すべての結果があやしく見えてくる。nullが含まれたデータベースから正しい結果が得られることは確信できない。筆者に言わせれば、この状況はまさにお手上げである。 ――――C.J.デイト はじめに 多くのプログラミング言語が、真理値型(BOOL型、BOOLEAN型)というデータ型を持っています。もちろん、SQLにも真理値型が存在します。ユーザーが直接扱えるデータ型として定義されたのはSQL-99ですが、WHERE句などの条件の評価時にも真理値の演算が行なわれています。 ところで、普通のプログラミング言語の真理値型とSQLの真理値型の違いをご存知でしょうか? それは、普通の言語の真理値型が、true、fals

    3値論理とNULL
    masaki0303
    masaki0303 2011/05/25
    SQLでのNULLに対する挙動に関して。
  • リレーショナル・データベースの世界

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    masaki0303
    masaki0303 2011/05/09
    データベース入門のためのサイト。時間を作って読み進めよう。
  • limit/offsetについて考える - だるろぐ

    LIMIT 20 OFFSET (:page - 1) * 20 みたいなクエリは :page に大きい値が入れれるように設計されてるとクエリに殺されるので、 WHERE key = :offset_for_next_page LIMIT 20 なクエリになるよう設計してほしい。 http://twitter.com/kamipo/status/56304601049210880 俺もボスに教わるまで知らなかったのだが、 mysql> select id from mentions order by id asc limit 100, 10;がすることは、 データを10個だけfetchする ではなく、 110個データをfetchして、先頭から100個捨てる だ。何を今更って感じですよねー知ったのは10ヶ月ほど前でした。俺の未熟さを思い知れ。 で。このようにlimitを付けてデータを取得する

    limit/offsetについて考える - だるろぐ
    masaki0303
    masaki0303 2011/04/11
    limitとoffsetに関して。意識しておかなければ。
  • Ring

    Ringとは、リクルートグループ会社従業員を対象にした新規事業提案制度です。 『ゼクシィ』『R25』『スタディサプリ』など数多くの事業を生み出してきた新規事業制度は、 1982年に「RING」としてスタートし、1990年「New RING」と改定、そして2018年「Ring」にリニューアルしました。 リクルートグループの従業員は誰でも自由に参加することができ、 テーマはリクルートの既存領域に限らず、ありとあらゆる領域が対象です。 リクルートにとって、Ringとは「新しい価値の創造」というグループ経営理念を体現する場であり、 従業員が自分の意思で新規事業を提案・実現できる機会です。 Ringフロー その後の事業開発手法 Ringを通過した案件は、事業化を検討する権利を得て、事業開発を行います。 さまざまな事業開発の手法がありますが、例えば既存領域での事業開発の場合は、 担当事業会社内で予算や

  • Ring

    Ringとは、リクルートグループ会社従業員を対象にした新規事業提案制度です。 『ゼクシィ』『R25』『スタディサプリ』など数多くの事業を生み出してきた新規事業制度は、 1982年に「RING」としてスタートし、1990年「New RING」と改定、そして2018年「Ring」にリニューアルしました。 リクルートグループの従業員は誰でも自由に参加することができ、 テーマはリクルートの既存領域に限らず、ありとあらゆる領域が対象です。 リクルートにとって、Ringとは「新しい価値の創造」というグループ経営理念を体現する場であり、 従業員が自分の意思で新規事業を提案・実現できる機会です。 Ringフロー その後の事業開発手法 Ringを通過した案件は、事業化を検討する権利を得て、事業開発を行います。 さまざまな事業開発の手法がありますが、例えば既存領域での事業開発の場合は、 担当事業会社内で予算や

  • IDEA * IDEA

    ドットインストール代表のライフハックブログ

    IDEA * IDEA
    masaki0303
    masaki0303 2011/02/08
    視覚で捉えられるので、すごく参考になった。図解する能力があると理解力がかなり上がる気がする。
  • count と distinct

    社員テーブルにおいて、手当の種類は NULL,1000,2000,3000 で、 1000 --> 一人 2000 --> 三人 3000 --> 一人 であるとします

  • 第2回:SQLインジェクションを防ぐには|株式会社トッパンシステムソリューションズ

    ハッキングを行おうとする者にとって、エラー時に表示される情報は非常に有益です。 例えばDBが出力するエラーが直接表示されている場合、ハッカーに対して攻撃のための大きな手がかりを与えてしまうことになります。 まず、システムが出力するエラー情報をユーザに見せないようにしましょう。エラー発生時は、エラーが発生したことのみを画面に表示し、別途エラーログなどを出力することが懸命です。 その他、HTML内にSQLをコメントで出力したり、公開フォルダ内にエラーログを保管するといったことも避けるべきです。 テーブル名やカラム名など、SQL文を構成する要素をユーザに知られないように、可能な限り情報の隠蔽を心がけることが重要となります。 ユーザが画面からデータを入力でき、その値がSQL文の構成要素になる場合、SQLインジェクションが引き起こされる確率が高くなると言っていいでしょう。 水際対策として、ユーザの入

  • - ノヴァちゃん日記 - Railsで直書きのSQL文字列をサニタイズする方法

    Railsで直書きのSQL文字列をサニタイズする方法 どもども!ノヴァちゃんです! Railsでは基的にActiveRecordを利用してSQLを扱うと思いますが、 通常:conditionsパラメータに値を渡すことで、内部で勝手にサニタイズ処理をしてくれます。 Profile.find(:all, :conditions => {:name => "ノヴァ'ちゃん"}) ; # => "ノヴァ''ちゃん" しかし、複雑なSQLや、OR句を用いてSQL文を構築したい場合、 どうしても:conditionsに文字列そのものを渡したくなることがあります。 たとえばこんなSQL文を投げたいとき。 SELECT * FROM profiles WHERE is_live = 1 AND (country = 'Japan' OR contry = 'America') ; まぁ正直この場合も

  • 地獄のようによくわかるSQLテーブル結合 - こせきの技術日記

    テーブルのJOINが苦手でしたが、この例を思いついてからは、すっきりくっきり理解できるようになりました。むしろ頭から離れません……。 ※ INNER、OUTERは飾り。省略できる。 INNER JOINJOIN LEFT OUTER JOIN → LEFT JOIN RIGHT OUTER JOIN → RIGHT JOIN ※ ON ...=... をまとめて USING(属性) と書ける。 ※ 何で結合するか言うまでもない時は、NATURALを指定すると勝手にJOINしてくれる。NATURALにJOINして……。 ※ WHEREは結合した結果に作用する。 ※ 現実には上図のように1対1で結合しません。 ※ おまけ。CROSS JOIN。 こんなの使いません。 ブクマ用画像。

    地獄のようによくわかるSQLテーブル結合 - こせきの技術日記
  • 1