2020-03-01から1ヶ月間の記事一覧

SQL小手先の技 リレーション確認(Oracle)

そういえば、どのテーブルとどのテーブルが結合できるか調べるときに、DBのカラム名調べることありませんか?そんなときは、ALL_TAB_COLUMNSというテーブルを参照しましょう。Oracleではこんな感じ SELECT * FROM ALL_TAB_COLUMNS; COLUMN_NAMEで絞り込みを…

SQL基本 エスケープ

以外と忘れがちなのが、エスケープいや、シングルクォート(')ってことは知ってるんですが、そもそもシングルクォート(')を表示するときはどうするんだっけ?ってなるんですよね。 こんな感じですね。 select 'テスト''ここがシングルクォート''テスト' from …

SQL基本 EXISTSの使い方

ふと使おうと思ったときにふと忘れてしまうので記載しておきます。 EXISTSの使い方はこう select * from 対象テーブル a where exists (select 1 from 存在確認対象テーブル b where a.対象カラム = b.対象カラム) 理屈は抜きで!

コロナの影響からくるハッキングメール達

RWが基本になりつつある今 ハッカー集団が盛んに活動してるみたいです。 皆さん注意が必要です。 悪意のある実行ファイルを添付してそれを実行するとPCが乗っ取られるとか ○○に課金したようなのでこちらURLから確認して下さいといって悪意のあるサイトに誘導…

SQL小手先の技 翌営業日を取得する

営業日問題って、地味に直面しませんか?いったん土日だけ考えてみたので参考になればと思います。Oracleで書いてみました。 to_char(SYSDATE, 'D'),(case when to_char(SYSDATE, 'D') = 6 then SYSDATE + 3 when to_char(SYSDATE, 'D') = 7 then SYSDATE + …

SQL小手先の技 バージョン確認(MySQL)

バージョン確認SQLのMySQL版です。 select version(); なんとまたPostgreSQLと同じ!! 理屈は抜きで!!

SQL小手先の技 バージョン確認(PostgreSQL)

バージョン確認SQLのPostgre版です。 SELECT version(); Postgreはも9と10で大分使えるSQLが変わってくるので、意外と使うことが多いかもしれないですね。 理屈は抜きで!

SQL小手先の技 バージョン確認(Oracle)

意外と自分がかかわっているDBのバージョンって忘れがちで確認する資料は見つからないですよね。そんなときにSQLでバージョンを確認できることを覚えておくと便利です。Oracleはこんな感じ。 select * from v$version; 理屈は抜きで!

SQLチューニング 実行計画取得(MySQL)

実行計画の取得方法MySQL版です。。こんな感じです。 EXPLAIN 実行したいSQL; ま、Postgreと同じってことですね。 理屈は抜きで!

SQLチューニング 実行計画取得(PostgreSQL)

実行計画の取得方法Postgre版です。。こんな感じです。 EXPLAIN 実行したいSQL; 理屈は抜きで!

SQLチューニング 実行計画取得(Oracle)

そもそも基本中の基本なんですが、実行計画の取得方法を紹介してなかったですね。Oracleはこんな感じです。 EXPLAIN PLAN FOR 実行したいSQL; A5Mk2とか使うなら、ctl + e でも取得できますけどね。 理屈は抜きで!

システムチューニング 前方一致

先日書いた前方一致については、SQLだけじゃなく実はシステム全般に言えるんですね。 使い方はちょっと大変なんですが、AWSのS3チューニングでよく使います。 やり方は、S3に格納するときにプレフィックス(前方)に適当なランダム文字列を付与することで、S3…

SQLチューニング 前方一致

そういえば、基本的なことを記載していなかったです。 LIKEを使っていて、地味にやりがちなミスですが、前のほうに%(ワイルドカード)を書いてしまうこと。 ワイルドカードは後ろに記載するようにしましょう。 こんなかんじ。 select * from テーブル名where …

SQL小手先の技 1000件以上のin句(Oracle)まとめ

oracleのin句の1000件問題のまとめです。 その1・・・with句で仮想テーブルを作成するその2・・・orで区切るその3・・・仮想テーブルを作成するその4・・・1000件のまま何回も実行するその5・・・EXISTS句にするその6・・・inner joinするその7・・・複合問…

SQL小手先の技 1000件以上のin句(Oracle)その7

oracleのin句の1000件問題の続きです。 前回EXISTSだったので、今回はそう、結合ですね。若干その3で紹介した方法と似てます。 こんな感じ。 結合する前(エラーになる)select * from テーブル名where 検索対象カラム in (select 検索対象カラム from 別テー…

SQL小手先の技 1000件以上のin句(Oracle)その6

oracleのin句の1000件問題の続きです。 前回EXISTSだったので、今回はそう、結合ですね。若干その3で紹介した方法と似てます。 こんな感じ。 結合する前(エラーになる)select * from テーブル名where 検索対象カラム in (select 検索対象カラム from 別テー…

SQL小手先の技 1000件以上のin句(Oracle)その5

oracleのin句の1000件問題の続きです。結構1000件問題の回避策って出てくるものですね。ちょっとびっくりしてます。どこかでまとめます。 今度はEXISTS句を使う回避策です。 こんな感じ。 EXISTS句にする前select * from テーブル名where 検索対象カラム in …

SQL小手先の技 1000件以上のin句(Oracle)その4

oracleのin句の1000件問題の続きです。 いろんな制約があって、SQLを組み替えられないとき。あきらめて、何回も1000件のin句をいれた状態で実行しましょう。 こんな感じ。 --1回目select * from テーブル名where 検索対象カラム in ('1', '2', ・・・・, '10…

SQL小手先の技 1000件以上のin句(Oracle)その3

oracleのin句の1000件問題の続きです。 もはややっていいのかわかりませんが、in句の中身をwkテーブルみたいなものにくっつけて結合させましょう。こんな感じ。 select * from テーブル名inner join in句の中身のテーブル on a.検索対象カラム = b.検索対象…

SQLチューニング 再編成(Oracle)

検索対象テーブルがものすごく大量データで、検索に時間がかかる場合、テーブルの断片化が発生している可能性があります。 そんなときには、これを実行してください。 ALTER TABLE 対象テーブル MOVE; 注意点は、システム稼働中にやらないことです。 理屈は…

SQL小手先の技 1000件以上のin句(Oracle)その2

oracleのin句の1000件問題の続きです。 単純で、orで1000回以上つなぎ続けると、 意外といけます。 ダサいですが。。。 こんな感じ select * from テーブル名 where 検索対象カラム = 'aaa' or 検索対象カラム = 'bbb' 理屈は抜きで!

SQL小手先の技 1000件以上のin句(Oracle)その1

Oracleのin句って、1000件しか入らないんですよね。。。 結構1000件以上検索することがあるかと思うので、回避策でもつらつらと with句にin句の中身を入れて検索 こんな感じ with kensakutaisyou_tbl as ( select 'aaa' as kensakutaisyou from dual union a…

SQLチューニング VACUMEあと(PostgreSQL)

VACUMEの後は勝手にANALYZEが実行されるので、 わざわざ実行する必要はないですよ 理屈は抜きで!

SQLチューニング 不要領域の削除 一括 (PostgreSQL)

PostgreSQLは結構便利で、一気にVacumeを実行できるんですよね。 VACUUM; 前回との違いはテーブル名を指定しないことですな。 理屈は抜きで!

SQLチューニング 不要領域の削除(PostgreSQL)

意外と忘れがちですが、不要領域の削除は定期的にやる必要がありますね。 VACUUM テーブル名; 理屈は抜きで!

SQLチューニング ゴミ箱から戻す(Oracle)

間違ってdropしたとき、絶望しかないですよね。。。 そんなときは、 FLASHBACK TABLE テーブル名 TO BEFORE DROP; データの中身も復旧するのでご安心を 理屈は抜きで!