LoginSignup
0
0

More than 1 year has passed since last update.

【OSS-DB Silver】問題集(黒本)には出てくるけれど教科書(緑本)には出てこない事項

Last updated at Posted at 2022-02-09

OSS-DB Silver 取得に向けて勉強中です。

『OSS教科書 OSS-DB Silver ver.2.0対応(翔泳社)』(緑本)と
『徹底攻略OSS-DB Silver 問題集 ver2.0対応(インプレス)』(黒本)
に取り組んでいます。

問題集で間違えたポイント、あやふやな点を教科書で補いつつ進めているのですが、
「問題集には出てくるが、教科書には出てこない」事項があったので、復習用にメモしておきます。
(単に見落としていただけかもしれないけれど)

尚、公式ドキュメントはOSSDBの出題範囲である「PostgreSQL 11」のものを参照しました。
(英)https://www.postgresql.org/docs/11/index.html
(日)https://www.postgresql.jp/document/11/html/

INHERITS(継承)

問題集p69(4章 SQL)問27
公式ドキュメント : 
https://www.postgresql.org/docs/11/tutorial-inheritance.html

(2022/4/13追記:
Pingにも出てきた。(問題ID : 12270)Onenoteに詳細メモ)

SQL99

問題集p99 (4章 SQL)問33の解説
いきなり

SQL99の結合に関する問題です。

って出てきた。99って何?

→SQLには版があるようだ。国際標準SQL言語の国際規格制定年度に基づいて版名が付けられている模様。
1999~2000年度に制定されたのがSQL99。
その前の版はSQL92。
問題集に出てきたということは、SQL99が最新版なのかな?「SQL:2016」というのも見かけた。
大きな節目になったのがSQL92とSQL99だという情報もある。
詳細については今は深追いせず、
・SQLには版がある
・SQL99はメジャーな版
だということだけ覚えておこう。

カーソルのクローズって何?

問題集p80 (4章 SQL)問43
問題文

カーソルのクローズに関する説明として適切でないものを選びなさい。

→カーソルって何?クローズって何?初耳。教科書を見てみるも、何の記載も無い。

https://www.youtube.com/watch?v=zic2Tbd0ZHA
https://atmarkit.itmedia.co.jp/ait/articles/1703/01/news193.html

→つまり、例えばUPDATEしたい行が3種類あったとして・・・
通常は・・・「WHERE句でどの行かを指定してUPDATEする(3種それぞれについて行なう)」必要がある。
カーソルを使うと・・・「最初に3種それぞれの条件とUPDATEしたい内容」を変数として定義しておく。カーソルを実行することでループ処理で1行ずつ条件を判定し、条件に応じてデータを自動で更新することができる。
・・・ということかな?ただ、この変数(「条件」と「UPDATEしたい内容」)の指定方法がいまいちよくわからない。

(2022/4月メモ:→カーソルについて、Ping-tで出てきた!解説Onenoteに記録した。)

EXECUTE・USING

黒本6章問12・13・15で出てきた。
緑本p238 8章SQLとオブジェクト トリガの作成 で
書式の中にさらっと「EXECUTE」が出てくるも、USINGは見当たらなかった。
EXECUTEも詳しい説明は無し。

%type , %rowtypeとは?

黒本10章(総仕上げ問題)問32
公式ドキュメント:43.3.3. 型のコピー・43.3.4. 行型

◆%type◆
データ型の変数を宣言。
参照される項目のデータ型が将来変更された場合でも、関数定義を変更する必要をなくすことができる!!

◆%rowtype◆
複合型の変数を宣言。
(複合型の変数=行変数(または行型変数))
table_name%ROWTYPEという記法を使用して、既存のテーブルやビューの行と同じ型を持つ行変数を宣言することができる。
もしくは、複合型の名前を付与して宣言することができる。

◆例(%type)◆

例えば、usersテーブルにuser_idという列があるものとします。 users.user_idと同じデータ型の変数を宣言するには、以下のように記述します。
user_id users.user_id%TYPE;
%TYPEを使用することで、参照する構造のデータ型を把握する必要がなくなります。 また、これが最も重要なことですが、参照される項目のデータ型が将来変更された(例えば、user_idのテーブル定義をintegerからrealに変更した)場合でも、関数定義を変更する必要をなくすことができます。
(引用元:PostgreSQL 11.5文書 第43章 PL/pgSQL - SQL手続き言語 43.3. 宣言 43.3.3. 型のコピー )

STRICT

黒本p227 (10章 総仕上げ問題)問34で
いきなりSTRICTって出てきた。

問題(p227):
CREATE FUNCTION myfune(INTEGER) RETURNS text
LANGUAGE plpgsql STRICT AS '
(後略)

解説(p250):
(前略)引数にNULLが渡されたときの動作としてSTRICTが設定されているため、中のコードは実行されずNULLが戻されます。

STRICTって何?

公式ドキュメント : 
https://www.postgresql.jp/docs/9.2/sql-createfunction.html

CALLED ON NULL INPUT
RETURNS NULL ON NULL INPUT
STRICT

CALLED ON NULL INPUT(デフォルト)を指定すると、引数にNULLが含まれていても、関数が通常通り呼び出されます。
その場合は、必要に応じてNULL値を確認し、適切な対応をすることは関数作成者の責任です。
RETURNS NULL ON NULL INPUTもしくはSTRICTを指定すると、関数の引数にNULLがある場合、常にNULLを返します。
このパラメータが指定されると、NULL引数がある場合、関数は実行されません。 代わりに、NULLという結果が自動的に与えられます。

「STRICTを指定すると、関数の引数にNULLがある場合、常にNULLを返します

CASE

Ping-t(問題ID : 11980)でCASEが出てきたので緑本を引いたが、掲載されておらず。
黒本(p152 6章関数)には1問出題されていた。構文も記載されていた。

条件分岐の記述ができる関数。

【構文】[]内は省略可能
CASE [カラム名] WHEN 条件式 THEN 結果
 [WHEN...]
 [ELSE 結果]
END

追記記録

・(2022.03.03)STRICT
・(2022.4.13)CASE

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0