第1正規形である理由の常套句 [exam]
DB スペシャリストの午後問題向け。あるテーブルがどの正規形であるかを、その理由と共に答える問題の常套句。
第1正規形である理由
全ての属性が単一で、候補キー{A、B}の一部であるBに非キー属性Cが関数従属するため。
第2正規形である理由
全ての属性が単一で、候補キーからの部分関数従属性はなく、推移的関数従属性A→B→Cがあるため。
第3正規形である理由
全ての属性が単一で、全ての非キー属性が候補キーに完全関数従属し、候補キーからの推移的関数従属性がないため。
情報処理教科書 データベーススペシャリスト 2010年度版 (CD-ROM付) より。ここで、A、B、C は属性名とし、試験では問題文中の語句に置き換えること。
過去問題を見る限り、テクニカルエンジニア データベースよりもデータベーススペシャリストの方が問題が易しめ。IPA が公開している統計値を見ても合格率が高い。
が、私にとっては午後問題はかなり難しいと感じる。受からないだろうな...。
SQL の基礎 その6 [exam]
SQL のメモ。ORACLE MASTER Bronze SQL 基礎Ⅰ向け。SQL の基礎 その5 の続き。
ORACLE MASTER Bronze SQL 基礎Ⅰ日本オラクル公式テキスト改訂版によると、索引を作成するとき・しないときのガイドラインがあるという。以下、同書籍から引用。
次の場合は、索引を作成します。最後の、「索引を付けた列が、式の一部として使用される」場合は索引を付けない方が良いということは気がつかなかった。何故だろう。
- 列の値の種類が多い、または列の値が一意。
- 列の値に NULL 値を多く含み、WHERE 句の条件で NULL 値でない値の検索が多い。
- WHERE 句の条件として頻繁に使用される。
- 表のサイズが大きい。
- ほとんどの問合わせが、表全体の 2%~4%未満の行を検索する。
次の場合は、索引を作成しません。
- 列の値の種類が少ない。
- 列の値に NULL 値を多く含み、WHERE 句の条件で NULL 値の検索が多い。
- WHERE 句の条件としてあまり使用されない。
- 表のサイズが小さい。
- ほとんどの問合わせが、表全体の2%~4%以上の行を検索する。
- 頻繁に更新、追加、削除が行われる表。
- 索引を付けた列が、式の一部として使用される。
SQL の基礎 その5 [exam]
SQL のメモ。ORACLE MASTER Bronze SQL 基礎Ⅰ向け。SQL の基礎 その4 の続き。
RR日付書式
表示する年00~49 | 現在の年号50~99 | |
---|---|---|
現在の年XX00~XX49 | 現在の世紀 | 前の世紀 |
現在の年XX50~XX99 | 次の世紀 | 現在の世紀 |
※現在2010年 '09' -> 2009年、現在1998年 '09' -> 2009年
ANY と ALL
- > ANY
いずれかより大きい = 最小より大きい - > ALL
全てより大きい =最大より大きい
NEXTVAL と CURRVAL
- 使用可能
- SELECT文のSELECT句の内、副問い合わせ以外の SELECT句
- UPDATE文のSET句
- INSERT文のVALUES句
- INSERT文で使用する副問い合わせ内のSELECT句
- 使用不可能
- SELECT分や、DELETE文、UPDATE文の副問い合わせ内のSELECT句
- GROUP BY句やHAVING句、ORDER BY句を使用するSELECT文
- DISTINCTを使用するSELECT句
- CREATE TABLE文やALTER TABLE文内のDEFAULT式
- ビューのSELECT句
デカルト積
- 明示する場合は CROSS JOIN
SQL の基礎 その4 [exam]
SQL のメモ。ORACLE MASTER Bronze SQL 基礎Ⅰ向け。SQL の基礎 その3 の続き。
日付関数
- ADD_MONTHS(日付,n)
日付に nヶ月を加算する。 - MONTHS_BETWEEN(日付1,日付2)
日付1から日付2を減算した月数を戻す。日数部分は小数点。日付1が日付2よりも古いときは負になる。 - LAST_DAY(日付)
月末の日付を返す。 - NEXT_DAY(日付,'文字列')
指定した日付より後の指定曜日の日時を返す。
例: NEXT_DAY(DATE '2010-01-01', '月曜日') '月曜日' の部分は環境依存。'月曜' も可。
日付書式要素
要素 | 説明 | 結果 | 補足 |
---|---|---|---|
YYYY | 年 | 2005 | |
MM | 2桁数値による月 | 04 | |
MONTH | 月の名前 | APRIL | 日本語環境の場合「4月」 |
MON | 月の名称 | APR | 日本語環境の場合「4月」 |
DDD | 年における日数 | 091 | 年のはじめから数えた日数 |
DD | 月における日数 | 01 | 月のはじめから数えた日数(=日付) |
D | 週における日数 | 6 | 週のはじめから数えた日数(日曜が1で土曜が7) |
DAY | 曜日の名前 | FRIDAY | 日本語環境の場合「金曜日」 |
DY | 3文字の曜日の略称 | FRI | 日本語環境の場合「金」 |
※結果欄は「2005-04-01 金曜日」をそれぞれの書式で表示した結果
※出典 ORACLE MASTER Bronze SQL基礎Ⅰ模擬問題集,株式会社CSK 教育サービス事業部,株式会社アスキー,2005
日付書式要素:時刻書式
要素 | 説明 | 結果 | 補足 |
---|---|---|---|
AM または PM | 正午標識 | PM | 日本語環境の場合「午後」 |
HH または HH12 | 時間、12時間書式 | 07 | |
HH24 | 時間、24時間書式 | 19 | |
MI | 分 | 30 | |
SS | 秒 | 20 |
※結果欄は「午後7時30分20秒」をそれぞれの書式で表示した結果
※出典 ORACLE MASTER Bronze SQL基礎Ⅰ模擬問題集,株式会社CSK 教育サービス事業部,株式会社アスキー,2005
- 「分」が「MI」であることに注意。
数値書式要素
- 0 は先頭の数値が0のとき0を戻す。 TO_CHAR(1234,'0999') -> 01234
- 9 は空白を戻す。 TO_CHAR(0.5,'99.99' -> _ _ .50
SQL の基礎 その3 [exam]
SQL のメモ。ORACLE MASTER Bronze SQL 基礎Ⅰ向け。 SQL の基礎 その2 の続き。
順序
- 順序を作成した後、開始番号(START WITH) は変更できない。変更する場合は順序を削除し再作成する。
ビュー
- ビューの元になる表を削除してもビューは削除されないが、使用できない。
- ビューを通して実表を操作するには制限がある。
行の削除 (DELETE) |
行の変更 (UPDATE) |
行の挿入 (INSERT) |
|
---|---|---|---|
グループ関数 | ○ | ○ | ○ |
GROUP BY句 | ○ | ○ | ○ |
DISTINCTキーワード | ○ | ○ | ○ |
疑似列ROWNUMキーワード | ○ | ○ | ○ |
式によって定義された列 | ○ | ○ | |
ビューで選択されていない実表のNOT NULL列 | ○ |
※出典 ORACLE MASTER Bronze SQL基礎Ⅰ日本オラクル公式テキスト 改訂版,日本オラクル株式会社オラクルユニバーシティ,株式会社アスキー,2005
CASE
- CASE 列 WHEN 条件1 THEN 戻り値1
WHEN 条件2 THEN 戻り値2
...
ELSE デフォルト値
END
DECODE
- DECODE (列,
条件1,戻り値1,
条件2,戻り値2,
...,
デフォルト値)
NULL
- NULL + 100 -> NULL
- NULL は昇順ソート(ASC)では最後、降順ソート(DESC)では最初になる。
SQL の基礎 その2 [exam]
日付・時刻データ型
-
DATE
- TIMESTAMP
小数秒を格納可能 - TIMESTAMP WITH TIME ZONE
UTC との時差 - TIMESTAMP WITH LOCAL TIME ZONE
データベースのタイムゾーンに変換して日時を格納。格納されたデータを表示するときはユーザセッションのタイムゾーンに従って変換されて表示 - INTERVAL YEAR TO MONTH
年月の期間。INTERVAL '123-5' YEAR(3) TO MONTH のように記述する。この場合、123年と5ヶ月間。YEAR(n) は年の桁数。既定は 2。 - INTERVAL DAY TO SECOND
日時分秒の期間。INTERVAL '3 1:2:3' DAY TO SECOND のように記述する。この場合、3日と1時間2分3秒間。DAY と SECOND の部分は DAY,HOUR,MINUTE,SECOND のいずれかを指定。TO の左側に指定したい期間の中で一番大きいものを、TO の右側に小さいものを記述。INTERVAL '3 1:2' DAY TO MINUTE なら 3日と1時間2分間となる。
制約
- NOT NULL は列制約構文でしか定義できない。
関数
- 日付関数はあるが時刻関数とは呼ばない。
- TRUNC は TRUNC(列名,[n]) として使う。n: 小数第何位まで表示するか。省略した場合は整数まで表示。
25.374 -> 2:-1、5:0、3:1、7:2、4:3 。 TRUNC(25.374,-1) = 30
計算
- 日付に時間を加算するときは 日付+数値/24
集合演算子
- UNION
- NULL は重複チェック時に無視される。
- 既定ではSELECTの第一列で昇順にソートされる。
- UNION ALL
- 重複行は削除されない。
- ソートされない。
- DISTINCT は利用できない。
SQL の基礎 その1 [exam]
自然結合
- NATURAL JOIN 句を使用する。
- 同名の列を全て使用した等価結合であり、結合に使用される列の型は同じでなければならない。
using句
- 結合する列名が表間で同じ場合は USING 句を利用して結合する列名を定義できる。
- USING 句と NATURAL JOIN 句は同時に使用できない。
- USING 句に指定した列は表名による修飾が出来ない。
集計関数とNULL
- COUNT(*) -> NULL もカウントする。
- COUNT(*) 以外は NULL を無視する。
グループ関数と単一列の選択
- グループ関数(MAX とか COUNT とか)と単一列を SELECT するときは、単一列を全て GROUP BY 句に指定しなければならない。
- GROUP BY に列別名を指定できない。
HAVING句とGROUP BY句の順序
- HAVING 句と GROUP BY 句はどちらを先に記述しても良い。
私が SQL を書くときは、USING 句や自然結合は使わないし(A.COLUMN1 = B.COLUMN1 とちゃんと書く)、NULL はあらかじめ除外して集計するし、HAVING 句や GROUP BY 句の順序を余り気にしてなかったので...問題を解いてみると案外間違えるわけです。
SJC-WC 310-081 関連エントリのまとめ [exam]
本ブログで Sun Certified Web Component Developer for the Java 2 Platform, Enterprise Edition 1.4 (SJC-WC:Sun認定Webコンポーネントディベロッパ) に関するエントリを幾つか書いた。しかし、筆者自身も辿るのがめんどくさくなったので、本エントリでまとめる。
- JSP の暗黙オブジェクト一覧
- EL で使用可能な暗黙オブジェクト一覧
- Servlet 関係の API 一覧 (サーブレット関連)
- Servlet 関係の API 一覧 その2 (リスナー、セッション、フィルタ、フォワード関連)
- Servlet 関係の API 一覧 その3 (JSP、カスタムタグ関連)
- JSP 標準アクション一覧
- JSTL 1.1 core ライブラリに定義されているタグ一覧
- SJC-WC 関連のメモ
以上が本ブログでのエントリ。他にも有用な WEB リソースとして次を挙げておく。
- ITトレメ - @IT自分戦略研究所 の SJC-WC のサンプル問題
書籍としては次のものを挙げておく。
※SJC-WC には 2009年09月に合格しました。当時は Oracle ではなく、Sun Microsystems から Jonathan I.. Schwartz の名前の入った Certification が送られてきました。Oracle 買収後は Oracle から送られてくるのでしょうね。
SJC-WC 関連のメモ [exam]
web.xml の url-pattern 指定方法
- "/something"
- "*.do"
- "/*"
もし、servlet-mapping に *.do と XXX/* が定義されている場合は URL の左側からみてパターンに一致したものを採用するらしい。XXX/sample.do の場合、 XXX/* にマッチングする。
ステータス/エラー/リダイレクト
全て javax.servlet.http.HttpServletResponse のメソッド。- ステータス : setStatus(int)
- エラー : sendError(int)
- リダイレクト
- setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY) と setHeader("Location", String); の組み合わせ
- sendRedirect(String)
入出力関連
- 入力
- バイナリ : javax.servlet.ServletInputStream javax.servlet.ServletRequest.getInputStream()
- テキスト : java.io.BufferedReader javax.servlet.ServletRequest.getReader()
- 出力
- バイナリ : javax.servlet.ServletOutputStream javax.servlet.ServletResponse.getOutputStream()
- テキスト : java.io.PrintWriter javax.servlet.ServletResponse.getWriter()
URL 書き換えを行うメソッド
どちらも javax.servlet.http.HttpServletResponse のメソッド。- encodeURL
- encodeRedirectURL
タグハンドラでの出力
- クラシックタグハンドラ : javax.servlet.jsp.tagext.TagSupport.pageContext で PageContext を取得し PageContext.getOut() すると javax.servlet.jsp.JspWriter を取得できる。 getOut() 自体は PageContext の親クラスの javax.servlet.jsp.JspContext が提供
- シンプルタグハンドラ : javax.servlet.jsp.tagext.SimpleTagSupport.getJspContext() で JspContext を取得し getOut() すると javax.servlet.jsp.JspWriter を取得できる。
タグハンドラでの body の扱い
-
クラシックタグハンドラ(BodyTag) : javax.servlet.jsp.tagext.BodyTag.setBodyContent(BodyContent b)
- シンプルタグハンドラ : javax.servlet.jsp.tagext.SimpleTag.setJspBody(JspFragment jspBody)
アドレスやポートの取得
全て javax.servlet.ServletRequest のメソッド。- サーバのホスト名 : getServerName()
- サーバのポート : getServerPort()
- クライアントのドメイン名 : getRemoteHost()
- クライアントのアドレス : getRemoteAddr()
coockie 関連
- HttpServletResponse.addCookie(Cookie cookie)
- Cookie.setMaxAge(sec)
- Cookie[] HttpServletRequest.getCookies()
Enumeration / String[] を返すもの
- Enumeration javax.servlet.ServletRequest.getParameterNames()
- Enumeration javax.servlet.http.HttpServletRequest.getHeaderNames()
- Enumeration javax.servlet.http.HttpServletRequest.getHeaders(String)
- String[] javax.servlet.ServletRequest.getParameterValues(name)
その他
- session 関係は encodeXXX 以外は request
- EVAL_BODY_BUFFERED は BodyTag
JSTL 1.1 core ライブラリに定義されているタグ一覧 [exam]
JSTL 1.1 core ライブラリに定義されているタグの一覧。次表の「...属性を使う」という表現は、間違えやすいと思う属性名を挙げたものであり、他の属性も定義されていることに注意。
タグ | メモ |
<c:out> | escapeXML 属性がある。 |
<c:set> | var、value 属性を使う。標準アクションの setProperty は name,value であることに注意。 |
<c:remove> | |
<c:if> | |
<c:choose> | |
<c:when> | <c:choose>の子要素。 |
<c:otherwise> | <c:choose>の子要素。 |
<c:forEach> | |
<c:forTokens> | |
<c:catch> | var 属性を使う。 |
<c:param> | <c:import>、<c:url>、<c:redirect>の子要素。 |
<c:import> | url 属性を使う。core ライブラリは "import" だが ディレクティブや標準アクションは "include" という名称であることに注意 |
<c:url> | var 属性を使う。 |
<c:redirect> | url 属性を使う。 |