SQL逆引き大全 363の極意

概 要

データベース開発・運用に不可欠な、SQLの記述方法とサンプルコードをやりたい事から引けるようにした逆引き大全です。実際にデータ・サーバー構築、管理、サポート、研修の各現場で働く担当者が知恵を寄せ合い、現場で役立つTipsを厳選しました。本書は、Oracle Database/PostgreSQL/Postgres PlusAdvanced Server(PPAS)/MySQL/MariaDBのSQL記述方法の違いや注意事項、プロシージャの書換えやアクセスパスの違いなどが一目でわかる逆引きスタイルのリファレンス本です。「文字データを1秒未満の値も扱える日付型に変換する」「2つの表を結合する際、両方の表にないデータも併せて表示する」など便利なTipsを探しやすい逆引きスタイルで掲載しています。

著者 株式会社アシスト
価格 本体2400円(税別)
ISBN 978-4-7980-3852-0
発売日 2013/6/29
判型 A5
色数 2色
ページ数 556
CD/DVD
対象読者 中級
シリーズ 逆引き大全
表紙イメージ
購入 アマゾンで購入する
楽天で購入する

※リンク先によっては、販売ページが用意されていないことがあります。あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

第1章 検索の極意

・検索の基本

001 任意の列を表示する

002 全ての列を表示する

003 列の見出し(列ヘッダ)を別名に置き換えて表示する

004 列の見出し(列ヘッダ)を別名に置き換えて表示する際、大文字/小文字/空白を指定する

005 別のスキーマが管理している表を参照する

006 表に別名を定義する

007 文字列を連結して表示する

・算術演算子

008 特定列のデータを算(掛け算)する

009 特定列のデータを除算(割り算)する

010 特定列のデータを加算(足し算)する

011 特定列のデータを減算(引き算)する

・文字列関数

020 文字列のデータをバイト数で数える

021 文字列のデータを文字数で数える

022 先頭から数バイトを抜き出して表示する

023 先頭から数文字を抜き出して表示する

024 値の一部をバイト単位で抜き出して表示する

025 値の一部を文字単位で抜き出して表示する

026 最後から任意の数バイトを抜き出して表示する

027 最後から任意の数文字を抜き出して表示する

028 該当文字が何文字目に出てくるのかを調べる

029 該当文字が何バイト目に出てくるのかを調べる

030 特定の文字を任意の文字に置き換えて表示する

031 文字列の右側を特定の文字で埋めて表示する

032 文字列の左側を特定の文字で埋めて表示する

033 アルファベットの1文字目のみを大文字にして表示する

034 値の前にある空白を切り捨てて表示する

035 値の後ろにある空白を切り捨てて表示する

036 値の前後にある空白を切り捨てて表示する

037 任意の文字や空白を削除して表示する

038 文字データを大文字に変換して表示する

039 文字データを小文字に変換して表示する

040 文字データを10進数に変換して表示する

041 発音が似た英字データを探す

042 8進数、16進数などに変換して表示する

・算術関数

043 数値データを四捨五入して表示する

044 数値データを指定桁で四捨五入して表示する

045 数値データを切り捨てて表示する

046 数値データを指定桁で切り捨てて表示する

047 正の数か負の数かを表す符号を表示する

048 符号を取り除いた絶対値を表示する

049 べき乗(累乗)の結果を表示する

050 平方根(べき乗するともとの値になる)を表示する

051 羅列した数値の中で最大値を表示する

052 羅列した文字の中で最大値(コード比較)を表示する

053 羅列した数値の中で最小値を表示する

054 羅列した文字の中で最小値(コード比較)を表示する

055 値のばらつきを示す標準偏差を表示する

056 三角関数(サイン、コサイン、タンジェント)を利用した演算を行う

057 数値データの小数点以下を切り上げて表示する

058 数値データの小数点以下を切り下げて表示する

059 除算(割り算)で発生した余りを表示する

・変換関数

060 文字データを任意の文字コードに変換して表示する

061 文字列の途中に任意の文字を挿入して表示する

062 数値を任意の金額書式(通貨記号の追加やカンマ区切り)で表示する

063 日付データを任意の書式で表示する

064 日付データを任意の書式で表示する

065 文字データを1秒未満の値も扱える日付型に変換する

066 ある日付の次の指定曜日を表示する

067 曜日情報も含めた日付データを表示する

068 和暦情報も含めた日付データを表示する

・日付関数

069 任意の月における月末日を表示する

070 ある日付の何日か後の日付を表示する

071 ある日付の何日か前の日付を表示する

072 特定日から何年経過したかを表示する任意の数値データに該当する行のみを表示する

073 2つの日付の間の月数を表示する

074 サーバーOSから取得した現在の日付と時刻を表示する

075 サーバーOSから取得した現在の日付と時刻を1秒未満の桁まで表示する

076 セッション・タイムゾーンをもとに日付と時刻を表示する

077 セッション・タイムゾーンをもとに日付と時刻を1秒未満の桁まで表示する

・日付関数の応用

078 日付データをもとに特定日のデータを表示する

079 日付データをもとに特定月のデータを表示する

080 日付データをもとに特定年のデータを表示する

・その他の関数

081 接続中のデータベース・ユーザー名を表示する

082 接続中のユーザーIDを表示する

083 接続中のセッション(スレッド)IDを表示する

084 内部的に格納されているバイト数を表示する

・比較演算子

085 任意の数値データに該当する行のみを表示する

086 任意の文字または日付のデータに該当する行のみを表示する

087 列同士で値を比較し、条件に合致する行を表示する

088 指定した値に合致しない行を表示する

089 指定した値の大小に合致する行を表示する

090 指定した日付に合致する行を表示する

091 指定した日付(デフォルト以外の日付書式)に合致する行を表示する

・論理演算子

092 複数ある検索条件の両方に合致する行を表示する

093 複数ある検索条件のどちらか一方に合致する行を表示する

094 条件値に合致しない行を表示する

・述語

095 特定列の値がNULLである行を表示する

096 特定列の値がNULLでない行を表示する

097 複数ある条件値のどれかに合致する行を表示する

098 指定した値の範囲に合致する行を表示する

099 指定した値の範囲に合致しない行を表示する

100 指定した値の一部に合致する行を表示する(あいまい検索)

101 指定した値の一部に合致しない行を表示する(あいまい検索)

102 複数ある条件値のどれにも合致しない行を表示する

103 別の表と照らし合わせて存在するデータを確認する

104 別の表と照らし合わせて存在しないデータを確認する

・ソート

105 任意の列を昇順に並び替えて表示する

106 複数の列を昇順に並び替えて表示する

107 任意の列を降順に並び替えて表示する

108 NULLの並び替え順を制御する

109 全ての結果ではなく上位(下位)の数件のみ表示する

110 ランダムに毎回異なる結果を取得する

・累計処理

111 表の行数を数えて表示する

112 グループごとの行数を数えて表示する

113 NULL以外の行数を数えて表示する

114 グループごとの合計値を求めて表示する

115 グループごとの平均値を求めて表示する

116 グループごとの最大値、最小値を表示する

117 グループ化した結果に対して条件に合致した行のみを表示する

・副問合せ

118 順位付けした検索結果から任意の範囲を抜き出して表示する

119 別の問合せを実行しなければ分からない条件で検索する

120 別の問合せ結果と比較し、全てに合致する行を表示する

121 別の問合せ結果と比較し、どれかに合致する行を表示する

122 複数の問合せ結果を検索条件にし、その全てに合致する行を表示する

123 複数の問合せ結果を検索条件にし、その一方に合致する行を表示する

124 別の問合せ結果(複数列)のどれかに合致する行を表示する

125 検索結果を一時的に仮想表と見なし、そこから更に検索を行う

126 主問合せとWHERE句の検索条件に相関関係を持たせた検索を行う(相関副問合せ)

・集合演算

127 複数の問合せ結果を1列に集約し、一意にして表示する

128 複数の問合せ結果を1列に集約し、そのまま表示する

129 複数の問合せ結果から、共通しているデータを一意にして表示する

130 複数の問合せ結果から、1つ目の問合せ結果にしか存在しないデータを表示する

131 複数の問合せ結果を1列に集約し、並び替えて表示する

・結合

132 2つの表に共通する列をもとに結合する

133 2つの表に共通する列の条件値をもとに結合する

134 2つの表に共通する列の範囲をもとに結合する

135 1つの表の中で共通する列をもとに結合する

136 2つの表を結合する際、片方の表にないデータも併せて表示する

137 2つの表を結合する際、両方の表にないデータも併せて表示する

138 3つの表に共通する列をもとに結合する

139 2つの表を全ての行の組み合わせで結合する

・条件分岐

140 条件を評価し、その結果によって表示内容を制御する

・階層問合せ

141 値の親子関係に合わせて階層レベルを表示する

142 値の親子関係の階層レベルに応じてインデントを付けて表示する

143 値の親子関係に合わせて階層レベルを表示する際、同一階層内で並び替える

・その他

144 特定列のデータを一意にして表示する

145 複数列の組み合わせ結果を一意にして表示する

146 シングルクォーテーションを含む行を表示する

147 SQL文にコメントを付ける

第2章 更新の極意

・行の挿入

148 対象表の全列に値を指定して1行挿入する

149 特定列のみに値を指定して1行挿入する

150 任意の書式で日付データを挿入する

151 副問合せを使用し、検索した結果の値を挿入する

152 特定表からコピーしたデータを挿入する

153 1つのSQLで複数行を同時に挿入する

154 順序(シーケンス)を使用し、連番を挿入する

・値の更新

155 特定列の全行のデータを同じ値に更新する

156 特定列の中で条件に合致した行のデータを更新する

157 複数列のデータをそれぞれ同時に更新する

158 副問合せを使用し、その場で求めた値で更新する

159 特定列の値を消去する(NULLで更新する)

160 特定列の値を関数や演算結果で更新する

・行の削除

161 特定表の全行のデータを削除する

162 特定表の全行のデータを高速に削除する

163 表内の特定の行だけを削除する

164 副問合せを使用し、その場で求めた条件に合致した行を削除する

・MERGE

165 表構成が同じ表同士マージする

166 2つの表をマージする際、条件に合致した行を削除する

第3章 トランザクションの極意

・トランザクション

167 トランザクションを明示的に開始する

168 処理(トランザクション)を確定する

169 処理(トランザクション)を取り消す

170 処理(トランザクション)を任意の位置まで取り消す

171 トランザクションの分離レベルをセッション単位で指定する

172 トランザクションの分離レベルをトランザクション単位で指定する

173 読み取り専用トランザクションを設定する

・同時実行制御

174 任意のタイミングで、任意の行をロックする

175 行レベルロックが競合した場合、待機とならないように即座に制御を戻す

176 任意の秒数待機しても行レベルロックが解除されない場合、制御を戻す

177 任意のタイミングで、表全体をロックする

178 表ロックが競合した際、待機とならないように即座に制御を戻す

179 表ロックが競合した際、任意の秒数待機しても解放されない場合は制御を戻す

第4章 定義の極意

・表の作成

180 列名、データ型を一つひとつ指定して表を作成する

181 表作成時、特定列に主キー制約(PRIMARY KEY制約)を定義する

182 表作成時、特定列に一意キー制約(UNIQUE KEY制約)を定義する

183 表作成時、特定列にNOT NULL制約を定義する

184 表作成時、特定列にチェック制約を定義する

185 表作成時、特定列に参照整合性制約(FOREIGN KEY制約)を定義する

186 FOREIGN KEY制約定義の際、親表の行削除で子表の行を自動的に削除する

187 FOREIGN KEY制約定義の際、親表の行削除で子表の行の値を自動的にNULLに更新する

188 表作成時、複数列に跨る制約を指定する

189 表作成時、データを格納しない仮想列を指定する

190 表作成時、特定列にデフォルト値を指定する

191 既存表から表構成とデータをコピーし、新しい表を作成する

192 既存表から表構成とデータをコピーし、列名を変更して新しい表を作成する

193 既存表から表構成のみコピーし、新しい表を作成する

194 自動でインクリメントする列を含む表を作成する

・表の定義変更

195 列幅を拡張、または縮小する

196 特定列のデータ型を変更する

197 主キー制約(PRIMARY KEY制約)を追加する

198 一意キー制約(UNIQUE KEY制約)を追加する

199 チェック制約を追加する

200 参照整合性制約(FOREIGN KEY制約)を追加する

201 NOT NULL制約を追加する

202 主キー制約(PRIMARY KEY制約)を削除する

203 一意キー制約(UNIQUE KEY制約)を削除する

204 NOT NULL制約を削除する

205 チェック制約を削除する

206 制約名を指定して参照整合性制約(FOREIGN KEY制約)を削除する

207 制約を削除する際、その制約に依存している他の制約も全て同時に削除する

208 主キー制約(PRIMARY KEY制約)を使用禁止にする

209 一意キー制約(UNIQUE KEY制約)を使用禁止にする

210 NOT NULL制約を使用禁止にする

211 チェック制約を使用禁止にする

212 参照整合性制約(FOREIGN KEY制約)を使用禁止にする

213 制約を使用禁止にする際、関連する制約も同時に全て使用禁止にする

214 主キー制約(PRIMARY KEY制約)を使用可能にする

215 一意キー制約(UNIQUE KEY制約)を使用可能にする

216 NOT NULL制約を使用可能にする

217 制約名を指定してチェック制約を使用可能にする

218 制約名を指定して参照整合性制約(FOREIGN KEY制約)を使用可能にする

219 制約名を任意の名前に変更する

220 定義済みの列名を別の名前に変更する

221 既存表に対して新規に列を追加する

222 既存表に対して新規に複数列を追加する

223 既存表から特定列を削除する

224 列を削除する際、その列に関連する制約も同時に全て削除する

225 表を読み取り(SELECT)のみ可能な状態に変更する

226 既存の表名を別の名前に変更する

・表の削除

227 既存表をデータベースから削除する

228 表を削除する際、その表に関連する制約も同時に全て削除する

229 表を削除する際、リサイクルビン(ごみ箱)に残さず完全に削除する

230 リサイクルビン(ごみ箱)の中身を確認する

231 削除された表をもとに戻す

・ビューの作成

232 表の一部のデータのみを参照するビューを作成する

233 ビュー作成の際、ビュー定義に違反する更新を禁止する

・ビューの変更

234 ビューの定義を特定表の異なる範囲を参照するように変更する

235 既存のビュー名を別の名前に変更する

・ビューの削除

236 不要になったビューを削除する

・索引の作成

237 特定列に対して単一列索引を作成する

238 複数列に跨った索引(コンポジット索引)を作成する

239 索引作成時に変更ログを生成せず、高速に索引を作成する

240 索引作成中に、該当表に対する同時更新を許可する

241 索引を圧縮して作成し、索引の領域を節約する

・索引の変更

242 索引を再作成し、索引構造をもとの理想的な状態に戻す

243 索引内の空き領域を結合して索引のサイズを縮小する

244 索引スキャンが行われないモードに変更する

・索引の削除

245 不要になった既存索引を削除する

・順序の作成

246 連番を自動生成する順序(シーケンス)を開始番号を指定して作成する

247 任意の間隔で連番を自動生成する順序(シーケンス)を作成する

248 上限に達したらもとに戻って再度連番を自動生成する順序(シーケンス)を作成する

・順序の変更

249 既存の順序(シーケンス)の定義を変更する

・順序の削除

250 不要になった順序(シーケンス)を削除する

・シノニムの作成

251 プライベート・シノニムを作成する

252 パブリック・シノニムを作成する

・シノニムの削除

253 プライベート・シノニムを削除する

254 パブリック・シノニムを削除する

第5章 プロシージャの極意

・宣言部

255 プログラム内で値を動的に扱うための変数を定義する

256 変数定義の際、同時にデフォルト値を設定する

257 変数定義の際、その変数にNULLが代入されないように制約を指定する

258 変数定義の際、特定列のデータ型を参照する(%TYPE属性)

259 変数定義の際、特定表の行構造を参照する(%ROWTYPE属性)

260 プログラム全体を通して同一の値を扱う定数を定義する

・実行部

261 変数に任意の値を代入する

262 条件を満たした場合、特定の処理を行う(IF文)

263 条件を満たした場合と満たさない場合で異なる処理を行う(IF文)

264 複数の条件を指定し、条件ごとの処理を行う(IF文)

265 複数の評価対象と等価比較し、条件を満たした場合に特定の処理を行う(単純CASE文)

266 等価以外の比較条件を指定し、条件ごとの処理を行う(検索CASE文)

267 終了条件を満たすまで処理を繰り返す(基本LOOP文)

268 繰り返し処理を無条件で終了させる

269 指定した回数分、処理を繰り返す(FOR LOOP文)

270 条件がFALSE(偽)と評価されるまで処理を繰り返す(WHILE LOOP文/WHILE DO文)

271 条件がTRUE(真)と評価された時は繰り返し処理をスキップする(CONTINUE文)

272 プログラム内の任意の位置に制御を移す(GOTO文)

273 何もせずに次の処理に制御を移す(NULL文)

274 表から取り出した1行を変数に代入する(SELECT … INTO文)

275 表から取り出した複数行を変数に代入する(カーソル)

276 表から取り出した全行を変数に代入する(カーソルFORループ文)

277 表から取り出した複数行を処理する際、対象行を排他ロックする(FOR UPDATE付カーソル)

278 複数行処理の際、対象行をロックした上で高速に更新する(CURRENT OFカーソル)

279 結果セットから取り出す行がなくなったかどうかを確認する

280 結果セットから取り出された行数を確認する

・例外処理

281 事前に定義されている例外に対応する(事前定義の内部例外)

282 事前に定義されていない例外に対応する(無名の内部例外)

283 ユーザー自身が独自で例外を定義し対応す(ユーザー定義例外)

284 プログラム内で対応方法を定義していない例外に対応する

285 プログラム内で対応方法を定義していない例外(定義外例外)の情報を取得する

286 特定処理が実行された場合、その処理をロールバックし、任意のエラーメッセージを返す

・プロシージャ

287 ストアド・プロシージャを作成する

288 ストアド・プロシージャ作成時に発生したエラー内容を確認する

289 ストアド・プロシージャを実行する

290 ストアド・プロシージャを削除する

291 ストアド・プロシージャ作成の際、任意の値を受け取れるようにする(INモードのパラメータ)

292 ストアド・プロシージャ作成の際、パラメータのデフォルト値を設定する

293 処理結果を呼び出し側に返すストアド・プロシージャを作成する(OUTモードのパラメータ)

294 パラメータ付プロシージャを実行する

295 プログラムのソースコードを確認する

・ファンクション

296 ストアド・ファンクションを作成する

297 ストアド・ファンクションを実行する

298 ストアド・ファンクションをSQLから実行する

299 ストアド・ファンクションを削除する

・サブプログラム管理

300 オブジェクト間の依存関係を確認する

301 プログラムが正常に使用できる状態か確認する

302 特定プログラムを再コンパイルする

303 特定スキーマの全てのプログラムを再コンパイルする

・トリガー

304 表へDMLが実行される前に1回起動するトリガーを作成する(BEFORE文トリガー)

305 表へDMLが実行される前に複数回起動するトリガーを作成する(BEFORE行トリガー)

306 表へDMLが実行された後に1回起動するトリガーを作成する(AFTER文トリガー)

307 表へDMLが実行された後に複数回起動するトリガーを作成する(AFTER行トリガー)

308 特定列に対するUPDATE処理の前後で起動するトリガーを作成する

309 トリガー起動のきっかけとなるDMLの変更前後の値を参照する

310 トリガー内で、トリガー起動のきっかけとなったDMLによって処理を分岐する

311 表にトリガーを複数作成した場合の、トリガーの実行順序を指定する

312 トリガーの処理を独立したトランザクションで実行する(自律型トランザクション)

313 ビューに対するDMLで起動するトリガーを作成する(INSTEAD OFトリガー)

314 DDLで起動するトリガーを作成する(DDLトリガー)

315 システムアクションで起動するトリガーを作成する(イベントトリガー)

316 トリガーを使用可能な状態に変更する

317 トリガーを使用不可な状態に変更する

318 特定表に定義されている全てのトリガーを使用可能な状態に変更する

319 特定表に定義されている全てのトリガーを使用不可の状態に変更する

・レコード型

320 変数内の複数フィールドを任意の構成で定義する(RECORD型で定義した変数)

・配列

321 複数の要素を格納できる変数を定義する(TABLE型で定義した変数/結合配列)

322 TABLE型で定義した変数(結合配列)に対し値を参照/代入する

323 結合配列に関する情報の取得/要素の操作を行う

324 複数フィールド、複数要素を格納できる変数を定義する(レコードの結合配列)

325 レコードの結合配列に対し値を参照/代入する

・バルク

326 結合配列を使って値を一括代入し、DML処理を効率化する(FORALL文)

327 結合配列を使ってカーソル処理を効率化する(SELECT INTO文+BULK COLLECT句)

328 結合配列を使ってカーソル処理を効率化する(FETCH INTO文+BULK COLLECT句)

第6章 チューニングの極意

・チューニング情報

329 処理に時間が掛かったSQLを抽出する

330 SQLを実行して、そのSQLの実行計画を確認する

331 SQLを実行せずに、そのSQLの実行計画を確認する

332 最近実行されたSQLの実行計画を確認する

・索引利用ルール

333 索引を使用するため、WHERE句の索引列で演算を行わないように書き換える

334 索引を使用するため、WHERE句の索引列で関数処理を行わないように書き換える

335 索引を使用するため、データ型の暗黙変換が行われないように書き換える

336 索引を使用するため、NOT EQUALによる絞り込みを行わないように書き換える

337 索引を使用するため、OR演算子の両側にある列に索引を作成する

338 索引を使用するため、NOT IN述語による絞り込みを行わないように書き換える

339 索引を使用するため、検索条件にコンポジット索引の先頭列が含まれるように書き換える

340 索引を使用するため、HAVING句をWHERE句に書き換える

・索引活用

341 索引だけで処理が完了するように、SELECT文の全列を索引に含める

342 ORDER BY句で索引を使用し、ソート処理を省略する

343 DISTINCTで索引を使用し、ソート処理、またはハッシュ処理を省略する

344 GROUP BY句で索引を使用し、ソート処理、またはハッシュ処理を省略する

345 MAX関数、MIN関数で索引を使用し、最小限のアクセスで結果を求める

346 COUNT関数で索引を使用し、最小限のアクセスで結果を求める

・アクセスパスの指定

347 全表スキャン(フルテーブルスキャン)が選択されるように強制する

348 索引スキャンが選択されるように強制する

349 特定の索引が選択されないように強制する

350 複数の索引を結合して実行するように強制する

351 索引のスキップ・スキャンが選択されるように強制する

352 高速全索引スキャン(INDEX FAST FULL SCAN)が選択されるように強制する

・表の結合順序

353 FROM句に指定した順序で表が結合されるように強制する

354 任意の順序で表が結合されるように強制する

・結合方法の指定

355 ソートマージ結合が選択されるように強制する

356 ハッシュ結合が選択されるように強制する

357 ネステッド・ループ結合が選択されるように強制する

358 特定の索引を使用したネステッド・ループ結合が選択されるように強制する

・チューニング情報

359 データベース起動後に発生した待機の詳細情報(待機イベント)を確認する

360 各セッションが確立されてから発生した待機の詳細情報(待機イベント)を確認する

361 現在発生している各セッションごとの待機の詳細情報(待機イベント)を確認する

362 メモリー上でのデータのヒット率を確認する

363 ソート処理とハッシュ処理の内部的な処理状態を確認する

PR

秀和システム