SQL
備忘メモを兼ねて。■基本 oracleで実行するSQLに、使用するインデックスを指定するためのヒント句を足す際の書き方は、 "select"の直後に"/*+ INDEX(TABLE名 INDEX名) */"を入れるだけ*1。 SELECT /*+ INDEX(SAMPLE_TABLE SAMPLE_TABLE_IDX01) */ * FROM SAM…
要するにブレーク処理みたいなことをSQL1本でやりたいって話です。 サンプルテーブル 親テーブル:item_category PK:category_id category_id category_name 1 食料品 2 衣料品 3 日用品 4 嗜好品 子テーブル:item PK:category_id, item_id category_id item_…
"UNION"や"UNION ALL"を使って2つ以上のビューをまとめて1つの結果として抽出する場合に、 結果には表示しない項目でソートをかけたいとする。文章だと何言ってるかわからないので、例としては以下みたいな感じ。 例題 ・kudamonoテーブル 名前 値段 美味し…
ちょっと前に書いた以下の記事について、CodeIQからフィードバックが来ました。【SQL】COUNTが最大のものだけを抽出する - 16bit!で、そのフィードバックでは"ALL"というキーワードを使っていたのですが、 正直そのキーワード知らなかったのでメモを兼ねてち…
CodeIQに珍しくSQLの問題があったので、休憩がてらちゃちゃっとやってみました。挑戦者求む!10分で挑戦!最頻値をSQL出力! by CodeIQ運営事務局要するに、特定のカラムでgroup byして、その中でCOUNTが最大のものだけを抽出しろという話。 select v.score,…
暇なので簡単にまとめておきます。 select to_char(trunc(sysdate),'YYYY/MM/DD') TODAY, //今日 to_char(trunc(sysdate,'MM'),'YYYY/MM/DD') FIRST_DATE,//当月初日 to_char(trunc(sysdate,'YYYY'),'YYYY/MM/DD') YEAR_FIRST_DATE,//当年度初日 to_char(las…
この前、substrを使ったSQLでの文字列の切り出し方法を書きましたが、 今回はそれのおまけというか備考というか。 基本構文 select substrb('あいうえお', 2, 2) from dualまずおさらいですが、substrbは"substrb(カラム名, 開始位置, バイト数)"という書き…
SQLで文字列型のカラムから指定した文字数だけを切り出して抽出する方法です。 使う場面としては以下のような場面が有り得るかなと思います。<使用場面例> ・抽出結果を外部システムにインポートするが、その桁数制御のために長すぎる文字列は途中までで切…
備忘を兼ねて。 「SQLを実行する際、"IN"を使うよりも"EXISTS"を使う方が速い」 というのは割と周知の事実ですが、 じゃあ、EXISTSを使う場合、 「その中身は"SELECT *"を使うべきなのか"SELECT 1(定数)"を使うべきなのか」 というと、こっちは少々微妙な…
SQLには自己結合という、同じテーブル同士を結合するというテクニック(?)がありますが、 その用例を見てみると、 テーブル.従業員表 従業員番号 従業員名 上司 135 INAGAKI 240 240 KIMURA NULL 184 KUSANAGI 135 235 KATORI 240 こんな感じのテーブルか…
OracleではSQLの発行時、select文に”for update”と付けることによって 抽出したデータを行単位でロックすることができます。 select * from TBL where col_1 = 'A' and col_2 = 'B' for update なお、ロック後に該当の行に対して別のセッションからアクセス…
■SQLで直近1年分のデータを抽出したい時の書き方 //以下はinput_dateというカラムがシステム日付でここ1年以内のものを抽出するサンプル select * from table where input_date >= (sysdate - 365) ただ、これだと閏年の時に1日足りなくてずれてしまう。 そ…