タグ

DBMSとSQLに関するTakahashiMasakiのブックマーク (7)

  • MySQL :: MySQL 8.0 リファレンスマニュアル :: B.3.4.3 NULL 値に関する問題

    NULL 値の概念については、NULL が空の文字列 '' と同じであると考えがちな SQL の初心者が混乱することがよくあります。 これらは同一ではありません。 たとえば、次の 2 つのステートメントは完全に異なります。 mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES (''); 両方のステートメントで phone カラムに値が挿入されていますが、最初のステートメントは NULL 値を挿入しており、2 番目のステートメントは空の文字列を挿入しています。 最初のステートメントの意味は「電話番号がわからない」、2 番目のステートメントの意味は「この人は電話を持っていないため、電話番号がない」と見なすことができます。 NULL を処理する場合は、IS NU

    TakahashiMasaki
    TakahashiMasaki 2009/09/07
    NULLを比較すると偽に
  • 埋込みSQL:標識変数

    6 埋込みSQL この章では、埋込みSQLプログラムの基的な技法およびその適用方法について説明します。この章の項目は、次のとおりです。 ホスト変数 標識変数 基的なSQL文 DML RETURNING句 カーソル スクロール可能カーソル オプティマイザ・ヒント CURRENT OF句 カーソル文 スクロール不可カーソルを使用する完全な例 スクロール可能カーソルを使用する完全な例 位置付け更新 ホスト変数 Oracleホスト変数を使用してデータおよびステータス情報をプログラムに渡します。同様にプログラムはホスト変数を使用してデータをOracleに渡します。 出力ホスト変数および入力ホスト変数 ホスト変数はその使用方法によって、出力ホスト変数または入力ホスト変数と呼ばれます。 SELECT文またはFETCH文のINTO句内のホスト変数は、Oracleによって出力される列の値が入るため出力

  • SELECT FOR UPDATE - オラクル・Oracle SQL 入門

    SELECT 時に明示的な行ロックを行なう方法 SELECT 〜 FOR UPDATE は行レベルでロックをするための SQL 文である。そのために FOR UPDATE で SELECT した後のプロシージャ処理で処理中のレコードが更新されたり、削除されたりすることを防ぐことが可能である。 しかし、一度に大量のレコードをロックしたり、表全体をロックするような大規模のロックは 同時操作性にも問題が生ずるので極力控えるように設計したい。要件上、どうしても必要な場合には LOCK TABLE などの表ロックを検討する。 SELECT 〜 FOR UPDATE [WAIT | NOWAIT] Oracle 9i から FOR UPDATE の WAIT に待機秒数が指定できる。(※1) SELECT 〜 WHERE ... FOR UPDATE [OF [table_name.]column_n

    TakahashiMasaki
    TakahashiMasaki 2009/02/05
    FOR UPDATE OF
  • トランザクションの一貫性を保証するロック

    ロックの仕組み 第25回、26回と2回にわたりトランザクションの話をしてきました。第25回でも簡単に触れましたが、トランザクションの一貫性を保証するために、データベースサーバはロックという仕組みを利用しています。今回と次回にわたって、このロックの仕組みについて解説することで、トランザクションの裏側を解明したいと考えています。 では早速、例題を実行しながら、SQLの確認をしていきましょう。 トランザクション中の最新データを確認する 初めに、第25回で実行した例題1と同じような例題を実行してみましょう。第25回の例題1は、1人のユーザーがデータを更新中には、もう1人のユーザーはデータの参照ができないことを確認する例題でした。第25回の例題と同様に、2つのクエリアナライザを起動して、片方はログイン名「sa」で、もう片方はログイン名「yamada」でログインをします。 では、まず例題1でログイン名

    トランザクションの一貫性を保証するロック
  • Oracle SQL(SELECT:SELECT文のCASE句の使い方)

    CASE式の構文 CASE式はSQL文等の中で、IF...THEN...ELSE...ENDの論理構造を使用できます。 CASE式は関数とは異なり、SELECT文等のなかでの式の扱いになります。 DECODE関数で同様のことができますが、CASE式の方が考えやすくななります。 CASE <単純CASE式> | <検索CASE式> [<ELSE句>] END <単純CASE式> <式> WHEN <比較式1> THEN <戻り式1> [, WHEN <比較式2> THEN <戻り式2>] ... [, WHEN <比較式n> THEN <戻り式n>] <検索CASE式> WHEN <条件式1> THEN <戻り式1> [, WHEN <条件式2> THEN <戻り式2>] ... [, WHEN <条件式n> THEN <戻り式n>] <ELSE句> ELSE <ELSE式> 単純CASE式

  • ORACLE/オラクルSQLリファレンス(COALESCE)

    COALESCEは、式1がNULL以外の値を戻せば終了しますが、式1がNULLを返した場合は、式2を実行します。 式2がNULLを返せば、次の式3を実行し、引数で指定された式がNULL以外の値を返すまで続きます。 引数で指定された全ての式がNULLを返した場合、NULLをCOALESCEの結果として返します。 例1) COALESCEを使用して、以下の条件で処理結果を返します。 price1がNULL以外の場合、price*0.5の結果を返す。 price1がNULL、かつ、price2がNULL以外の場合、price2を返す。 price1がNULL、かつ、price2がNULLの場合、500を返す。 SQL> select 2   product_id, coalesce( price1 * 0.5, price2, 500 ) 3  from sales; PRO COALESCE(

    TakahashiMasaki
    TakahashiMasaki 2009/01/18
    COALESCE(なんて読むん) 関数
  • SQL の CASE 式って知ってますか? :: Drk7jp

    今日、同僚から MySQL って CASE 式を SQL の中に記述できましたっけ?と聞かれて、SQL 文に CASE - when 式を記述できることを初めて知りました。PL/SQL でのみ有効な構文かと勘違いしてました。 CASE 式はSQL-92 で標準に取り入れられており、意外と歴史は古いです。SQL99 からかと思いました。しかしながら、超便利な CASE 式を知っている人は意外と少ないと思います。Oracle なら同様の処理が記述できる DECODE 関数の方がメジャーですね。実際僕もこちらを用いて業務 SQL を書いてました。 しかし実際のところ、CASE 式の方が明らかに高機能でした。DECODE 関数を使っているOracleユーザには、是非CASE 式への乗り換えを勧めます。CASE 式には下記の通り4つの利用方法があります。 既存のコード体系を新しい体系に変換する(DE

  • 1