asamiのメモ帳

[DataBase,SQL/SQL文あわせ技]の変更点

「DataBase,SQL/SQL文あわせ技」の編集履歴(バックアップ)一覧はこちら

DataBase,SQL/SQL文あわせ技」(2010/06/16 (水) 16:45:01) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

** LEFT OUTER JOIN と 文字列連結 【データ】 (1)部署マスタテーブル(busho) ・部署ID(busho_id) - NOT NULL ・部署名(busho_name) - NOT NULL (2)社員マスタテーブル(shain) ・社員ID(shain_id) - NOT NULL ・社員名(shain_name) - NOT NULL (3)所属部署テーブル(shozoku) ・部署ID(busho_id) - NOT NULL ・社員ID(shain_id) - NOT NULL (4)基本連絡先テーブル(renraku) ・社員ID(shain_id) - NOT NULL ・メールアドレス(email) - NOT NULL ・メールアドレス2(email2) - NOT NULL (5)緊急連絡先テーブル(kinkyu_renraku) ・社員ID(shain_id) - NOT NULL ・メールアドレス(email) - NOT NULL ・メールアドレス2(email2) - NOT NULL 【やりたいこと】 部署名、社員名、基本連絡先、緊急連絡先を取得する。 基本連絡先、緊急連絡先は、メールアドレスが複数登録されている場合、":"で区切って一つの項目として取得する。 【SQL】 SELECT  shain.shain_name,  busho.busho_name,  case renraku.email2 '' then renraku.email else renraku.email || ':' || renraku.email2 end as renraku_email,  case kinkyu_renraku.email2 '' then kinkyu_renraku.email else kinkyu_renraku.email || ':' || kinkyu_renraku.email2 end as kinkyu_email FROM  busho,  shozoku,  shain   left outer join renraku on (shain.shain_id = renraku.shain_id)   left outer join kinkyu_renraku on (shain.shain_id = kinkyu_renraku.shain_id) WHERE  shain.shain_id = shozoku.shain_id AND  shozoku.busho_id = busho.busho_id AND ORDER BY  busho.busho_id asc,  shain.shain_id asc 【解説】 &bold(){LEFT OUTER JOIN} shain left outer join renraku on (shain.shain_id = renraku.shain_id) 基本連絡先テーブルに該当する社員の情報がなかったら、検索結果0件にするのではなく、値にNULLを設定する。 &bold(){CASE文 と 文字連結} case kinkyu_renraku.email2 '' then kinkyu_renraku.email else kinkyu_renraku.email || ':' || kinkyu_renraku.email2 end as kinkyu_email 緊急連絡先のメールアドレス2が空文字だったらメールアドレス1だけを表示する。 それ以外だった場合は、緊急連絡先メールアドレス1と緊急連絡先メールアドレス2を":"でつないで表示する。 ---- ** INSERTするときに値に改行コードを入れたい 【SQL文】 (1)INSERT INTO a values (0000, 'あい' || chr(13) || chr(10) || 'うえお'); (2)INSERT INTO a values (0001, 'かき' || chr(10) || 'くけこ'); 【解説】 (1) aテーブルの2つ目の項目を「あい\r\nうえお」で登録 (2) aテーブルの2つ目の項目を「かき\nくけこ」で登録 ---- ** システム日付の月だけを取得したい。(Oracle) 例)AAAテーブルのMONTHというカラムを今の月に更新したい。 UPDATE AAA SET MONTH = TO_CHAR(SYSDATE, 'MM'); 結果) 今日の日付:2010/06/16 AAAテーブル |MONTH| |6 合計:&counter(){}
** LEFT OUTER JOIN と 文字列連結 【データ】 (1)部署マスタテーブル(busho) ・部署ID(busho_id) - NOT NULL ・部署名(busho_name) - NOT NULL (2)社員マスタテーブル(shain) ・社員ID(shain_id) - NOT NULL ・社員名(shain_name) - NOT NULL (3)所属部署テーブル(shozoku) ・部署ID(busho_id) - NOT NULL ・社員ID(shain_id) - NOT NULL (4)基本連絡先テーブル(renraku) ・社員ID(shain_id) - NOT NULL ・メールアドレス(email) - NOT NULL ・メールアドレス2(email2) - NOT NULL (5)緊急連絡先テーブル(kinkyu_renraku) ・社員ID(shain_id) - NOT NULL ・メールアドレス(email) - NOT NULL ・メールアドレス2(email2) - NOT NULL 【やりたいこと】 部署名、社員名、基本連絡先、緊急連絡先を取得する。 基本連絡先、緊急連絡先は、メールアドレスが複数登録されている場合、":"で区切って一つの項目として取得する。 【SQL】 SELECT  shain.shain_name,  busho.busho_name,  case renraku.email2 '' then renraku.email else renraku.email || ':' || renraku.email2 end as renraku_email,  case kinkyu_renraku.email2 '' then kinkyu_renraku.email else kinkyu_renraku.email || ':' || kinkyu_renraku.email2 end as kinkyu_email FROM  busho,  shozoku,  shain   left outer join renraku on (shain.shain_id = renraku.shain_id)   left outer join kinkyu_renraku on (shain.shain_id = kinkyu_renraku.shain_id) WHERE  shain.shain_id = shozoku.shain_id AND  shozoku.busho_id = busho.busho_id AND ORDER BY  busho.busho_id asc,  shain.shain_id asc 【解説】 &bold(){LEFT OUTER JOIN} shain left outer join renraku on (shain.shain_id = renraku.shain_id) 基本連絡先テーブルに該当する社員の情報がなかったら、検索結果0件にするのではなく、値にNULLを設定する。 &bold(){CASE文 と 文字連結} case kinkyu_renraku.email2 '' then kinkyu_renraku.email else kinkyu_renraku.email || ':' || kinkyu_renraku.email2 end as kinkyu_email 緊急連絡先のメールアドレス2が空文字だったらメールアドレス1だけを表示する。 それ以外だった場合は、緊急連絡先メールアドレス1と緊急連絡先メールアドレス2を":"でつないで表示する。 ---- ** INSERTするときに値に改行コードを入れたい 【SQL文】 (1)INSERT INTO a values (0000, 'あい' || chr(13) || chr(10) || 'うえお'); (2)INSERT INTO a values (0001, 'かき' || chr(10) || 'くけこ'); 【解説】 (1) aテーブルの2つ目の項目を「あい\r\nうえお」で登録 (2) aテーブルの2つ目の項目を「かき\nくけこ」で登録 ---- ** システム日付の月だけを取得したい。(Oracle) 例)AAAテーブルのMONTHというカラムを今の月に更新したい。 UPDATE AAA SET MONTH = TO_CHAR(SYSDATE, 'MM'); 結果) 今日の日付:2010/06/16 AAAテーブル |MONTH| |6| 合計:&counter(){}

表示オプション

横に並べて表示:
変化行の前後のみ表示: