「ブログ」カテゴリーアーカイブ

ブログ投稿用のカテゴリ

SQL:合計や平均を算出する方法

SQLで合計を求めるにはSUM関数、平均を求めるにはAVG関数を使用します。

DBMS毎の使用可否

関数\DBMSMySQLPostgreSQLSQL ServerOracle
SUM
AVG
 

サンプルテーブル

「GOODS」テーブル

合計を求める実行例

SUM関数を使用したクエリー(SQL)例

  • 以下の例ではGOODSテーブルのPRICE項目の合計値を求めています。

実行結果

平均を求める例

AVG関数を使用したクエリー(SQL)例

  • 以下の例ではGOODSテーブルのPRICE項目の平均値を求めています。

実行結果

SQL:副問合せの結果をALL句で比較して取得する方法

ALL句を使用することでWHERE句内に指定した副問合せの結果を比較してデータを抽出する事が可能となります。

サンプルテーブル

  • 「GOODS」テーブル
  • 「GOODS_TYPE」テーブル

ALL句を利用したクエリー(SQL)例

  • 以下の例ではまず副問合せでGOODS_CODEテーブルからGOODS_CODEが101と301のデータを取得し、ALL句でGOODSテーブルのGOODS_CODEが101と301以外のデータを取得しています。

実行結果

ワイヤレス トラックボールマウスが快適すぎた件

以前まではマウスにはそこまでこだわりがない方だったので光学式の安物を使用してましたが、リモートワークなどでPC操作時間が増えてくるとマウス操作で地味に手首に負担がくるのが気になってきたので意を決してトラックボールマウスを購入してみることにしました。

そこで半年位前に購入してみたのが

ロジクールの「トラックボールマウス ワイヤレス マウス windows mac iPad M575」です。

Amazonの「ロジクール ワイヤレスマウス トラックボール 無線 M575GR」ページへ

「トラックボールマウス ワイヤレス マウス windows mac iPad M575」の特徴

  • 発売日:2020/11/26
  • 参考希望小売価格:6,050円
  • 接続方式:無線アドバンス2.4GHz Unifying-USB、Bluetooth
  • メーカー:Logicool(ロジクール)
  • 対応機種:IPad, Windows, Mac
  • モデル番号:M575GR ※最新モデル(2021年12月購入時点)
  • 製品サイズ:10 x 13.4 x 4.8 cm
  • 重量:145 g
  • 「傾斜角度が付いたスクロールホイールで指をより自然で快適な位置にホールド/幅広い手の大きさにフィット」

 

トラックボールマウスの使用感

  • 購入後1ヶ月位は正直トラックボールでのマウスポインタ操作にかなり違和感がありました。
  • 購入後2,3ヶ月でだいぶ違和感がとれてきて、半年経った今では全く違和感なくなり以前のマウスは使う気がしなくなっちゃいましたw
  • 付属で「電池寿命最大24ケ月 グラファイト 国内正規品」も付いてきており未だに電池切れは起こしてないので2年持つというのも誇大広告ではなさそうです。
  • 1ヶ月位でトラックボールの滑りが悪くなってくるのでボールを外してほこりや垢を掃除すれば問題なく使えます。
  • 掃除の際にトラックボールにクリポリメイト(光沢剤)などを吹きかける事でさらに滑りがよくなります。

結論

  • 買って良かった!リモートワークがますます快適にw
  • まだトラックボールマウスを使用したことがなく、マウス操作で腱鞘炎などで手首が疲れてる自覚がある方には購入して損はないです。
  • 最初の違和感さえ克服すれば後は快適です♪
    Amazonの「ロジクール ワイヤレスマウス トラックボール 無線 M575GR」ページへ

Excel:文字列から指定した数の文字列を取得する方法

ExcelでMID関数を使用することで文字列から指定した数の文字列を取得することが出来ます。

MID関数は「=MID(文字列,開始位置,文字数)」で指定します。

開始位置へ 1 を指定することで先頭から取得することができます。

MID関数を使用して郵便番号から先頭3桁、末尾3桁を取得する例

  • 以下の例ではB4セルへ「=MID(B2,1,3)」を指定して郵便番号の先頭3桁を取得し、B5セルへ「=MID(B2,5,4)」を指定して末尾4桁を取得して表示しています。

 

Oracle:DESCRIBEコマンドでテーブル(表)構造を確認する方法

SQL PlusやSQL Developerに用意されている「DESCRIBE」コマンドを使用することでテーブル構造を確認することが出来ます。

DESCRIBEコマンドはDESCと省略することも出来ます。

SQL PlusでのDESCRIBEコマンド実行例

  • 「DESCRIBE テーブル名」でテーブル構造が確認できます。

SQL PlusでのDESCコマンド実行例

  • DESCでもDESCRIBEと同じ結果を取得できます。

Oracle:接続時に「ORA-01109:データベースがオープンされていません。」エラーが出た場合の原因と対応方法

DBクライアントソフトなどでOracle DBへ接続時に「ORA-01109:データベースがオープンされていません。」が表示された場合の原因と対応方法についてメモしておきます。

「ORA-01109:データベースがオープンされていません。」の原因

  • 文字通り接続しようとしているDBがオープンされていないのが原因となります。今回接続先を「ORCLPDB」に指定していましたがそこがオープンされていないようです。
  • 念のためSQL Plusを起動して「show pdbs」コマンドでプラガブル・データベース(PDB)のオープン状態を確認するとやはりオープンされていませんでした。

「ORA-01109:データベースがオープンされていません。」の対処方法

  1. SQL Plusで「alter pluggable database ORCLPDB open;」コマンドを実行し、ORCLPDBをオープンします。
  2. 「show pdbs」コマンドでプラガブル・データベース(PDB)のオープン状態を確認します。
  3. これでORCLPDBのオープンだけなら完了していますが、このままPCを再起動するとまた再びクローズ状態に戻ってしまいます。ですので最後に現在オープンされている全てのPDBを自動起動(オープン)するように「alter pluggable database all save state;」コマンドで保存します。

 

SQL:文字列や数値項目へ埋め込み文字を挿入して桁数を揃える方法

SQLでゼロ埋めスペース埋めして桁数を揃えたい場合にはLPAD関数やRPAD関数を使用することで取得可能となります。DBMSによっては使用出来ないものもあります。

関数\DBMSMySQLPostgreSQLSQL ServerOracle
LPAD
RPAD
 

書式は「LPAD(列名,バイト数,’埋め込み文字’)」、「RPAD(列名,バイト数,’埋め込み文字’)」で指定します。第三引数の埋め込み文字を省略すると半角スペースが埋め込まれます。

サンプルではOracleでの使用例となります。

サンプルテーブル

  • 「GOODS」テーブル

LPAD関数の使用例1

  • 項目「GOODS_CODE」を10桁でゼロ埋めするSQL(クエリー)
  • 実行結果

LPAD関数の使用例2

  • 項目「GOODS_CODE」を10桁で全角「*」埋めするSQL(クエリー)
  • 実行結果
    以下のように埋め込み文字へ全角文字を指定すると1文字=2バイト扱いで埋め込まれます。

RPAD関数の使用例1

  • 項目「GOODS_CODE」を10桁でゼロ埋めするSQL(クエリー)
  • 実行結果

RPAD関数の使用例2

  • 項目「GOODS_CODE」を10桁で全角「*」埋めするSQL(クエリー)
  • 実行結果
    RPADでも以下のように埋め込み文字へ全角文字を指定すると1文字=2バイト扱いで埋め込まれます。

Excel:空白(空欄・未入力)セルの数をカウントする方法

Excelで空白(空欄・未入力)セルをカウントするにはCOUNTBLANK関数を使用することで簡単に取得可能です。COUNTBLANK関数は空白セルの有無や数をカウントしたい場合に利用できます。

数値として 0 (ゼロ) を含むセルはカウント対象外です。

空白(空欄・未入力)セルの数をカウントする例

COUNTBLANK関数は「COUNTBLANK(範囲)」で指定します。

以下の例ではB10セルの書式へ「=COUNTBLANK(B2:B8」を指定してB2~B8セルまでの空白セル数を取得しています。

SQL:WHERE句内で「(+)」を指定する意味

SQLを見てるとたまにWHERE句内で「(+)」と記載されているのを見かけることがあります。

この「(+)」はOracle独自で記載が可能となる外部結合演算子といって、「g.GOODS_CODE = gt.GOODS_CODE(+)」のように指定するとLEFT OUTER JOINと同じ結果を取得することが出来ます。

サンプルテーブル

  • 「GOODS」テーブル
  • 「GOODS_TYPE」テーブル

外部結合演算子を利用したクエリー(SQL)例

通常の左外部結合でのクエリー(SQL)例

実行結果

外部結合演算子、左外部結合どちらも同じ結果となります。

補足

  • 「(+)」演算子の歴史的背景
    Oracle の古いバージョンからサポートされていた外部結合の書き方で、ANSI SQL 標準が普及する以前によく使われていました。ANSI 標準(LEFT JOIN / RIGHT JOIN / FULL OUTER JOIN)が登場して以降は、可読性・移植性の観点から推奨されないことが多いです。

  • 制限・注意点

    1. 可読性・保守性g.GOODS_CODE = gt.GOODS_CODE(+) のような記述は、JOIN の方向やどのテーブルに外部結合をかけているかが分かりにくく、後でクエリを読む人が迷いやすいです。

    2. 複雑な結合:複数テーブルを結合する場合、どこに (+) を付けるか、また付け方によって結果が変わるため、注意深く設計する必要があります。

    3. NULL の扱い:外部結合によって NULL が返る行が含まれますが、条件節で他の条件と組み合わせると意図しない行の除外が起きることがあります(例えば WHERE 節で AND 条件として別の非 NULL 条件を加えると外部結合の意味が薄れる等)。

  • ANSI 標準との違い

    項目 (+) 外部結合演算子 ANSI SQL 外部結合 (LEFT OUTER JOIN 等)
    可読性やや分かりにくい比較的分かりやすい
    移植性Oracle に依存多くの RDBMS でサポートされる
    複雑な JOIN の組み立てエラーや誤解の元になりやすいON 句で明示的に指定できるため制御しやすい
    サポート状況最新 Oracle でも非推奨の方向推奨される方式
     

  • 現代のベストプラクティス

    • 新規開発では ANSI SQL の外部結合構文を使うことを推奨。可読性や他 DBMS への移植性が高いため。

    • 既存システムで (+) を使っているなら、リファクタリングやドキュメント整備を行い、「なぜこの構文になっているか」「どのような影響があるか」を明らかにしておく。

    • テストを用意して、クエリ変更後に結果が同じになることを検証する(特に NULL の扱いや結合の漏れが起きていないか)。

  • 実際の書き換え例

    旧構文を ANSI 標準に書き換えるときの例をもう一つ:

     
    -- 旧構文

    -- 書き換え後(ANSI 標準)

    このように、結合条件を ON に書き出すことで構造が明瞭になります。

  • 互換性・移行のヒント

    • Oracle のバージョンによっては (+) 構文が将来削除される可能性があり、非推奨の警告が出ることもあります。

    • 他の RDBMS(PostgreSQL、MySQL、SQL Serverなど)で同じSQLを使うことを想定するなら、ANSI JOINに統一しておくと移行がスムーズです。

    • クエリのパフォーマンスにも注意。古い構文でも Oracle のオプティマイザが合理化する場合がありますが、可視性や保守性を取る方が長期的には有利。

「.com」ドメインは今後も毎年値上がりする可能性大!

本日、レンタルサーバー会社からドメイン料金改定(要はドメイン料金値上がり)のお知らせが届いてました。。

こんなところにも値上がりの波が!?

とメールを見てみるといきなり3割以上も値上がりしてます。。

ドメイン料金なので1年で2614円と考えれば大した金額でもないのですが、突然何故?と思っているとメール文中に「上位組織から提示されるドメイン料金の上昇」と記載されています。

上位組織?と思って調べてみたら

「.com」ドメインのレジストリ管理企業であるVerisignha社(ベリサイン社)は
2020年1月3日にICANNにより公開された「.comレジストリ契約の修正に関する発表」により、
2020年から2029年までの10年間、年間7%・最大70%値上げを行う権利を認められてるとの事。
上記に基づき、Verisign社は2021年9月1日から約7%の卸価格値上げを決定しています。

というのが背景となってました。

メール見てそのまま1年更新でいいかあ程度に考えてましたが、今後も毎年値上げが実施される可能性大というのも考慮すると今のうちに複数年契約した方が良いと判断して最大の5年契約に変更しました。

今後も「.com」ドメインを長期使用予定の方は契約年数を見直したほうがお得かも

「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

モバイルバージョンを終了