SQLで合計を求めるにはSUM関数、平均を求めるにはAVG関数を使用します。
DBMS毎の使用可否
関数\DBMS MySQL PostgreSQL SQL Server Oracle
SUM ○ ○ ○ ○
AVG ○ ○ ○ ○
サンプルテーブル
「GOODS」テーブル
合計を求める実行例
SUM関数を使用したクエリー(SQL)例
以下の例ではGOODSテーブルのPRICE項目の合計値を求めています。
SELECT SUM (PRICE)
FROM GOODS;
実行結果
平均を求める例
AVG関数を使用したクエリー(SQL)例
実行結果
ALL句を使用することでWHERE句内に指定した副問合せの結果を比較してデータを抽出する事が可能となります。
サンプルテーブル
「GOODS」テーブル
「GOODS_TYPE」テーブル
ALL句を利用したクエリー(SQL)例
以下の例ではまず副問合せでGOODS_CODEテーブルからGOODS_CODEが101と301のデータを取得し、ALL句でGOODSテーブルのGOODS_CODEが101と301以外のデータを取得しています。
SELECT *
FROM GOODS
WHERE GOODS_CODE < > ALL (
SELECT GOODS_CODE
FROM GOODS_TYPE
WHERE GOODS_CODE in ('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ヶ月位でトラックボールの滑りが悪くなってくるのでボールを外してほこりや垢を掃除すれば問題なく使えます。
掃除の際にトラックボールにクリポリメイト(光沢剤)などを吹きかける事でさらに滑りがよくなります。
結論
ExcelでMID関数を使用することで文字列から指定した数の文字列を取得することが出来ます。
MID関数は「=MID(文字列,開始位置,文字数)」で指定します。
開始位置へ 1 を指定することで先頭から取得することができます。
MID関数を使用して郵便番号から先頭3桁、末尾3桁を取得する例
以下の例ではB4セルへ「=MID(B2,1,3)」を指定して郵便番号の先頭3桁を取得し、B5セルへ「=MID(B2,5,4)」を指定して末尾4桁を取得して表示しています。
SQL PlusやSQL Developerに用意されている「DESCRIBE」コマンドを使用することでテーブル構造を確認することが出来ます。
DESCRIBEコマンドはDESCと省略することも出来ます。
SQL PlusでのDESCRIBEコマンド実行例
「DESCRIBE テーブル名」でテーブル構造が確認できます。
SQL PlusでのDESCコマンド実行例
DESCでもDESCRIBEと同じ結果を取得できます。
SQLでゼロ埋めスペース埋めして桁数を揃えたい場合にはLPAD関数やRPAD関数を使用することで取得可能となります。DBMSによっては使用出来ないものもあります。
関数\DBMS MySQL PostgreSQL SQL Server Oracle
LPAD ○ ○ ✕ ○
RPAD ○ ○ ✕ ○
書式は「LPAD(列名,バイト数,’埋め込み文字’)」、「RPAD(列名,バイト数,’埋め込み文字’)」で指定します。第三引数の埋め込み文字を省略すると半角スペースが埋め込まれます。
サンプルではOracleでの使用例となります。
サンプルテーブル
「GOODS」テーブル
LPAD関数の使用例1
項目「GOODS_CODE」を10桁でゼロ埋めするSQL(クエリー)
SELECT LPAD (g.GOODS_CODE , 10, '0' ) FROM USER1.GOODS g;
実行結果
LPAD関数の使用例2
項目「GOODS_CODE」を10桁で全角「*」埋めするSQL(クエリー)
SELECT LPAD (g.NAME , 10, '*' ) FROM USER1.GOODS g;
実行結果 以下のように埋め込み文字へ全角文字を指定すると1文字=2バイト扱いで埋め込まれます。
RPAD関数の使用例1
項目「GOODS_CODE」を10桁でゼロ埋めするSQL(クエリー)
SELECT RPAD (g.GOODS_CODE , 10, '0' ) FROM USER1.GOODS g;
実行結果
RPAD関数の使用例2
項目「GOODS_CODE」を10桁で全角「*」埋めするSQL(クエリー)
SELECT RPAD (g.NAME , 10, '*' ) FROM USER1.GOODS g;
実行結果 RPADでも以下のように埋め込み文字へ全角文字を指定すると1文字=2バイト扱いで埋め込まれます。
Excelで空白(空欄・未入力)セルをカウントするにはCOUNTBLANK関数を使用することで簡単に取得可能です。COUNTBLANK関数は空白セルの有無や数をカウントしたい場合に利用できます。
数値として 0 (ゼロ) を含むセルはカウント対象外です。
空白(空欄・未入力)セルの数をカウントする例
COUNTBLANK関数は「COUNTBLANK(範囲)」で指定します。
以下の例ではB10セルの書式へ「=COUNTBLANK(B2:B8」を指定してB2~B8セルまでの空白セル数を取得しています。
SQLを見てるとたまにWHERE句内で「(+)」と記載されているのを見かけることがあります。
この「(+)」はOracle独自で記載が可能となる外部結合演算子といって、「g.GOODS_CODE = gt.GOODS_CODE(+)」のように指定するとLEFT OUTER JOINと同じ結果を取得することが出来ます。
サンプルテーブル
「GOODS」テーブル
「GOODS_TYPE」テーブル
外部結合演算子を利用したクエリー(SQL)例
SELECT g.name, gt.type_name
FROM USER1.GOODS g, USER1.GOODS_TYPE gt
WHERE g.GOODS_CODE = gt.GOODS_CODE(+);
通常の左外部結合でのクエリー(SQL)例
SELECT g.name, gt.type_name
FROM USER1.GOODS g
LEFT OUTER JOIN USER1.GOODS_TYPE gt ON g.GOODS_CODE = gt.GOODS_CODE;
実行結果
外部結合演算子、左外部結合どちらも同じ結果となります。
補足
「(+)」演算子の歴史的背景 Oracle の古いバージョンからサポートされていた外部結合の書き方で、ANSI SQL 標準が普及する以前によく使われていました。ANSI 標準(LEFT JOIN
/ RIGHT JOIN
/ FULL OUTER JOIN
)が登場して以降は、可読性・移植性の観点から推奨されないことが多いです。
制限・注意点
可読性・保守性 :g.GOODS_CODE = gt.GOODS_CODE(+)
のような記述は、JOIN の方向やどのテーブルに外部結合をかけているかが分かりにくく、後でクエリを読む人が迷いやすいです。
複雑な結合 :複数テーブルを結合する場合、どこに (+)
を付けるか、また付け方によって結果が変わるため、注意深く設計する必要があります。
NULL の扱い :外部結合によって NULL が返る行が含まれますが、条件節で他の条件と組み合わせると意図しない行の除外が起きることがあります(例えば WHERE 節で AND
条件として別の非 NULL 条件を加えると外部結合の意味が薄れる等)。
ANSI 標準との違い
項目 (+) 外部結合演算子 ANSI SQL 外部結合 (LEFT OUTER JOIN 等)
可読性 やや分かりにくい 比較的分かりやすい
移植性 Oracle に依存 多くの RDBMS でサポートされる
複雑な JOIN の組み立て エラーや誤解の元になりやすい ON 句で明示的に指定できるため制御しやすい
サポート状況 最新 Oracle でも非推奨の方向 推奨される方式
現代のベストプラクティス
新規開発では ANSI SQL の外部結合構文 を使うことを推奨。可読性や他 DBMS への移植性が高いため。
既存システムで (+)
を使っているなら、リファクタリングやドキュメント整備を行い、「なぜこの構文になっているか」「どのような影響があるか」を明らかにしておく。
テストを用意して、クエリ変更後に結果が同じになることを検証する(特に NULL の扱いや結合の漏れが起きていないか)。
実際の書き換え例
旧構文を ANSI 標準に書き換えるときの例をもう一つ:
互換性・移行のヒント
Oracle のバージョンによっては (+)
構文が将来削除される可能性があり、非推奨の警告が出ることもあります。
他の RDBMS(PostgreSQL、MySQL、SQL Serverなど)で同じSQLを使うことを想定するなら、ANSI JOINに統一しておくと移行がスムーズです。
クエリのパフォーマンスにも注意。古い構文でも Oracle のオプティマイザが合理化する場合がありますが、可視性や保守性を取る方が長期的には有利。
本日、レンタルサーバー会社からドメイン料金改定(要はドメイン料金値上がり)のお知らせが届いてました。。
こんなところにも値上がりの波が!?
とメールを見てみるといきなり3割以上も値上がりしてます。。
ドメイン料金なので1年で2614円と考えれば大した金額でもないのですが、突然何故?と思っているとメール文中に「上位組織から提示されるドメイン料金の上昇」と記載されています。
上位組織?と思って調べてみたら
「.com」ドメインのレジストリ管理企業であるVerisignha社(ベリサイン社)は 2020年1月3日にICANNにより公開された「.comレジストリ契約の修正に関する発表」により、 2020年から2029年までの10年間、年間7%・最大70%値上げを行う権利を認められてるとの事。 上記に基づき、Verisign社は2021年9月1日から約7%の卸価格値上げを決定しています。
というのが背景となってました。
メール見てそのまま1年更新でいいかあ程度に考えてましたが、今後も毎年値上げが実施される可能性大というのも考慮すると今のうちに複数年契約した方が良いと判断して最大の5年契約に変更しました。
今後も「.com」ドメインを長期使用予定の方は契約年数を見直したほうがお得かも
投稿ナビゲーション
「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。