<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>データベース | 基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</title>
	<atom:link href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/tag/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi</link>
	<description>基本情報技術者試験を学習する人のためにつくられた専門メディア。250本以上の記事を掲載し、勉強方法や各分野のポイント、過去問解説など、試験に役立つ情報を発信。試験対策書籍を執筆する著者が、はじめて学ぶ人でもわかりやすく解説します。（2023年度からの新制度に対応済み）</description>
	<lastBuildDate>Wed, 20 May 2026 00:42:42 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.29</generator>
	<item>
		<title>IT初心者のための基本情報ではじめる SQL 入門 ～データベース分野 2</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/learn_tech/sql4beginners/</link>
		<pubDate>Tue, 04 Oct 2022 07:19:25 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[午前問題]]></category>
		<category><![CDATA[科目 A]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=learn_tech&#038;p=7250</guid>
		<description><![CDATA[<p>この連載は、これから IT の勉強をはじめる人を対象としたものです。 基本情報技術者試験の出題分野ごとに、仕組み、主要な用語、および過去問題を紹介します。 受験対策としてだけでなく、 IT の基礎知識を幅広く得るために、 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/learn_tech/sql4beginners/">IT初心者のための基本情報ではじめる SQL 入門 ～データベース分野 2</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>この連載は、これから IT の勉強をはじめる人を対象としたものです。  基本情報技術者試験の出題分野ごとに、仕組み、主要な用語、および過去問題を紹介します。  受験対策としてだけでなく、 IT の基礎知識を幅広く得るために、ぜひお読みください。 </p>
<p>今回は、<span class="bold">データベース</span> 分野 その 2 として <span class="bold">SQL</span> を取り上げます。 </p>
<style>pre{margin:1.5em -7.5%!important;padding:1.5em 7.5%!important}.card-panel pre{margin:2em -24px!important;padding-left:24px!important}.code-original-style{font-family:consolas,'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;background:#263238;color:#eceff1;font-size:1em;}.background{position:relative;}dl.inline dd{margin-left:2em;}.transform{transform: scale(-1, 1);}.card-panel{box-shadow:0 4px 16px rgba(0,0,0,0.02),0 20px 46px rgba(0,0,0,0.08);}table{font-size:.85em;}th,td{border-left:1px solid rgba(0,0,0,.12);border-right:1px solid rgba(0,0,0,.12);}tr:first-child{border-top:1px solid rgba(0,0,0,.12)}@media screen and (max-width:600px){dl:not(.inline)>dd{margin-left:1em}}</style>
<h2>SQL が必要な理由</h2>
<p>現在主流のデータベース方式は、データを表形式で格納する関係データベースです。 Oracle Database 、 SQL Server 、 DB2 、 MySQL などの代表的な DBMS 製品が、関係データベースを採用しています。 これらの DBMS をサーバーマシンにインストールすることで、データベースを実現できます。</p>
<div class="divider mag_tp40 mag_bt10"></div>
<p class="grey-text small-text"><i class="material-icons mag_rt05">info_outline</i>関係データベースを説明した前回の記事</p>
<p><a href="../db4beginners/"></p>
<div class="row valign-wrapper pad_w20">
<div class="col s3 m2 flex pad_00"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2022/09/cover_db4beginners-300x169.jpg" width="300" height="169" /></div>
<div class="col s9 m10 pad_10 blue-grey-text bold">IT 初心者のための基本情報ではじめる データベース 入門 ～データベース分野 1</div>
</div>
<p></a></p>
<div class="divider mag_bt40 mag_tp10"></div>
<p><span class="u">ユーザーは、専用の言語で DBMS に命令を与えて、表の作成や操作などを行います。 そのための言語が、 <span class="bold">SQL</span> （ Structures Query Language 、構造化照会言語）</span>です。 DBMS を使うために SQL が必要なのです。</p>
<p>&nbsp;</p>
<p>SQL の仕様は、 ISO（ International Organization for Standardization 、国際標準化機構）や JIS （ Japanese Industrial Standards 、日本産業規格）で標準化されています。 したがって、<span class="u">どの DBMS 製品を使っていても、基本的に SQL のキーワードや構文は同じ</span>です。</p>
<p>ここで、基本的と断っているのは、 DBMS 製品によって若干の違いがあるからです。 情報処理推進機構が公開している<a href="https://www.jitec.ipa.go.jp/1_13download/shiken_yougo_ver5_0.pdf#page=3" rel="noopener" target="_blank">「試験で使用する情報技術に関する用語・プログラム言語など Ver.5.0 」</a>では、 JIS X 3005 規格群の SQL を使うと示されています。 <span class="u">この規格の内容を調べる必要はありません</span>。 基本情報技術者試験には、特定の DBMS 製品に依存しない基本的な SQL が出題されるからです。</p>
<h2>SQL の構文と主要な命令</h2>
<p>SQL のキーワードや構文を使って記述された文を <span class="bold">SQL 文</span>と呼びます。 <span class="u">SQL 文は、すべて「～せよ」を意味する命令文</span>です。 C 言語、 Java 、 Python などのプログラミング言語では、複数の命令を使って処理の流れを表しますが、 SQL では、基本的に 1 つの命令で 1 つの操作を表します（複数の命令をまとめることもできます）。</p>
<h3>試験によく出る SQL の命令</h3>
<p>SQL の構文は、英語の命令文と同様であり、</p>
<div class="background c-round">
動詞（～せよ） 目的語（～を）
</div>
<p>の順に言葉を並べます。</p>
<p>命令の種類は、</p>
<ul class="background c-round">
<li>データを定義する命令</li>
<li>データを操作する命令</li>
<li>データを制御する命令</li>
</ul>
<p>に大きく分けられます。</p>
<p>以下は、試験によく出題される命令です。 基本情報技術者試験のシラバスにある「データベース言語（ SQL ）」にも、これらの命令が示されています。</p>
<dl class="background c-round">
<p class="mag_h00 post-title"><i class="material-icons">import_contacts</i> 試験によく出る SQL の命令</p>
<dt class="bold">CREATE TABLE 命令</dt>
<dd>テーブル（表）を作成せよ</dd>
<dt class="bold">SELECT 命令</dt>
<dd>データを選択（検索）せよ</dd>
<dt class="bold">INSERT 命令</dt>
<dd>データを挿入（登録）せよ</dd>
<dt class="bold">UPDATE 命令</dt>
<dd>データを更新せよ</dd>
<dt class="bold">DELETE 命令</dt>
<dd>データを削除せよ</dd>
</dl>
<p>CREATE TABLE は、データを定義する命令です。<br />
SELECT 、 INSERT 、 UPDATE 、 DELETE は、データを操作する命令です。</p>
<p>関係データベースは、データを表形式で格納するので、<span class="u">命令の対象となる目的語は、表全体や表の中にあるデータ</span>です。</p>
<h3>SQL 文を読んでみよう</h3>
<p>SQL 文では、動詞と目的語の他にも、<span class="u">前置詞や関係副詞などが使われる</span>こともあります。 単語を並べる順序は、英語の構文と同様なので、英語の命令文だと思って SQL 文を見れば、意味を読み取れるでしょう。</p>
<p>&nbsp;</p>
<p>以下に、 SQL 文の例を示します。</p>
<p><span class="chip"><i class="material-icons blue-text">code</i> 検索を行う SQL 文の例</span></p>
<p class="grey-text hide-on-med-and-up mag_h10 small-text"><i class="material-icons light-blue-text mag_rt05">swipe</i>SQL 文は横スクロールできます</p>
<pre class="code-original-style"><span class="pink-text text-accent-2 bold">SELECT</span> 氏名, 給与 <span class="pink-text text-accent-2 bold">FROM</span> 社員 <span class="pink-text text-accent-2 bold">WHERE</span> 給与 <span class="pink-text text-accent-2 bold">>=</span> 300000</pre>
<p class="small-text grey-text"><i class="material-icons amber-text">lightbulb</i> <span class="pink-text text-accent-2 bold">赤色文字は</span>、 SQL として意味が決められたキーワードや記号です。 </p>
<p>これは、</p>
<div class="background c-round"><i class="material-icons blue-text transform" style="position:absolute;left:.25em;top:.5em;">format_quote</i>社員表から（ <code class="language-sql"> FROM 社員</code> ）、<br />
給与が300000以上という条件で（ <code class="language-sql"> WHERE 給与 >= 300000 </code> ）、<br />
氏名列と給与列を検索せよ（ <code class="language-sql"> SELECT 氏名, 給与</code>）<i class="material-icons blue-text">format_quote</i>
</div>
<p>という意味です。 SELECT は動詞、 FROM は前置詞、 WHERE は関係副詞であり、 SQL として意味が決められたキーワードです。 これらのキーワードの後に、表や列や条件などを置くことで、 1 つの SQL 文が構成されます。</p>
<p>SQL は、英語の大文字と小文字を区別しません。 たとえば、 SELECT という命令は、 select と記述することも、 Select と記述することもできます。</p>
<p>&nbsp;</p>
<p>この SQL 文を実行すると、<span class="u">実行結果が表形式で得られます</span>。 この表は、 <code class="language-sql">FROM</code> の後に指定された表から条件に一致する行を選択し、指定された列だけを取り出したものです。 たとえば、以下のような表が得られます。</p>
<table class="responsive-width">
<caption>検索を行う SQL 文の実行結果として得られる表の例</caption>
<thead>
<tr>
<th>氏名</th>
<th>給与</th>
</tr>
</thead>
<tbody>
<tr>
<td>山田太郎</td>
<td>320000</td>
</tr>
<tr>
<td>鈴木花子</td>
<td>350000</td>
</tr>
<tr>
<td>佐藤三郎</td>
<td>330000</td>
</tr>
</tbody>
</table>
<h2>SQL の過去問題</h2>
<p>SQL の分野の過去問題を 3 問ほど紹介しましょう。 </p>
<h3>CREATE TABLE で表を作成する SQL 文 と UPDATE でデータを更新する SQL 文 </h3>
<p>最初は、表を作成する SQL 文と、データを更新する SQL 文の問題です。</p>
<p>表を作成する SQL 文 は、</p>
<pre><code class="language-sql">CREATE TABLE 表名(列名 データ型, 列名 データ型, ・・・, PRIMARY KEY(列名))</code></pre>
<p>という構文で表を作成します。 データ型には、<code class="language-sql">CHAR(文字数)</code>で指定する文字列型や、<code class="language-sql">INT</code>で指定する整数型などがあります。<br />
<code class="language-sql">PRIMARY KEY(列名)</code>は、列名で指定された列が主キー（レコードを一意に識別するためのユニークなデータ）であることを設定します。</p>
<p>&nbsp;</p>
<p>データを更新する SQL 文は、</p>
<pre><code class="language-sql">UPDATE 表名 SET 列名 = 更新後の値 WHERE 条件</code></pre>
<p>という構文でデータを更新します。</p>
<div class="card-panel mag_h40">
<span class="bold">問 31</span>　平成 22 年度 秋期</p>
<p>&#8220;商品&#8221; 表に対してデータの更新処理が正しく実行できる UPDATE 文はどれか。 ここで， &#8220;商品&#8221; 表は次の CREATE 文で定義されている。</p>
<pre><code class="language-sql">CREATE TABLE 商品
    (商品番号 CHAR(4), 商品名 CHAR(20), 仕入先番号 CHAR(6), 単価 INT, 
    PRIMARY KEY(商品番号))</code></pre>
<table class="responsive-width centered">
<caption>商品</caption>
<thead>
<tr>
<th>商品番号</th>
<th>商品名</th>
<th>仕入先番号</th>
<th>単価</th>
</tr>
</thead>
<tbody>
<tr>
<td>S001</td>
<td>A</td>
<td>XX0001</td>
<td>18000</td>
</tr>
<tr>
<td>S002</td>
<td>A</td>
<td>YY0002</td>
<td>20000</td>
</tr>
<tr>
<td>S003</td>
<td>B</td>
<td>YY0002</td>
<td>35000</td>
</tr>
<tr>
<td>S004</td>
<td>C</td>
<td>ZZ0003</td>
<td>40000</td>
</tr>
<tr>
<td>S005</td>
<td>C</td>
<td>XX0001</td>
<td>38000</td>
</tr>
</tbody>
</table>
<p>ア</p>
<pre><code class="language-sql">UPDATE 商品 SET 商品番号 = 'S001' WHERE 商品番号 = 'S002'</code></pre>
<p>イ</p>
<pre><code class="language-sql">UPDATE 商品 SET 商品番号 = 'S006' WHERE 商品名 = 'C'</code></pre>
<p>ウ</p>
<pre><code class="language-sql">UPDATE 商品 SET 商品番号 = NULL WHERE 商品番号 = 'S002'</code></pre>
<p>エ</p>
<pre><code class="language-sql">UPDATE 商品 SET 商品番号 = 'D' WHERE 商品番号 = 'S003'</code></pre>
</div>
<p>問題に示された CREATE TABLE 命令の SQL 文は、</p>
<div class="background c-round"><i class="material-icons blue-text transform" style="position:absolute;left:.25em;top:.5em;">format_quote</i>4 文字の文字列型の商品番号列、<br />
20 文字の文字列型の商品名列、<br />
6 文字の文字列型の仕入先番号列、<br />
整数型の単価列を持ち、<br />
商品番号列を主キーとして、<br />
商品表を作成せよ <i class="material-icons blue-text">format_quote</i>
</div>
<p>という意味です。</p>
<p>&nbsp;</p>
<p>問題の選択肢に示された SQL 文は、どれも商品表を更新する内容になっています。</p>
<p>問題を解くポイントは、<span class="u">主キーが重複する結果になる更新は、許可されない（ SQL 文の実行結果がエラーになる）</span>ということです。</p>
<p>先ほどの CREATE TABLE 命令によって、商品表の商品番号列が主キーに設定されています。 したがって、選択肢に示された SQL 文の中で、商品番号列が重複する結果にならない更新が、正しく実行できます。</p>
<dl class="background c-round">
<dt>選択肢アの SQL 文</dt>
<dd>
<blockquote>
<p class="blue-grey-text">商品番号列が &#8216;S002&#8217; という条件で、商品表の商品番号列を &#8216;S001&#8217; に更新せよ</p>
</blockquote>
<p>という意味です。 この SQL 文を実行すると、商品番号列で &#8216;S001&#8217; が重複してしまうので、エラーになります。</dd>
<dt>選択肢イの SQL 文</dt>
<dd>
<blockquote>
<p class="blue-grey-text">商品名列が &#8216;C&#8217; という条件で、商品表の商品番号列を &#8216;S006&#8217; に更新せよ</p>
</blockquote>
<p>という意味です。 この SQL 文を実行すると、商品番号列で &#8216;S006&#8217; が重複してしまうので、エラーになります。</dd>
<dt>選択肢ウの SQL 文</dt>
<dd>
<blockquote>
<p class="blue-grey-text">商品番号列が &#8216;S002&#8217; という条件で、商品表の商品番号列を NULL に更新せよ</p>
</blockquote>
<p>という意味です。 主キーは、重複が許可されませんが、 NULL （未設定）にすることも許可されないので、この SQL 文を実行するとエラーになります。</dd>
<dt>選択肢エの SQL 文</dt>
<dd>
<blockquote>
<p class="blue-grey-text">商品番号列が &#8216;S003&#8217; という条件で、商品表の商品名列を &#8216;D&#8217; に更新せよ</p>
</blockquote>
<p>という意味です。 主キーが重複することも、 NULL になることもないので、この SQL 文は、正しく実行できます。</dd>
</dl>
<p>したがって、正解は、選択肢エです。</p>
<h3>SELECT と WHERE でデータを検索する SQL 文</h3>
<p>次は、表を検索する表を検索する SQL 文の問題です。</p>
<pre><code class="language-sql">SELECT 列名 FROM 表名 WHERE 条件</code></pre>
<p>という構文でデータを検索します。</p>
<p>複数の列を指定する場合は、列名をカンマで区切って並べます。</p>
<div class="card-panel mag_h40">
<span class="bold">問 30</span>　平成 23 年度 特別</p>
<p>次の表は，営業担当者のある年度の販売実績である。 この表の第 1 期から第 4 期の販売金額の平均が 4,000 万円以上で，どの期でも 3,000 万円以上販売している営業担当者の名前を求める SQL 文として，適切なものはどれか。 ここで，金額の単位は千円とする。</p>
<p class="grey-text hide-on-med-and-up mag_h10 small-text"><i class="material-icons light-blue-text mag_rt05">swipe</i>表は横スクロールできます</p>
<div class="table-container">
<table class="responsive-width centered">
<caption>販売実績</caption>
<thead>
<tr>
<th>番号</th>
<th width="15%">名前</th>
<th>第 1 期</th>
<th>第 2 期</th>
<th>第 3 期</th>
<th>第 4 期</th>
</tr>
</thead>
<tbody>
<tr>
<td>123</td>
<td>山田一 郎</td>
<td>29,600</td>
<td>31,900</td>
<td>36,600</td>
<td>41,500</td>
</tr>
<tr>
<td>594</td>
<td>鈴木 太郎</td>
<td>43,500</td>
<td>45,300</td>
<td>30,400</td>
<td>46,400</td>
</tr>
<tr>
<td>612</td>
<td>佐藤 花子</td>
<td>49,600</td>
<td>39,400</td>
<td>42,300</td>
<td>51,100</td>
</tr>
<tr>
<td>︙</td>
<td>︙</td>
<td>︙</td>
<td>︙</td>
<td>︙</td>
<td>︙</td>
</tr>
</tbody>
</table>
</div>
<p>ア</p>
<pre><code class="language-sql">SELECT 名前 FROM 販売実績
    WHERE (第 1 期 + 第 2 期 + 第 3 期 + 第 4 期) / 4 >= 40000 OR
          第 1 期 >= 30000 OR 第 2 期 >= 30000 OR
          第 3 期 >= 30000 OR 第 4 期 >= 30000</code></pre>
<p>イ</p>
<pre><code class="language-sql">SELECT 名前 FROM 販売実績
    WHERE (第 1 期 + 第 2 期 + 第 3 期 + 第 4 期) >= 40000 AND
          第 1 期 >= 30000 AND 第 2 期 >= 30000 AND
          第 3 期 >= 30000 AND 第 4 期 >= 30000</code></pre>
<p>ウ</p>
<pre><code class="language-sql">SELECT 名前 FROM 販売実績
    WHERE 第 1 期 > 40000 OR 第 2 期 > 40000 OR
          第 3 期 > 40000 OR 第 4 期 > 48800 AND
          第 1 期 >= 30000 OR 第 2 期 >= 30000 OR
          第 3 期 >= 30000 OR 第 4 期 >= 30000</code></pre>
<p>エ</p>
<pre><code class="language-sql">SELECT 名前 FROM 販売実績
    WHERE (第 1 期 + 第 2 期 + 第 3 期 + 第 4 期) >= 160000 AND
          第 1 期 >= 30000 AND 第 2 期 >= 30000 AND
          第 3 期 >= 30000 AND 第 4 第 >= 30000</code></pre>
</div>
<p>選択肢に示された SQL 文は、どれも <code class="language-sql"> SELECT 名前 FROM 販売実績 </code> までが同じであり、<code class="language-sql"> WHERE </code> 以降の条件が異なります。 ここでは、</p>
<blockquote>
<p class="grey-text">第 1 期から第 4 期の販売金額の平均が 4,000 万円以上で、かつ、どの期でも 3,000 万円以上販売している</p>
</blockquote>
<p>という条件に該当するものを選びます。</p>
<dl class="background c-round">
<dt>選択肢ア</dt>
<dd>「かつ」を意味する AND ではなく、「または」意味する OR で条件が結ばれているので、不適切です。</dd>
<dt>選択肢イ</dt>
<dd>第 1 期から第 4 期の販売金額の平均ではなく、合計が 4,000 万円以上という条件になっているので、不適切です。</dd>
<dt>選択肢ウ</dt>
<dd>第 1 期から第 4 期の販売金額の平均ではなく、それぞれの期の金額に関する条件になっているので（かなりメチャクチャな条件です）、不適切です。</dd>
<dt>選択肢エ</dt>
<dd>第 1 期から第 4 期の販売金額の合計が 16,000 万円以上という条件になっていますが、これは平均が 4,000 万円以上と同じ意味であり、かつ、どの期でも 3,000 万円以上販売しているという条件があるので、適切です。</dd>
</dl>
<p>したがって、正解は、選択肢エです。</p>
<h3>関数を使った SQL 文</h3>
<p>SQL には、<span class="u">データの合計値や平均値などを求める関数が用意されています</span>。 最後に紹介するのは、関数を使った SQL 文の問題です。</p>
<div class="card-panel mag_h40">
<span class="bold">問 28</span>　平成 27 年度 秋期</p>
<p>&#8220;出庫記録&#8221; 表に対する SQL 文のうち，最も大きな値が得られるものはどれか。</p>
<table class="responsive-width centered">
<caption>出庫記録</caption>
<thead>
<tr>
<th>商品番号</th>
<th>日付</th>
<th>数量</th>
</tr>
</thead>
<tbody>
<tr>
<td>NP200</td>
<td>2015-10-10</td>
<td>3</td>
</tr>
<tr>
<td>FP233</td>
<td>2015-10-10</td>
<td>2</td>
</tr>
<tr>
<td>NP200</td>
<td>2015-10-11</td>
<td>1</td>
</tr>
<tr>
<td>FP233</td>
<td>2015-10-11</td>
<td>2</td>
</tr>
</tbody>
</table>
<p>ア</p>
<pre><code class="language-sql">SELECT AVG(数量) FROM 出庫記録 WHERE 商品番号 = 'NP200'</code></pre>
<p>イ</p>
<pre><code class="language-sql">SELECT COUNT(*) FROM 出庫記録</code></pre>
<p>ウ</p>
<pre><code class="language-sql">SELECT MAX(数量) FROM 出庫記録</code></pre>
<p>エ</p>
<pre><code class="language-sql">SELECT SUM(数量) FROM 出庫記録 WHERE 日付 = '2015-10-11'</code></pre>
</div>
<dl class="background c-round">
<dt>選択肢ア</dt>
<dd><code class="language-sql">AVG(数量)</code> は、数量列の平均値を求めます。<br /><code class="language-sql">商品番号 = 'NP200'</code> という条件に一致する行の数量は、 3 と 1 なので、それらの平均の 2 が得られます。</dd>
<dt>選択肢イ</dt>
<dd><code class="language-sql">COUNT(*)</code> は、検索で一致したレコード数を求めます。<br />ここでは、 WHERE による条件の指定がないので、出庫記録表のすべてのレコードが検索に一致し、出庫記録表のレコード数である 4 が得られます。<br /><code class="language-sql">COUNT(*)</code> のカッコの中の <code class="language-sql">*</code> は、列が NULL に設定されているレコードもカウントすることを意味します。 このカッコの中に特定の列名を指定すると、その列が NULL でないレコードだけがカウントされます。</dd>
<dt>選択肢ウ</dt>
<dd><code class="language-sql">MAX(数量)</code> は、数量列の最大値を求めます。<br />ここでも、 WHERE による条件の指定がないので、出庫記録表のすべてのレコードの数量の最大値である 3 が得られます。</dd>
<dt>選択肢エ</dt>
<dd><code class="language-sql">SUM(数量)</code> は、数量列の合計値を求めます。<br /><code class="language-sql">日付 = '2015-10-11'</code> という条件に一致する行の数量は、 1 と 2 なので、それらの合計値の 3 が得られます。</dd>
</dl>
<p>以上のことから、最も大きな値は4であり、正解は選択肢イです。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>今回は「データベース」その 2 として「 SQL 」が必要な理由、 SQL の構文と主要な命令、および SQL の過去問題を紹介しました。</p>
<p>次回は、「ネットワーク」その 1 として「ネットワーク全般」の分野を取り上げます。 </p>
<p>それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/learn_tech/sql4beginners/">IT初心者のための基本情報ではじめる SQL 入門 ～データベース分野 2</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>IT初心者のための基本情報ではじめる データベース 入門 ～データベース分野 1</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/learn_tech/db4beginners/</link>
		<pubDate>Mon, 26 Sep 2022 23:30:58 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[データベース]]></category>
		<category><![CDATA[トランザクション]]></category>
		<category><![CDATA[午前問題]]></category>
		<category><![CDATA[科目 A]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=learn_tech&#038;p=7238</guid>
		<description><![CDATA[<p>この連載は、これから IT の勉強をはじめる人を対象としたものです。 基本情報技術者試験の出題分野ごとに、仕組み、主要な用語、および過去問題を紹介します。 受験対策としてだけでなく、 IT の基礎知識を幅広く得るために、 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/learn_tech/db4beginners/">IT初心者のための基本情報ではじめる データベース 入門 ～データベース分野 1</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>この連載は、これから IT の勉強をはじめる人を対象としたものです。 基本情報技術者試験の出題分野ごとに、仕組み、主要な用語、および過去問題を紹介します。 受験対策としてだけでなく、 IT の基礎知識を幅広く得るために、ぜひお読みください。 </p>
<p>今回は、<span class="bold">データベース</span> 分野 その 1 として <span class="bold">データベース全般</span> を取り上げます。 </p>
<style>dl.inline dd{margin-left:2em;}.card-panel{box-shadow:0 4px 16px rgba(0,0,0,0.02),0 20px 46px rgba(0,0,0,0.08);}table{font-size:.85em;}th,td{border-left:1px solid rgba(0,0,0,.12);border-right:1px solid rgba(0,0,0,.12);}tbody>tr{border:.4em #2196f3 solid}.comment{background:#2196f3;color:white;padding:.25em .5em;position:absolute;right:0;}.up{top:11em}.middle{top:15em}.down{top:19em}@media screen and (max-width:600px){dl:not(.inline)>dd{margin-left:1em}.comment{right:-1em;}.up{top:11em}.middle{top:15.5em}.down{top:19.5em}}</style>
<h2>データベース が必要な理由</h2>
<p>データベースという言葉は、<span class="u">データ（ data ）の基地（ base ）という意味</span>です。 </p>
<p>データベースというアイディアは、第二次大戦後に米国の国防総省で誕生したと言われています。 データを一元管理する基地を作り、データの内容を最新の正しい状態に保ち、必要なときにすぐに利用できるようにすれば、軍事行動を円滑に進められます。 これが、データベースが必要な理由です。 </p>
<p>&nbsp;</p>
<p>現在では、様々なビジネスの現場で、データベースが活用されています。 データベースが必要な理由は、ビジネスの現場でも同じです。 データの内容を最新の正しい状態に保ち、必要なときにすぐに利用できるようにすることで、ビジネスを円滑に進めるのです。 </p>
<p>データベースを実現するための道具として、コンピュータが使われます。 コンピュータが、データの基地になるのです。 </p>
<h2>データベース の仕組み</h2>
<p>コンピュータでデータベースを実現するには、ハードウェアとしてサーバーマシン、大容量のハードディスク、ネットワークが必要であり、ソフトウェアとして、サーバー用 OS 、 DBMS （ Data Base Management System 、データべース管理システム）、データファイルが必要です。 これらの中で特に重要なのが <span class="bold">DBMS</span> です。 </p>
<p>データベースの実体は、膨大なデータを格納したファイルですが、それをクライアントから直接読み書きされてしまうと、様々な問題が生じる恐れがあります。 たとえば、権限のないクライアントが勝手にデータを閲覧したり書き換えたり、複数のクライアントが同時に同じデータを更新して矛盾が生じてしまうことです。 </p>
<p>このような問題を防ぐために、 DBMS は、クライアントの権限や、複数のクライアントの競合などを管理します。 <span class="u">データを操作する言語である <span class="bold">SQL</span> の命令を解釈して実行</span>するのも、 DBMS の役割です（図 1 ）。 </p>
<figure><figcaption>図 1　DBMS がデータベースを管理する</figcaption><img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2022/09/image_database.jpg" loading="lazy"><br />
</figure>
<p>データベースには、いくつかの方式がありますが、現在の主流は、<span class="bold">関係データベース（ relational database ）</span>です。 Oracle Database 、 SQL Server 、 DB2 、 MySQL などの代表的な DBMS 製品が、関係データベースを採用しています。 </p>
<p>関係データベースの<span class="u">関係（ relation ）は、 2 次元の表を意味</span>します。 関係データベースは、表にデータを格納するのです。 </p>
<p>図 2 は、商品のデータを格納した「商品表」の例です。 データは、行単位に格納されます。 1 行のデータのまとまりを<span class="u">レコード</span>と呼びます。 データを表形式で取り扱えるようにするのも、 DBMS の役割のひとつです。 </p>
<figure style="position:relative;"><figcaption>図 2　関係データベースは、表にデータを格納する</figcaption><table class="responsive-width centered">
<caption>商品表</caption>
<thead class="blue lighten-5">
<tr style="border-top:1px solid rgba(0,0,0,.12);">
<th width="20%">商品 ID</th>
<th width="40%">商品名</th>
<th>定価</th>
</tr>
</thead>
<tbody>
<tr>
<td>S0001</td>
<td>りんご</td>
<td>100</td>
</tr>
<tr>
<td>S0002</td>
<td>バナナ</td>
<td>150</td>
</tr>
<tr>
<td>S0003</td>
<td>オレンジ</td>
<td>200</td>
</tr>
</tbody>
</table>
<p class="pad_00 mag_00"><span class="comment up">レコード</span><span class="comment middle">レコード</span><span class="comment down">レコード</span></p>
</figure>
<h2>データベース の主要な用語</h2>
<p>基本情報技術者試験のシラバス（情報処理技術者試験における知識・技能の細目）に示されたデータベースの分野は、</p>
<ul class="background c-round bold">
<li>データベース方式</li>
<li>データベース設計</li>
<li>データ操作</li>
<li>トランザクション処理</li>
<li>データベース応用</li>
</ul>
<p>という項目に分けられています。 </p>
<p>以下は、それぞれの項目における主要な用語です。 <span class="red-text">赤色で示した用語</span>は、後で紹介する過去問題で説明します。 </p>
<dl class="background c-round">
<dt class="chip">データベース方式</dt>
<dd><span class="red-text">関係データベース</span>、<span class="red-text">階層型データベース</span>、<span class="red-text">網型データベース</span>、<span class="red-text">オブジェクト指向データベース</span>、 <span class="red-text">XML データベース</span></dd>
<dt class="chip">データベース設計</dt>
<dd><span class="red-text">E-R 図</span>、<span class="red-text">エンティティ</span>、<span class="red-text">属性</span>、<span class="red-text">リレーションシップ</span>、<span class="red-text">カーディナリティ（ 1 対 1 、 1 対多、多対多）</span>、主キー、外部キー、第 1 正規化、第 2 正規化、第 3 正規化</dd>
<dt class="chip">データ操作</dt>
<dd class="blue-text"><i class="material-icons">campaign</i> データを操作する言語である SQL に関する項目です。 SQL に関しては、次回の連載で取り上げますので、今回は省略します。</dd>
<dt class="chip">トランザクション処理</dt>
<dd><span class="red-text">トランザクション</span>、<span class="red-text">同時実行制御（排他制御）</span>、<span class="red-text">共有ロック</span>、<span class="red-text">専有ロック</span>、ロック粒度、デッドロック、ログファイル、ロールフォワード、ロールバック</dd>
<dt class="chip">データベース応用</dt>
<dd>ビッグデータ、データマイニング、構造化データ、半構造化データ、非構造化データ</dd>
</dl>
<h2>データベース の過去問題</h2>
<p>データベースの分野の過去問題を 3 問ほど紹介しましょう。 </p>
<h3>データベースの種類と特徴</h3>
<p>最初は、データベースの種類と特徴に関する問題です。 選択肢ア、イ、ウ、エは、シラバスに示されたデータベース方式のいずれかを説明しています。 現在主流の DBMS 製品の多くは、関係データベースを採用していますが、他のデータベース方式も知っておきましょう。 </p>
<div class="card-panel mag_h40">
<span class="bold">問 29</span>　平成 25 年度 秋期</p>
<p>関係データベースのデータ構造の説明として，適切なものはどれか。 </p>
<dl class="inline">
<dt>ア</dt>
<dd>親レコードと子レコードをポインタで結合する。</dd>
<dt>イ</dt>
<dd>タグを用いてデータの構造と意味を表す。</dd>
<dt>ウ</dt>
<dd>データと手続を一体化（カプセル化）してもつ。</dd>
<dt>エ</dt>
<dd>データを 2 次元の表によって表現する。</dd>
</dl>
</div>
<dl class="background c-round">
<dt>選択肢ア</dt>
<dd><span class="u">階層型データベース</span>の説明です。 階層型データベースでは、レコードを親子関係で連結した階層構造にします。 <br /><span class="u">網型データベース</span>も、レコードとレコードを連結しますが、両者の違いは、レコード間に親子関係があるものが階層型データベースであり、親子関係がなく任意にレコードを連結したものが網型データベースです。</dd>
<dt>選択肢イ</dt>
<dd><span class="u">XML データベース</span>の説明です。 XML データベースは、タグを使ってデータに意味付けをして、さらにデータの構造も示します。</dd>
<dt>選択肢ウ</dt>
<dd><span class="u">オブジェクト指向データベース</span>の説明です。 オブジェクトとは、データと処理（選択肢には「手続き」と示されています）をまとめたものです。 オブジェクト指向データベースでは、オブジェクトをデータベースに格納します。</dd>
<dt>選択肢エ</dt>
<dd>関係データベースの説明です。 既に説明しましたが、関係データベースは、 2 次元の表にデータを格納します。</dd>
</dl>
<p>この問題は、関係データベースの説明を選ぶものなので、選択肢エが正解です。 </p>
<h3>E-R 図に関する問題</h3>
<p>次は、<span class="bold">E-R 図</span>に関する問題です。 E-R 図とは何か？ という内容になっています。 </p>
<div class="card-panel mag_h40">
<span class="bold">問 26</span>　平成 28 年度 秋期</p>
<p>E-R 図に関する記述のうち，適切なものはどれか。 </p>
<dl class="inline">
<dt>ア</dt>
<dd>関係データベースの表として実装することを前提に表現する。</dd>
<dt>イ</dt>
<dd>管理の対象をエンティティ及びエンティティ間のリレーションシップとして表現する。</dd>
<dt>ウ</dt>
<dd>データの生成から消滅に至るデータ操作を表現する。</dd>
<dt>エ</dt>
<dd>リレーションシップは、業務上の手順を表現する。</dd>
</dl>
</div>
<p>E-R 図（ Entity Relationship Diagram 、実体関連図）は、データベース設計でよく使われる図です。 E-R 図では、システム化の対象となる業務を、エンティティおよびエンティティ間のリレーションシップで表します。 </p>
<p>したがって、正解は、選択肢イです。 </p>
<p>&nbsp;</p>
<p>たとえば、商品販売という業務では、<br />
「商品 ID 」「商品名」「単価」<br />
などのデータが単独で取り扱われることはありません。 「商品 ID 」「商品名」「単価」をまとめた「商品」として取り扱われます。 </p>
<p><span class="u">この「商品」のように、いくつかのデータをまとめたものを<span class="bold">エンティティ</span></span>と呼び、<span class="u">エンティティにまとめられた個々のデータを<span class="bold">「属性」</span>と呼びます。 </p>
<p>さらに、商品販売の業務では、<span class="u">「顧客」が「商品」を買う、のようにエンティティとエンティティが関連を持ちます</span>。 この関連を<span class="bold">リレーションシップ</span>と呼びます。 </p>
<p>E-R 図は、その名前が示す通り、<span class="u bold">エンティティとリレーションシップを表す図</span>です。 </p>
<p>&nbsp;</p>
<p>図 3 は、商品販売の業務の E-R 図の例です。 </p>
<figure><figcaption>図 3　商品販売の業務の E-R 図の例</figcaption><img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2022/09/entity_relationship.jpg" loading="lazy"><br />
</figure>
<p>2 段に区切られた四角形でエンティティを表し、上段にエンティティの名前を記述し、下段に属性を記述します。<br />
四角形をつなぐ線でリレーションシップを表し、線の両端に<span class="bold">カーディナリティ（多重度）</span>を記述します。 </p>
<p>カーディナリティは、エンティティどうしの関連が、</p>
<ul class="background c-round">
<li>1 対 1</li>
<li>1 対多</li>
<li>多対多</li>
</ul>
<p>のいずれであるかを示すものです。 ここでは、矢印なしの側が 1 を、矢印ありの側が多を意味しています（他の表記方法を使う場合もあります）。 </p>
<div class="divider mag_h30"></div>
<div class="chip">カーディナリティの解説</div>
<p>「顧客」エンティティと「売上」エンティティのカーディナリティは、 <span class="bold">1 対多</span>です。 <span class="u">1 人の顧客は、複数の売上に関連する</span>からです。たとえば、田中さんという顧客が、 3 回の買い物をしたら、売上（売上伝票だと考えてください）が 3 つ（多数）になります。</p>
<p>「商品」エンティティと「売上」エンティティのカーディナリティも、 1 対多です。 1 つの商品も、複数の売上に関連するからです。 たとえば、リンゴという商品が、 5 回売れたら、売上が 5 つ（多数）になります。</p>
<p><span class="u"><span class="bold">1 対 1</span> は、「夫」と「妻」の関連のように、どちらからたどっても相手が 1 つだけになる</span>場合です。</p>
<p><span class="u">間に「売上」を入れずに、「顧客」と「商品」を直接つなぐと、<span class="bold">多対多</span></span>になります。 田中さんは、リンゴとバナナとミカンを買い、リンゴは、田中さんと鈴木さんと山田さんに売れる、のように、どちらからたどっても相手が多数になるからです。</p>
<div class="divider mag_h30"></div>
<p>E-R 図で設計されたデータベースを、関係データベースとして実装するときには、<span class="u">エンティティが表</span>になり、<span class="u">エンティティの属性が表の列</span>になります。 </p>
<h3>同時実行制御に関する問題</h3>
<p>最後は、同時実行制御に関する問題です。 </p>
<p><span class="u">クライアントがデータベースに行う操作のまとまりを<span class="bold">トランザクション</span></span>と呼びます。 DBMS には、複数のクライアントのトランザクションの競合を管理する機能があり、これを<span class="u">同時実行制御（排他制御）</span>と呼びます。 </p>
<p>同時実行制御は、<span class="bold">ロック</span>によって実現されます。 これは、<span class="u">あるトランザクションの実行中に、他のトランザクションが同じデータを操作できないように鍵（ロック）をかけるイメージ</span>です。 </p>
<p>問題文に示された資源とは、ロックの対象となるデータのことです。 ロックを獲得するとは、データにロックをかけるという意味です。 </p>
<div class="card-panel mag_h40">
<span class="bold">問 29</span>　平成 27 年度 秋期</p>
<p>ロックの両立性に関する記述のうち，適切なものはどれか。 </p>
<dl class="inline">
<dt>ア</dt>
<dd>トランザクション T<sub>1</sub> が共有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は共有ロックと専有ロックのどちらも獲得することができる。</dd>
<dt>イ</dt>
<dd>トランザクション T<sub>1</sub> が共有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は共有ロックを獲得することはできるが，専有ロックを獲得することはできない。</dd>
<dt>ウ</dt>
<dd>トランザクション T<sub>1</sub> が専有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は専有ロックと共有ロックのどちらも獲得することができる。</dd>
<dt>エ</dt>
<dd>トランザクション T<sub>1</sub> が専有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は専有ロックを獲得することはできるが，共有ロックを獲得することはできない。</dd>
</dl>
</div>
<p>データベースの操作は、</p>
<ul class="background c-round bold">
<li>参照（データの検索）</li>
<li>更新（データの新規登録、書き換え、削除）</li>
</ul>
<p>に大きく分けられます。 これに合わせて、ロックには、<span class="bold">共有ロックと<span class="bold">専有ロック</span>があります。 </p>
<dl class="background c-round">
<dt class="bold">共有ロック</dt>
<dd>データを参照する場合は、共有ロックをかけます。 共有ロックは、データを見ているだけなので、他のトランザクションも同じデータを見ること（共有ロックをかけること）ができます。 <br />ただし、<span class="u">同じデータを更新すること（専有ロックをかけること）はできません</span>。</dd>
<dt class="bold">専有ロック</dt>
<dd>データを更新しているので、他のトランザクションは同じデータを見ること（共有ロックをかけること）も、更新すること（専有ロックをかけること）もできません。</dd>
</dl>
<p>したがって、正解は、選択肢イです。 </p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>今回は「データベース」その 1 として「データベース」が必要な理由、仕組み、主要な用語、および過去問題を紹介しました。 </p>
<p>次回は、「データベース」その 2 として「 SQL 」の分野を取り上げます。 </p>
<p>それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/learn_tech/db4beginners/">IT初心者のための基本情報ではじめる データベース 入門 ～データベース分野 1</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>こもも さんの学習ログ 2021-06-07 ｜みんなの基本情報学習ログ</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/study_logs/komomonchan_20210607/</link>
		<pubDate>Mon, 14 Jun 2021 01:16:27 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[勉強方法]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=study_logs&#038;p=5456</guid>
		<description><![CDATA[<p>みんなの基本情報学習ログは「受験者 1 人 1 人が勉強していることを毎週毎週 SNS を使って教えてもらおう」というコーナーです。 学習モニターの方にご協力いただき、勉強していることを 「今週の Todo 」 「今週よ [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/study_logs/komomonchan_20210607/">こもも さんの学習ログ 2021-06-07 ｜みんなの基本情報学習ログ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="background c-round">
みんなの基本情報学習ログは「受験者 1 人 1 人が勉強していることを毎週毎週 SNS を使って教えてもらおう」というコーナーです。</p>
<p>学習モニターの方にご協力いただき、勉強していることを</p>
<ul>
<li>「今週の Todo 」</li>
<li>「今週よかったこと」</li>
<li>「今週の学習で難しかったこと」</li>
</ul>
<p>に分けて、毎週ツイートいただいています。
</p></div>
<div class="divider mag_tp60 mag_bt30">
<div class="chip">学習モニターの紹介</div>
</div>
<p><a href="https://twitter.com/komomonchan" rel="noopener" target="_blank"></p>
<div class="row valign-wrapper direction-column-on-small mag_lt00 mag_rt00 mag_bt00 pad_w10">
<div class="col m3 s12 center"><img class="circle avatar" src="../../wp-content/uploads/2021/05/komomonchan_icon.jpg" loading="lazy"></div>
<div class="col m9 s12 pad_15 blue-grey-text text-darken-2">
<p><span class="personal-name">こもも</span>さん</p>
<p>      社会人 / 学生 (通信制) 情報系専攻中 / 文系出身 / 若手 / IT を初めて勉強中 / 基本情報も初めて勉強中 / 2021 上期試験 受験予定
    </p></div>
</p></div>
<p></a></p>
<div class="divider mag_bt50"></div>
<style>.divider .chip{font-size:.8em;position:absolute;top:-1.5em}.personal-name{font-size:1.1em;font-weight:700;margin-right:.5em;color:#263238;}.divider{overflow:unset;position:relative}.tweet-container{margin:2em auto;display:flex;flex-direction:column;align-items:center;}</style>
<h2>2021-06-07 ～ の学習記録</h2>
<div class="tweet-container">
<blockquote class="twitter-tweet">
<p lang="ja" dir="ltr">今週のTodo<br />・アルゴリズムは福嶋先生の簡単って書いてある過去問を解く<br />・データベースの過去問<br />・情報セキュリティはアドレス系が苦手なので覚える<a href="https://twitter.com/hashtag/%E3%82%8F%E3%81%9F%E3%81%97%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E5%AD%A6%E7%BF%92%E8%A8%98%E9%8C%B2?src=hash&amp;ref_src=twsrc%5Etfw">#わたしの基本情報学習記録</a>　<a href="https://twitter.com/hashtag/FE%E5%8F%97%E9%A8%93%E3%83%8A%E3%83%93?src=hash&amp;ref_src=twsrc%5Etfw">#FE受験ナビ</a></p>
<p>&mdash; こもも (@komomonchan) <a href="https://twitter.com/komomonchan/status/1402076249703342083?ref_src=twsrc%5Etfw">June 8, 2021</a></p></blockquote>
<p> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p>
<blockquote class="twitter-tweet">
<p lang="ja" dir="ltr">今週のうまくいったこと<br />・アルゴリズム自分で解けるところもあって嬉しい！<br />問題文分からなくてもプログラムを見れば分かることもある<br />・データベースも結構解けるようになった気がする？6割くらい<br />もう少し理解を深めよう<a href="https://twitter.com/hashtag/%E3%82%8F%E3%81%9F%E3%81%97%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E5%AD%A6%E7%BF%92%E8%A8%98%E9%8C%B2?src=hash&amp;ref_src=twsrc%5Etfw">#わたしの基本情報学習記録</a>　<a href="https://twitter.com/hashtag/FE%E5%8F%97%E9%A8%93%E3%83%8A%E3%83%93?src=hash&amp;ref_src=twsrc%5Etfw">#FE受験ナビ</a></p>
<p>&mdash; こもも (@komomonchan) <a href="https://twitter.com/komomonchan/status/1404084993702318083?ref_src=twsrc%5Etfw">June 13, 2021</a></p></blockquote>
<p> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </p>
<blockquote class="twitter-tweet">
<p lang="ja" dir="ltr">今週の学習で難しかったこと<br />・アルゴリズム解けるやつも出てきたけど、文章が分かりにくくて解けないって諦めちゃったのはもったいなかったかな、1回プログラム見た方が良かったかも<br />・データベースは沢山書いてあるとどうなるのか分からなくなってくる<a href="https://twitter.com/hashtag/%E3%82%8F%E3%81%9F%E3%81%97%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E5%AD%A6%E7%BF%92%E8%A8%98%E9%8C%B2?src=hash&amp;ref_src=twsrc%5Etfw">#わたしの基本情報学習記録</a>　<a href="https://twitter.com/hashtag/FE%E5%8F%97%E9%A8%93%E3%83%8A%E3%83%93?src=hash&amp;ref_src=twsrc%5Etfw">#FE受験ナビ</a></p>
<p>&mdash; こもも (@komomonchan) <a href="https://twitter.com/komomonchan/status/1404085649552986113?ref_src=twsrc%5Etfw">June 13, 2021</a></p></blockquote>
<p> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div>
<p>ご協力、ありがとうございました！</p>
<p>勉強の進捗がうまく生まれますように!!</p>
<p>ご覧になられている読者の方もぜひぜひ「いいね」などでリアクションして応援くださいませ!!</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/study_logs/komomonchan_20210607/">こもも さんの学習ログ 2021-06-07 ｜みんなの基本情報学習ログ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>基本情報でわかる トランザクション</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/transaction/</link>
		<pubDate>Wed, 24 Feb 2021 04:40:44 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[データベース]]></category>
		<category><![CDATA[トランザクション]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=5157</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/transaction/">基本情報でわかる トランザクション</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。</p>
<p>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 <span class="bold">トランザクションにおける共有ロックと専有ロック</span> です。</p>
<style>dl.inline dd{margin-left:2em;}th{text-align:center;}</style>
<h2>トランザクションと共有ロック・専有ロックとは？</h2>
<p>データベースに対するひとまとまりの処理を <span class="bold">トラザクション</span> と呼びます。</p>
<p>多くの場合に、データベースは、複数のユーザーから利用されるサーバーになっているので、複数のトランザクションを同時に実行することがあります。もしも、同じデータを処理する複数のトランザクションを同時に実行するとどうなるでしょう。</p>
<p>あるトランザクションの処理が完了していない中途半端な状態のデータを、他のトランザクションが処理することになるので、データの内容に矛盾が生じてしまうかもしれません。そこで、データベースには、他のトランザクションに実行を待たせる機能が用意されていて、これを「ロック（ lock = 錠前）」と呼びます。</p>
<p>&nbsp;</p>
<p>ロックには、 <span class="bold">共有ロック</span> と <span class="bold">専有ロック</span> という種類があります。</p>
<ul class="background c-round">
<li>データを閲覧する（データの内容を変化させない）トランザクションは、共有ロックをかけてからデータを処理します。</li>
<li>データを更新する（データの内容を変化させる）トランザクションは、専有ロックをかけてからデータを処理します。</li>
</ul>
<p>あるトランザクションによって共有ロックがかけられたデータには、他のトランザクションが共有ロックをかけることができますが、専有ロックをかけることはできません。</p>
<p>これは、<span class="u">「誰かが見ているデータは、他の人が見ても構わないが、他の人が書き換えてはダメである」</span>ということです。複数のトランザクションにデータが共有されるので、共有ロックと呼ぶのです。</p>
<p>&nbsp;</p>
<p>あるトランザクションによって専有ロックがかけられたデータは、他のトランザクションが共有ロックをかけることも専有ロックをかけることもできません。</p>
<p>これは、<span class="u">「誰かが書き換え中のデータは、他の人が見ても書き換えてもダメである」</span>ということです。ひとつのトランザクションにデータが専有されるので、専有ロックと呼ぶのです。</p>
<h2>共有ロックと専有ロックに関する午前問題</h2>
<p>それでは、共有ロックと専有ロックに関する午前問題を解いてみましょう。以下に、問題を示します。</p>
<p>問題文の中にある「ロックの両立性」とは、「同時に両方のロックをかけられるかどうか」ということです。<br />
「ロックを獲得する」とは、「トラザクションが要求したロックが、データベースによって受け付けられる」ということです。<br />
「資源」とは、「処理の対象となるデータ」のことです。</p>
<div class="card-panel mag_h30">
問 29　平成 27 年度 秋期 午前</p>
<p>ロックの両立性に関する記述のうち，適切なものはどれか。</p>
<dl class="inline">
<dt>ア</dt>
<dd>トランザクション T<sub>1</sub> が共有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は共有ロックと専有ロックのどちらも獲得することができる。</dd>
<dt>イ</dt>
<dd>トランザクション T<sub>1</sub> が共有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は共有ロックを獲得することはできるが，専有ロックを獲得することはできない。</dd>
<dt>ウ</dt>
<dd>トランザクション T<sub>1</sub> が専有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は専有ロックと共有ロックのどちらも獲得することができる。</dd>
<dt>エ</dt>
<dd>トランザクション T<sub>1</sub> が専有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は専有ロックを獲得することはできるが、共有ロックを獲得することはできない。</dd>
</dl>
</div>
<p>トランザクション T<sub>1</sub> が共有ロックをかけている場合には、トランザクション T<sub>2</sub> は、共有ロックをかけられますが、専有ロックをかけられません。<br />
トランザクション T<sub>1</sub> が専有ロックをかけている場合は、トランザクション T<sub>2</sub> は、共有ロックも専有ロックもかけられません。</p>
<p>したがって、選択肢イが適切です。</p>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>イ</p>
<h2>共有ロックと専有ロックに関する午後問題（ロックの必要性）</h2>
<p>今度は、共有ロックと専有ロックに関する午後問題です。以下に問題を示します。</p>
<p>この問題を通して、ロックの必要性や注意点を理解できます。設問ごとに区切って説明しましょう。なお、この問題では、「専有ロック」を「占有ロック」と表現しているので、これ以降では、「専有ロック」を「占有ロック」と呼びます。</p>
<div class="card-panel mag_h30">
問 3　平成 23 年度 特別 午後（一部抜粋）</p>
<p>　データベースのトランザクション管理に関する次の記述を読んで，設問 1 ～ 4 に答えよ。</p>
<div class="mag_lt10">　個人向けに，画材をインターネット販売する会社が運営する Web サイトがある。 この Web サイトが在庫管理に利用しているデータベースでは，絵の具の在庫数は色別に個々のデータとして管理されており，処理に応じて次の 3 種類のトランザクションが生成される。</p>
<dl class="inline">
<dt>(1)</dt>
<dd>1 回の商品注文に対して，一つの出荷トランザクションが生成される。</dd>
<dt>(2)</dt>
<dd>1 回の商品入荷に対して，一つの入荷トランザクションが生成される。</dd>
<dt>(3)</dt>
<dd>1 回の在庫照会に対して，一つの照会トランザクションが生成される。</dd>
</dl>
<p>　なお，一つのトランザクションで，複数の色の絵の具を処理することができる。
</p></div>
<p><span class="bold">設問 1</span></p>
<div class="mag_lt10">　ACID 特性に関する次の記述中<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<p>　ACID 特性とは，データベースの一貫性を保証するために必要な特性で，原子性，一貫性，独立性，耐久性の四つがある。このうち，一貫性や独立性を保証するためにトランザクション管理では排他制御が必要となる。例えば，白絵の具の在庫数が 50 だった場合，表 1 に示すトランザクション T1 と T2 が同時に実行されたとき，排他制御を行わないと実行後の在庫数は 55 とならず，在庫数が<span class="blank">a</span>又は<span class="blank">b</span>となってしまう可能性がある。</p>
<p>　なお，各トランザクションは，図 1 の (1) ~ (3) の順で在庫数データを処理する。
</p></div>
<table class="mag_h30 responsive-width centered">
<caption>表 1 トランザクション T1，T2 の処理内容</caption>
<thead>
<tr>
<th>トランザクション</th>
<th>処理内容</th>
</thead>
<tbody>
<tr>
<td>出荷トランザクション T1</td>
<td>白絵の具 5 本の出荷</td>
</tr>
<tr>
<td>入荷トランザクション T2</td>
<td>白絵の具 10 本の入荷</td>
</tr>
</tbody>
</table>
<div class="row">
<div class="col m6 s12">
<ol class="background c-round">
トランザクション T1 の処理順序</p>
<li>白絵の具の在庫数データを読み込む。</li>
<li>白絵の具の在庫数データ = 白絵の具の在庫数データ &#8211; 5</li>
<li>白絵の具の在庫数データを書き込む。</li>
</ol>
</div>
<div class="col m6 s12">
<ol class="background c-round">
トランザクション T2 の処理順序</p>
<li>白絵の具の在庫数データを読み込む。</li>
<li>白絵の具の在庫数データ = 白絵の具の在庫数データ + 10</li>
<li>白絵の具の在庫数データを書き込む。</li>
</ol>
</div>
<p class="center grey-text">図 1 トランザクション T1, T2 の処理順序</p>
</div>
<p>解答群<br />
ア　40　　イ　45　　ウ　50　　<br class="hide-on-med-and-up">エ　60　　オ　65
</div>
<p>設問 1 は、「ロックが必要な理由を知っておきましょう」という問題です。</p>
<p>白絵の具の在庫数という同じデータを、トランザクション T1 とトランザクション T2 が同時に処理するとどうなるでしょう。</p>
<p>&nbsp;</p>
<p>もしも、トランザクション T1 の 3. の処理が行われる前に、トランザクション T2 の 1. の処理が行われたら、</p>
<ol class="background c-round">
<li>トランザクション T1 の 2. の処理（在庫数を &#8211; 5 する処理）が失われる</li>
<li>トランザクション T2 の 2. の処理（在庫数を + 10 する処理）だけが反映</li>
<li>在庫数は、もとの 50 を ＋ 10 した 60</li>
</ol>
<p>となります。</p>
<p>逆に、もしも、トランザクション T2 の 3. の処理が行われる前に、トランザクション T1 の 1. の処理が行われたら、</p>
<ol class="background c-round">
<li>トランザクション T2 の 2. の処理（在庫数を + 10 する処理）が失われる</li>
<li>トランザクション T1 の 2. の処理（在庫数を &#8211; 5 する処理）だけが反映</li>
<li>在庫数は、もとの 50 を &#8211; 5 した 45</li>
</ol>
<p>となります。</p>
<p>このような矛盾を生じさせないために、ロックが必要なのです。 45 または 60 になることがあるのですから、正解は選択肢イとエ（順不同）です。</p>
<h2>共有ロックと専有ロックに関する午後問題（ロックで生じる待ち状態）</h2>
<div class="card-panel mag_h30">
<span class="bold">設問 2</span></p>
<div class="mag_lt10">　入荷トランザクション及び出荷トランザクションを処理する場合は対象データを占有ロックし，照会トランザクションを処理する場合は共有ロックする。</p>
<p>　なお，このデータベースを管理する DBMS では，あるトランザクションが共有ロックしているデータを，ほかのトランザクションからロックする場合，共有ロックの要求は成功するが，占有ロックの要求は共有ロックが解除されるまで待ち状態となる。</p>
<p>　表 2 に示すトランザクション T3 〜 T6 を，図 2 に示すとおりに実行し，ロックを要求した場合，それぞれのトランザクションの状態について正しい説明を，解答群の中から選べ。
</p></div>
<table class="mag_h30 striped responsive-width centered">
<caption>表2 トランザクション T3 ~ T6 の処理内容</caption>
<thead>
<tr>
<th>トランザクション</th>
<th>処理内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>照会トランザクション T3</td>
<td>白絵の具の在庫数照会</td>
</tr>
<tr>
<td>入荷トランザクション T4</td>
<td>白絵の具 10 本の入荷</td>
</tr>
<tr>
<td>出荷トランザクション T5</td>
<td>白絵の具 5 本の出荷</td>
</tr>
<tr>
<td>照会トランザクション T6</td>
<td>白絵の具の在庫数照会</td>
</tr>
</tbody>
</table>
<figure class="mag_h30">
<img class="materialboxed z-depth-5 responsive-width" data-caption="図2　トランザクションT3～T6の実行例" src="../../wp-content/uploads/2021/02/q3_h23h_figure.jpg" loading="lazy" width="763" height="332"><figcaption>図 2　トランザクション T3 ～ T6 の実行例</figcaption></figure>
<p>解答群</p>
<dl class="inline">
<dt>ア</dt>
<dd>T4， T5， T6 とも待ち状態となる。</dd>
<dt>イ</dt>
<dd>T5， T6 とも待ち状態とならない。</dd>
<dt>ウ</dt>
<dd>T4， T5 は待ち状態となるが， T6 は待ち状態とならない。 </dd>
<dt>エ</dt>
<dd>T4 は待ち状態となるが， T5， T6 は待ち状態とならない。 </dd>
<dt>オ</dt>
<dd>T6 は待ち状態となるが， T4， T5 は待ち状態とならない。</dd>
</dl>
</div>
<p>設問 2 は、「ロックをかけると、他のトランザクションが待ち状態になる場合があることを知っておきましょう」という問題です。</p>
<p><span class="u">待ち状態になるかどうかは、共有ロックと占有ロックのどちらをかけたかで異なります。</span></p>
<ul class="background c-round">
<li>あるトランザクションが共有ロックをかけた場合には、他のトランザクションは共有ロックをかけるなら待たされませんが、占有ロックをかけるなら待たされます</li>
<li>あるトランザクションが占有ロックをかけた場合には、他のトランザクションは共有ロックでも占有ロックでも待たされます</li>
</ul>
<p>トランザクション T3, T4, T5, T6 は、どれも白絵の具の在庫数という同じデータを処理します。</p>
<p>T3 と T6 は照会（見るだけ）なので共有ロックをかけます。<br />
T4 と T5 は入荷と出荷（どちらも更新）なので占有ロックをかけます。</p>
<p>したがって、待ち状態になるかどうかは、以下のようになります。</p>
<figure class="mag_h30">
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/02/comment_q3.gif" loading="lazy" width="763" height="332"><br />
</figure>
<p>T3 が共有ロックをかけた後なので、占有ロックの T4 と T5 は待ち状態になりますが、共有ロックの T6 は待ち状態になりません。したがって、選択肢ウが正解です。</p>
<h2>共有ロックと専有ロックに関する午後問題（ロックの注意点その 1 ～ 未解放）</h2>
<div class="card-panel mag_h30">
<span class="bold">設問 3</span></p>
<div class="mag_lt10">　出荷トランザクション T7 の処理内容を表 3 に示す。次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。 なお，トランザクション T7 は、図 3 の 1 ~ 4 の順で在庫数データを処理する。
</div>
<table class="mag_h30 responsive-width centered">
<caption>表 3 トランザクション T7 の処理内容</caption>
<thead>
<tr>
<th>トランザクション</th>
<th>処理内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>出荷トランザクション T7</td>
<td>白絵の具 5 本と赤絵の具 3 本の出荷</td>
</tr>
</table>
<ol class="background c-round">
<span class="bold"><i class="material-icons">arrow_back</i>α</span></p>
<li>白絵の具の在庫数データをロックする。</li>
<li>白絵の具の在庫数データを読み込む。</li>
<p><span class="bold"><i class="material-icons">arrow_back</i>β</span></p>
<li>赤絵の具の在庫数データを読み込む。</li>
<p><span class="bold"><i class="material-icons">arrow_back</i>γ</span></p>
<li>白絵の具の在庫数データ = 白絵の具の在庫数データ &#8211; 5</li>
<li>白絵の具の在庫数データを書き込む。</li>
<p><span class="bold"><i class="material-icons">arrow_back</i>δ</span></p>
<li>赤絵の具の在庫数データ = 赤絵の具の在庫数データ &#8211; 3</li>
<li>赤絵の具の在庫数データを書き込む。</li>
<p><span class="bold"><i class="material-icons">arrow_back</i>ε</span></p>
<li>赤絵の具の在庫数データのロックを解除する。</li>
</ol>
<p class="grey-text center">図 3　ランザクション T7 の処理順序</p>
<div class="mag_lt10">
　データをロックしている時間を最も短くするためには， &#8220;赤絵の具の在庫数データをロックする。&#8221; を挿入すべき適切な位置は<span class="blank">c</span>で， &#8220;白絵の具の在庫数データのロックを解除する。&#8221; を挿入すべき適切な位置は<span class="blank">d</span>である。</p>
<p>　なお，ほかのトランザクションとのデッドロックの発生に対する考慮は不要とする。
</p></div>
<p>解答群</p>
<p>ア　α　　イ　β　　ウ　γ　　エ　δ　　オ　ε</dl>
</div>
<p>設問 3 は、<span class="bold">「ロックをかけると他のトランザクションが待たされる場合があるのだから、データの処理が完了したら、すぐにロックを解除しましょう」</span>という問題です。</p>
<p>赤絵の具の在庫データは、 3. で読み込んでいるので、その直前の β の位置でロックをかけるべきです。したがって、空欄 c の正解は、選択肢イです。</p>
<p>白絵の具の在庫データの処理は、 5. で完了しているので、その直後の δ の位置でロックを解除するべきです。したがって、空欄 d の正解は、選択肢エです。</p>
<h2>共有ロックと専有ロックに関する午後問題（ロックの注意点その 2 ～ デッドロック）</h2>
<div class="card-panel mag_h30">
<span class="bold">設問 4</span></p>
<div class="mag_lt10">　表4 に示すトランザクション T8 ～ T11 のうち，解答群の組合せの中から，同時に処理された場合にデッドロックが発生する可能性のある組合せを選べ。</p>
<p>　なお、トランザクション T8 〜 T11 では，各絵の具の在庫数データをどのような順番で処理するかは、分からないものとする。
</p></div>
<table class="striped mag_h30 responsive-width centered">
<caption>表 4　トランザクション T8 〜 T11 の処理内容</caption>
<thead>
<tr>
<th>トランザクション</th>
<th>処理内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>出荷トランザクション T8</td>
<td>白絵の具 5 本と赤絵の具 5 本の出荷</td>
</tr>
<tr>
<td>入荷トランザクション T9</td>
<td>赤絵の具 10 本と絵の具 10 本の入荷</td>
</tr>
<tr>
<td>出荷トランザクション T10</td>
<td>青絵の具 2 本と白絵の具 5 本の出荷</td>
</tr>
<tr>
<td>入荷トランザクション T11</td>
<td>青絵の具 10 本と黒絵の具 10 本の入荷</td>
</tr>
<tbody>
</table>
<p>解答群</p>
<p>ア　T8, T9　　<br class="hide-on-med-and-up">イ　T8, T9, T10　　<br class="hide-on-med-and-up">ウ　T9, T10, T11<br />
エ　T10, T11
</div>
<p>設問 4 は、「ロックをかける順序によっては、<span class="bold">デッドロック</span>になってしまう場合があるので、注意しましょう」という問題です。デッドロックとは、複数のトランザクションが、すべて待ち状態になり、処理が先に進めなくなってしまうことです。</p>
<p>&nbsp;</p>
<p>ロックと待ち状態に注目して、選択肢を見てみましょう。以下は、選択肢アの T8 と T9 を同時に実行した例です。 T8 と T9 の両方が待ち状態になることはないので、デッドロックは発生しません。</p>
<ol class="background c-round">
<li>T8 が白絵の具をロックする</li>
<li>T9 が赤絵の具をロックする</li>
<li>T8 が赤絵の具をロックしようとするが、 2. でロックされているので、待ち状態になる</li>
<li>T9 が青絵の具をロックする</li>
<li>T9 が赤絵の具のロックを解除する</li>
<li>T8 が赤絵の具をロックする</li>
</ol>
<p>以下は、選択肢イの T8, T9, T10 を同時に実行した例です。T8、T9、T10 が、すべて待ち状態になり、処理が先に進めなくなっています。これが、デッドロックです。したがって、選択肢イが正解です。説明が長くなるので、選択肢ウとエの例は示しませんが、どちらもデッドロックは発生しません。</p>
<ol class="background c-round">
<li>T8 が白絵の具をロックする</li>
<li>T9 が赤絵の具をロックする</li>
<li>T10 が青絵の具をロックする</li>
<li>T8 が赤絵の具をロックしようとするが、 2. でロックされているので、待ち状態になる</li>
<li>T9 が青絵の具をロックしようとするが、 3. でロックされているので、待ち状態になる</li>
<li>T10 が白絵の具をロックしようとするが、 1. でロックされているので、待ち状態になる</li>
</ol>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 1　a &#8211; イ, b &#8211; エ（順不同）　設問 2　ウ　設問 3　c &#8211; イ, d &#8211; エ　設問 4　イ</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>午前問題で共有ロックと専有ロックという言葉の意味がわかり、午後問題でロックの必要性や注意点などを理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/transaction/">基本情報でわかる トランザクション</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>基本情報でわかる正規化「関係データベースの正規化は、従属性の矢印を引けばわかる」</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/normalization/</link>
		<pubDate>Wed, 16 Sep 2020 11:09:17 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[データベース]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>
		<category><![CDATA[正規化]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=4623</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/normalization/">基本情報でわかる正規化「関係データベースの正規化は、従属性の矢印を引けばわかる」</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。今回のテーマは、関係データベースの正規化です。</p>
<style>.border{border:.2em solid #2196f3;padding:.25em 2em;margin:auto .5em}td{text-align:center;border:1px solid rgba(0,0,0,.12)}.key{border-bottom:.1em solid #000}.width_50{width:50%}.width_50 td{width:calc(50% / 2)}.width_75{width:75%}.width_75 td{width:calc(75% / 3)}.width_100 td{width:calc(100% / 4)}.width_125 td{width:calc(100% / 5)}.table-container{position:relative}.arrow{position:absolute;border-left:.2em #2196f3 solid;border-top:.2em #2196f3 solid;border-right:.2em #2196f3 solid}.arrow.no_after::after{content:none}.arrow::after{content:"";position:absolute;bottom:0;right:-1.075em;border-top:1em solid #2196f3;border-left:1em solid transparent;border-right:1em solid transparent}.arrow.bottom{border-top:unset;border-left:.2em #f44336 solid;border-bottom:.2em #f44336 solid;border-right:.2em #f44336 solid}.arrow.bottom::after{bottom:unset;top:0;border-top:unset;border-bottom:1em solid #f44336;border-left:1em solid transparent;border-right:1em solid transparent}.background>dt{font-weight:700}dl.inline dd{margin-left:2em}@media screen and (max-width:600px){dd{margin-left:1em}}</style>
<h2>関係データベースの正規化とは？</h2>
<p>はじめに、関係データベースの正規化とは何かを説明しましょう。教科書通りに堅苦しく説明すると、以下のようになります。</p>
<div class="card-panel mag_h30 blue-grey-text">
関係データベースの表を、無駄や矛盾が生じない構造にすることを「正規化」と呼ぶ。正規化のレベルには、「非正規形」、「第 1 正規形」、「第 2 正規形」、「第 3 正規形」という分類がある。項目に繰り返しがある表は、非正規形である。「繰り返し」を排除した表は、第 1 正規形である。第 1 正規形の条件を満たし、さらに「部分従属性」を排除した表は、第 2 正規形である。第 2 正規形の条件を満たし、さらに「推移従属性」を排除した表は、第 3 正規形である
</div>
<p>この説明では、「覚えることが多すぎてよくわからない！」と感じるでしょう。よい方法があります。</p>
<p>なんやかんや言っても、<span class="u">第 3 正規形が無駄や矛盾を排除した完成形</span>なのですから、まず <span class="bold">第 3 正規形</span> とは何かをしっかり理解すればよいのです。</p>
<p>そうすれば、「非正規形」「第 1 正規形」「第 2 正規形」や、「繰り返し」「部分従属性」「推移従属性」もすんなり理解できます。</p>
<p>&nbsp;</p>
<p>第 3 正規形とは何かを説明しましょう。</p>
<p>関係データベースでは、<span class="u">表に必ず主キー（他のレコードと重複しないユニークな項目）がなければなりません。</span>主キーがないとレコードを区別できないからです。</p>
<p>そして、これが大事なのですが、表には、主キーに従属する項目だけがあるようにします。主キーに従属するとは、主キーによって特定できる、という意味です。</p>
<p>この「主キーに従属する項目だけがある」という表が、無駄や矛盾が生じない第 3 正規形なのです。</p>
<p>&nbsp;</p>
<p>以下に、第 3 正規形の表の例を示します。これは、従業員の情報を格納した従業員表です。「主キーに従属する項目だけがある」ことを、主キーから他の項目に矢印を引いて確認してみましょう。</p>
<p>下線を付けた「従業員番号」が主キーです。</p>
<div class="table-container">
<table class="mag_tp40 width_100">
<caption class="center grey-text" style="caption-side:bottom;">図　これが第 3 正規形の表だ！</caption>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
<td>性別</td>
<td>生年月日</td>
</tr>
</table>
<p><span class="arrow" style="top:1em;left:12.5%;padding:1em 12.5%;"></span><span class="arrow" style="top:1em;left:12.5%;padding:1em 25%;"></span><span class="arrow" style="top:1em;left:12.5%;padding:1em 37.5%;"></span>
</div>
<p>「従業員番号」によって→「従業員氏名」が特定できます。<br />
「従業員番号」によって→「性別」が特定できます。<br />
「従業員番号」によって→「生年月日」が特定できます。</p>
<p>主キーから他のすべての項目に従属性の矢印が引けました。これが、第 3 正規形です。</p>
<p>もしも、よけいな矢印が引けたり、矢印を引けない項目があったりしたら、第 3 正規形ではありません。</p>
<h2>関係データベースの正規化に関する午前問題</h2>
<p>それでは、関係データベースの正規化に関する午前問題を見てみましょう。</p>
<p>以下は、正規化されていない従業員表（先ほど示した例とは、表の項目に違いがあります）を、第 3 正規形にしたものを選ぶ問題です。難しく考える必要はありません。主キーから他のすべての項目に従属性の矢印が引ければ、第 3 正規形です。</p>
<div class="background c-round small-text hide-on-med-and-up mag_h10"><i class="material-icons light-blue-text mag_rt05">info</i>表は横スクロールすると全データをご覧になれます</div>
<div class="card-panel mag_h30">
問 32　平成 21 年度 春期 午前</p>
<p>&#8220;従業員&#8221; 表を第3正規形にしたものはどれか。ここで、下線部は主キーを表す。</p>
<p>従業員 (従業員番号, 従業員氏名, {技能コード, 技能名, 技能経験年数})</p>
<p style="text-align: right;"><span class="grey-text">( { } は繰返しを表す)</span></p>
<p>ア</p>
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
</tr>
</tbody>
</table>
<table class="mag_h10 width_75">
<tbody>
<tr>
<td><span class="key">技能コード</span></td>
<td>技能名</td>
<td>技能経験年数</td>
</tr>
</tbody>
</table>
<p>イ</p>
<table class="mag_h10 width_100">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
<td><span class="key">技能コード</span></td>
<td>技能経験年数</td>
</tr>
</tbody>
</table>
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">技能コード</span></td>
<td>技能名</td>
</tr>
</tbody>
</table>
<p>ウ</p>
<table class="mag_h10 width_75">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td><span class="key">技能コード</span></td>
<td>技能経験年数</td>
</tr>
</tbody>
</table>
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
</tr>
</tbody>
</table>
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">技能コード</span></td>
<td>技能名</td>
</tr>
</tbody>
</table>
<p>エ</p>
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td><span class="key">技能コード</span></td>
</tr>
</tbody>
</table>
<table class="mag_h10 width_75">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
<td>技能経験年数</td>
</tr>
</tbody>
</table>
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">技能コード</span></td>
<td>技能名</td>
</tr>
</tbody>
</table>
</div>
<p>選択肢アは、以下のようになります。</p>
<div class="table-container pad_tp30">
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
</tr>
</tbody>
</table>
<p><span class="arrow" style="top:.5em;left:12.5%;padding:1em 12.5%;"></span>
</div>
<div class="table-container pad_tp30">
<table class="mag_h10 width_75">
<tbody>
<tr>
<td><span class="key">技能コード</span></td>
<td>技能名</td>
<td>技能経験年数</td>
</tr>
</tbody>
</table>
<p><span class="arrow" style="top:.5em;left:12.5%;padding:1em 12.5%;"></span>
</div>
<p>上の表は、第 3 正規形です。下の表は、「技能コード」から「技能経験年数」に従属性の矢印を引けないので、第 3 正規形ではありません。</p>
<p>&nbsp;</p>
<p>選択肢イは、以下のようになります。</p>
<div class="table-container pad_h40">
<table class="mag_h10 width_100">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
<td><span class="key">技能コード</span></td>
<td>技能経験年数</td>
</tr>
</tbody>
</table>
<p><span class="arrow no_after" style="top:1em;left:12.5%;padding:1em 25%;"></span><span class="arrow" style="top:1em;left:12.5%;padding:1em 37.5%;"></span><span class="arrow bottom" style="bottom: 1.5em;left:12.5%;padding:1em 12.5%;"></span>
</div>
<div class="table-container pad_tp30">
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">技能コード</span></td>
<td>技能名</td>
</tr>
</tbody>
</table>
<p><span class="arrow" style="top:.5em;left:12.5%;padding:1em 12.5%;"></span>
</div>
<p>上の表は、「従業員番号」と「技能コード」に下線が付いているので、これら 2 つの項目が主キーです。このように複数の項目をセットにした主キーを <span class="bold">複合キー</span> と呼びます。</p>
<p>この場合には、<span class="u">複合キー（主キー）から他のすべての項目に従属性の矢印が引ければ、第 3 正規形です。</span>複合キーの一部分だけに従属しているのでは、主キーに従属していることにならないのでダメです。</p>
<p>上の表は、「従業員氏名」が「従業員番号」「技能コード」という複合キーの「従業員番号」だけで特定できるので（赤色の矢印で示しています）、第 3 正規形ではありません。下の表は、第 3 正規形です。</p>
<p>&nbsp;</p>
<p>選択肢ウは、以下のようになります。</p>
<div class="table-container pad_tp30">
<table class="mag_h10 width_75">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td><span class="key">技能コード</span></td>
<td>技能経験年数</td>
</tr>
</tbody>
</table>
<p><span class="arrow no_after" style="top:.5em;left:12.5%;padding:1em 12.5%;"></span><span class="arrow" style="top:.5em;left:12.5%;padding:1em 25%;"></span>
</div>
<div class="table-container pad_tp30">
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
</tr>
</tbody>
</table>
<p><span class="arrow" style="top:.5em;left:12.5%;padding:1em 12.5%;"></span>
</div>
<div class="table-container pad_tp30">
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">技能コード</span></td>
<td>技能名</td>
</tr>
</tbody>
</table>
<p><span class="arrow" style="top:.5em;left:12.5%;padding:1em 12.5%;"></span>
</div>
<p>どの表も第 3 正規形になっているので、選択肢ウが正解です。</p>
<p>&nbsp;</p>
<p>念のため、選択肢エも見ておきましょう。以下のようになります。</p>
<div class="table-container pad_tp30">
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td><span class="key">技能コード</span></td>
</tr>
</tbody>
</table>
<p><span class="arrow no_after" style="top:.5em;left:12.5%;padding:1em 12.5%;"></span>
</div>
<div class="table-container pad_tp30">
<table class="mag_h10 width_75">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
<td>技能経験年数</td>
</tr>
</tbody>
</table>
<p><span class="arrow" style="top:.5em;left:12.5%;padding:1em 12.5%;"></span>
</div>
<div class="table-container pad_tp30">
<table class="mag_h10 width_50">
<tbody>
<tr>
<td><span class="key">技能コード</span></td>
<td>技能名</td>
</tr>
</tbody>
</table>
<p><span class="arrow" style="top:.5em;left:12.5%;padding:1em 12.5%;"></span>
</div>
<p>上の表は、<span class="u">主キーだけですが、これも第 3 正規形です。</span></p>
<p>真ん中の表は、「従業員番号」から「技能経験年数」に従属性の矢印を引けないので、第 3 正規形ではありません。下の表は、第 3 正規形です。</p>
<p>&nbsp;</p>
<p>いかがでしょう？ <span class="bold">第 3 正規形かどうかは、従属性の矢印を引けばわかる</span> ということをご理解いただけましたね！</p>
<p><span class="chip mag_rt10">解答</span>ウ</p>
<h2>関係データベースの正規化に関する午後問題</h2>
<p>「第 3 正規形」とは何かを理解できたら、残りの「非正規形」「第 1 正規形」「第 2 正規形」「繰り返し」「部分従属性」「推移従属性」も一気に片付けちゃいまいしょう。</p>
<p>「繰り返し」「部分従属性」「推移従属性」は、これがあってはダメですよ、というものです。</p>
<dl class="background c-round mag_h30">
<dt>繰り返しとは</dt>
<dd>表に、同じ項目が複数あることです</dd>
<dt>部分従属性とは</dt>
<dd>表に、複合キーの一部に従属した項目があることです（先ほどの午前問題にもありました）</dd>
<dt>推移従属性とは</dt>
<dd>表に、主キーではない項目に従属した項目があることです</dd>
</dl>
<p>以下に、それぞれの例を示します。これがあってはダメですよ、を赤色の文字や矢印で示しています。</p>
<p><span class="grey-text mag_tp30">繰り返しの例</span></p>
<div class="table-container pad_h40">
<table class="mag_h10 width_125">
<tbody>
<tr>
<td><span class="key">従業員<br class="hide-on-med-and-up">番号</span></td>
<td>従業員<br class="hide-on-med-and-up">氏名</td>
<td>技能名</td>
<td>技能名</td>
<td>技能名</td>
</tr>
</tbody>
</table>
<p><span class="arrow" style="top:1em;left:10%;padding:1em 10%;"></span><span class="red white-text" style="position: absolute; bottom: 1.5em;left:50%;padding:.5em 1em;">繰り返しがある</span>
</div>
<p><span class="grey-text">部分従属性の例</span></p>
<div class="table-container pad_tp40" style="padding-bottom: 5em">
<table class="mag_h10 width_100">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td><span class="key">技能コード</span></td>
<td>従業員氏名</td>
<td>技能経験年数</td>
</tr>
</tbody>
</table>
<p><span class="arrow no_after" style="top:1em;left:12.5%;padding:1em 12.5%;"></span><span class="arrow" style="top:1em;left:12.5%;padding:1em 37.5%;"></span><span class="arrow bottom" style="bottom: 3.9em;left:12.5%;padding:1em 25%;"></span><span class="red white-text" style="position: absolute; bottom: .5em;left:17.5%;padding:.5em 1em;">複合キーの一部に従属した項目がある</span>
</div>
<p><span class="grey-text">推移従属性の例</span></p>
<div class="table-container pad_tp40" style="padding-bottom: 5em">
<table class="mag_h10 width_100">
<tbody>
<tr>
<td><span class="key">従業員番号</span></td>
<td>従業員氏名</td>
<td>部署番号</td>
<td>部署名</td>
</tr>
</tbody>
</table>
<p><span class="arrow" style="top:1em;left:12.5%;padding:1em 12.5%;"></span><span class="arrow" style="top:1em;left:12.5%;padding:1em 25%;"></span><span class="arrow" style="top:1em;left:12.5%;padding:1em 37.5%;"></span></span><span class="arrow bottom" style="bottom: 3.9em;left:62.5%;padding:1em 12.5%;"></span><span class="red white-text" style="position: absolute; bottom: .5em;left:53%;padding:.5em 1em;">主キーではない項目に従属した項目がある</span>
</div>
<p>「繰り返し」「部分従属性」「推移従属性」の有無によって、「非正規形」「第 1 正規形」「第 2 正規形」および「第 3 正規形」が、以下のように定義されています。</p>
<p>これは、この記事の冒頭で示した教科書通りの堅苦しい説明と同じですが、今なら、すんなり理解できるでしょう。</p>
<dl class="background c-round mag_h30">
<dt>非正規形</dt>
<dd>繰り返しがある表</dd>
<dt>第 1 正規形</dt>
<dd>繰り返しを排除した表</dd>
<dt>第 2 正規形</dt>
<dd>第 1 正規形の条件を満たし、さらに部分従属性を排除した表</dd>
<dt>第 3 正規形</dt>
<dd>第 2 正規形の条件を満たし、さらに推移従属性を排除した表</dd>
</dl>
<p>それでは、知識の総仕上げとして、関係データベースの正規化に関する午後問題を見てみましょう。問題文の冒頭には、長々とした説明がありますが、それをざっと読んだら、設問を見てください。</p>
<div class="card-panel mag_h30">
問 2　平成 22 年度 秋期 午後 （問 2 から抜粋）</p>
<p>コールセンターの対応記録管理に関する次の記述を読んで，設問 1 ~ 4 に答えよ。</p>
<p>F 社では，新しいソフトウェア製品の発売と同時に，そのソフトウェア製品に関する質問を受けるコールセンターを開設することにした。コールセンターでの対応内容は，すべてデータベースに記録する。</p>
<p>[コールセンターの業務]</p>
<dl class="inline">
<dt>(1)</dt>
<dd>製品を購入した利用者には，一意な利用者 ID が発行されている。質問を受ける際は，この利用者 ID を通知してもらう。</dd>
<dt>(2)</dt>
<dd>対応内容をデータベースに記録する際，その質問の原因を特定する種別を設定する。種別とは &#8220;マニュアル不備&#8221; ，&#8221;使用法誤解&#8221; などの情報である。それぞれの種別に対して一意に種別 ID を割り当てる。 </dd>
<dt>(3)</dt>
<dd>データベースを検索し，過去に同じ種別 ID をもつ類似の質問があった場合は，その受付番号を類似受付番号として記録しておく。</dd>
</dl>
<p>図 1 は，これらの業務を基に，データベースを構成するデータ項目を抽出したものである。下線付きの項目は主キーを表す。</p>
<figure><figcaption>図 1　データベースを構成するデータ項目</figcaption><img class="materialboxed hoverable responsive-width z-depth-5" src="../../wp-content/uploads/2018/06/fe_pm_q2_h22_a_figure1.png"><br />
</figure>
<p>設問 1</p>
<p>図 1 に示したデータ項目を正規化して図 2 に示す表を設計し，運用を始めた。 実施した正規化に関する説明文のに入れる正しい答えを，解答群の中から選べ。</p>
<figure><figcaption>図 2　正規化検討後の表</figcaption><img class="responsive-width materialboxed hoverable z-depth-5" src="../../wp-content/uploads/2018/06/fe_pm_q2_q1_h22_a_figure2.png"><br />
</figure>
<p>　図 1 に示した状態は非正規形と呼ばれ，1 事実 1 か所の関係が成立していないので，重複更新，事前登録，関係喪失などの問題がある。このため，第 1 正規化 から順に第 3 正規化までを行うことにした。</p>
<p>　まず，第 1 正規化の作業では， <span class="border">a</span> 。次に，第 2 正規化の作業では， <span class="border">b</span>。そして，第3正規化の作業では， <span class="border">c</span>。</p>
<p>解答群</p>
<dl class="inline">
<dt>ア</dt>
<dd>受付番号と類似受付番号の組合せを主キーとして <span class="red-text bold">繰返し要素を排除した</span></dd>
<dt>イ</dt>
<dd>既に当該正規形に準じていたので，適用は不要だった</dd>
<dt>ウ</dt>
<dd>データ参照時の処理性能を考慮し，質問と回答を一つの表で管理するようにした</dd>
<dt>エ</dt>
<dd>利用者表，サポート員表及び種別表を作成し，<span class="red-text bold">主キー以外の項目における関数従属性を排除した</span></dd>
<dt>オ</dt>
<dd>類似表を作成し，<span class="red-text bold">主キーの一部における関数従属性を排除した</span></dd>
</dl>
</div>
<p>「第 1 正規化」とは、繰り返しを排除して第 1 正規形にすることです。<br />
したがって、<span class="border">a</span>の正解は、「繰返し要素を排除した」とある選択肢アです。</p>
<p>「第 2 正規化」とは、部分従属性を排除して第 2 正規形にすることです。<br />
したがって、<span class="border">b</span>の正解は、「主キーの一部における関数従属性を排除した」とある選択肢オです。「関数従属性」は、「従属性」と同じ意味です。</p>
<p>「第 3 正規化」とは、推移従属性を排除して第 3 正規形にすることです。<br />
したがって、<span class="border">c</span>の正解は、「主キー以外の項目における関数従属性を排除した」とある選択肢エです。</p>
<p><span class="chip mag_rt10">解答</span>　a &#8211; ア,　b &#8211; オ,　c &#8211; エ</p>
<div class="divider mag_h60"></div>
<p>いかがでしたか？ 「主キーから他の項目に従属性の矢印を引くこと」で、第 3 正規形かどうかを判断できるようになりましたね。</p>
<p>「部分従属性や推移従属性のよけいな矢印が引けること」や「繰り返しがあること」から、第 2 正規形、第 1 正規形、非正規形も判断できますね。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/normalization/">基本情報でわかる正規化「関係データベースの正規化は、従属性の矢印を引けばわかる」</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>基本情報でわかる SQL 「英語だと思って日本語に訳せばわかる」</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/sql/</link>
		<pubDate>Wed, 16 Sep 2020 06:53:18 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=4619</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/sql/">基本情報でわかる SQL 「英語だと思って日本語に訳せばわかる」</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。</p>
<p>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 SQL です。</p>
<style>.border { border: .2em solid #2196f3; padding: .25em 2em; margin: auto .5em; } .card-panel > pre { margin: 1em -24px !important; padding 1em 24px !important; } pre { margin: 1em -7.5% !important; padding: 1em 7.5% !important; } .background > pre { margin: .5em -2em !important; padding .5em 2em !important;  } td, th { text-align: center } .key { border-bottom: .1em solid black; } </style>
<h2>SQL とは？</h2>
<p>はじめに、 SQL とは何かを説明しましょう。</p>
<p>現在主流のデータベースの形式は、データを表に格納する「関係データベース」です。関係データベースは、「 RDBMS（ Relational Database Management System ）」というシステムによって実現されます。</p>
<p>RDBMS を使うことで、関係データベースに様々な操作ができますが、そのためには、専用の言語で命令を与えなければなりません。この言語が「 <span class="bold">SQL</span> （ Structured Query Language 、エスキューエル）」であり、 SQL で記述された命令文を「 SQL 文」と呼びます。 RDBMS には、いくつかの製品がありますが、 SQL の構文は、どの製品でも基本的に同じです。</p>
<p>&nbsp;</p>
<p>SQL を理解するコツは、<span class="bold">「英語だと思って日本語に訳してみること」</span>です。 SQL の構文は、英語の構文とほとんど同じだからです。</p>
<p>RDBMS に命令を与えるのですから、</p>
<div class="background c-round mag_h10">
SQL の基本構文は、英語の命令文の「動詞＋目的語」
</div>
<p>です。</p>
<p>この基本構文に、前置詞や関係副詞などを使って、様々な意味を追加できます。その際に使われる単語の意味も、英語の単語の意味と同じです。とにかく「 SQL は英語」なのです。</p>
<p>&nbsp;</p>
<p>SQL の主な命令を紹介しましょう。表の操作には、</p>
<ul class="background c-round mag_h10">
<li>データの登録</li>
<li>読み出し</li>
<li>更新</li>
<li>削除</li>
</ul>
<p>の 4 種類があり、それぞれ、 INSERT, SELECT, UPDATE, DELETE という動詞で示されます。</p>
<p>日本語に訳すと、「挿入せよ（登録せよ）」「選択せよ（読み出せ）」「更新せよ」「削除せよ」です。もとの英語では難しく感じるかもしれませんが、日本語に訳せば簡単に理解できるでしょう。</p>
<table class="striped mag_h30 centered">
<caption class="mag_h10 grey-text">図　表の操作を行う SQL の主な命令と日本語訳</caption>
<thead>
<tr>
<th>SQL の命令</th>
<th>日本語訳</th>
</tr>
</thead>
<tbody>
<tr>
<td>INSERT</td>
<td>データを挿入せよ<br class="hide-on-med-and-up">（登録せよ）</td>
</tr>
<tr>
<td>SELECT</td>
<td>	データを選択せよ<br class="hide-on-med-and-up">（読み出せ）</td>
</tr>
<tr>
<td>UPDATE</td>
<td>データを更新せよ</td>
</tr>
<tr>
<td>DELETE</td>
<td>データを削除せよ</td>
</tr>
</tbody>
</table>
<h2> SQL に関する午前問題</h2>
<p>それでは、 SQL に関する午前問題を見てみましょう。</p>
<p>以下は、データを読み出す SELECT 命令の問題です。選択肢を見ると、知らない構文や単語が並んでいますが、心配はいりません。「英語だ」と思って日本語に訳してみれば、意味がわかるからです。</p>
<div class="card-panel mag_h30">
問 28　平成 25 年度 春期 午前</p>
<p>&#8220;中間テスト&#8221; 表からクラスごと，教科ごとの平均点を求め，クラス名，教科名の昇順に表示する SQL 文中の a に入れるべき字句はどれか。</p>
<p><span class="mag_lt10">中間テスト (クラス名, 教科名, 学生番号, 名前, 点数)</span></p>
<div class="background c-round small-text hide-on-med-and-up mag_h10"><i class="material-icons light-blue-text mag_rt05">info</i>SQL 文は横スクロールすると全文をご覧になれます</div>
<p>〔SQL 文〕</p>
<pre><code class="language-sql">SELECT クラス名, 教科名, AVG(点数) AS 平均点
FROM 中間テスト
[   a   ]</code>
</pre>
<p>ア</p>
<pre><code class="language-sql">GROUP BY クラス名, 教科名 ORDER BY クラス名, AVG(点数) </code></pre>
<p>イ</p>
<pre><code class="language-sql">GROUP BY クラス名, 教科名 ORDER BY クラス名, 教科名</code></pre>
<p>ウ</p>
<pre><code class="language-sql">GROUP BY クラス名, 教科名, 学生番号 ORDER BY クラス名, 教科名, 平均点</code></pre>
<p>エ</p>
<pre><code class="language-sql">GROUP BY クラス名, 平均点 ORDER BY クラス名, 教科名</code></pre>
</div>
<p>まず、<span class="border">a</span>の前までの SQL 文の意味を考えてみましょう。</p>
<p>英語の単語を日本語に訳すと、</p>
<p>「 SELECT 」は「選択せよ（読み出せ）」<br />
「 AS 」は「～として」<br />
「 FROM 」は「～から」</p>
<p>です。</p>
<p>したがって、</p>
<pre><code class="language-sql">SELECT クラス名, 教科名、AVG(点数) AS 平均点 FROM 中間テスト</code></pre>
<p>という SQL 文は、</p>
<blockquote>
<p class="blue-grey-text">&#8220;中間テスト&#8221; 表から、<br />
&#8220;クラス名&#8221;、 &#8220;教科名&#8221; 、 &#8220;AVG(点数)&#8221; を<br />
&#8220;平均点&#8221; として、読み出せ</p>
</blockquote>
<p>という意味です。「 AVG(点数) 」は、その名前と構文から「点数の平均値（ AVERAGE ）を求める関数だ」と予測できるでしょう。それで、バッチリ合っています。</p>
<p>&nbsp;</p>
<p>次に、<span class="border">a</span>の中に入る SQL 文を、選択肢の中から選んでみましょう。</p>
<p><span class="border">a</span>には、問題文に示された「クラスごと、教科ごと」「クラス名、教科名の昇順」を意味する SQL 文が入るはずです。</p>
<p>どの選択肢にも、<code class="language-sql pad_w05 mag_w05">GROUP BY</code>と<code class="language-sql pad_w05 mag_w05">ORDER BY</code>という英語があります。これらを日本語に訳すと、</p>
<p><code class="language-sql pad_w05 mag_w05">GROUP BY</code>は「～によってグループ化して」であり、<br />
<code class="language-sql pad_w05 mag_w05">ORDER BY</code>は「～による順序で」</p>
<p>です。一方が「ごと」で、もう一方が「昇順」に該当するはずですから、<code class="language-sql pad_w05 mag_w05">GROUP BY</code>が「ごと」で、<code class="language-sql pad_w05 mag_w05">ORDER BY</code>が「昇順」でしょう。</p>
<p>したがって、</p>
<p>「クラスごと、教科ごと」と「クラス名、教科名の昇順」は、<br />
SQL 文で<code class="language-sql pad_w05 mag_w05">GROUP BY クラス名, 教科名</code>と<code class="language-sql pad_w05 mag_w05">ORDER BY クラス名, 教科名</code>であり、選択肢イが適切だと判断できます。</p>
<p>このように、「英語だ」と思って日本語に訳してみれば、 SQL 文の意味がわかるのです！</p>
<p><span class="chip mag_rt10">解答</span>イ</p>
<h2> SQL に関する午後問題</h2>
<p>今度は、 SQL に関する午後問題を見てみましょう。</p>
<p>基本情報技術者試験の午後問題は、午前問題の知識を架空の事例に仕立てたものです。したがって、<span class="u">問題を解くために必要な知識は午前問題と同じなのですが、問題の内容がより実践的になっています。</span></p>
<p>SQL 文も、それを使うまでの経緯が、問題の冒頭で説明されます。まず、この経緯を読み取ってください。</p>
<div class="card-panel mag_h30">
問 3　平成 27 年度 秋期 午後 問3 から抜粋</p>
<p>電子部品の出荷データを管理する関係データベースの運用に関する次の記述を読んで，設問 1 ~ 4 に答えよ。</p>
<p>　C 社は，電子部品を製造販売する会社である。</p>
<p>　ある期間に出荷した特定の電子部品について，製造装置の設定ミスによる不具合が発生しているおそれがあるので，顧客への連絡と出荷済みの電子部品の無償交換（回収及び再出荷。以下，リコールという）を実施することにした。</p>
<p>　出荷情報は，図 1 に示す表で管理されている。下線付きの項目は主キーを表す。</p>
<div class="background c-round small-text hide-on-med-and-up mag_h10"><i class="material-icons light-blue-text mag_rt05">info</i>表は横スクロールすると全データをご覧になれます</div>
<figure class="mag_h30">
<div class="table-container mag_h30">
<table>
<caption class="grey-text mag_h10">顧客表</caption>
<thead>
<tr>
<th><span class="key">顧客番号</span></th>
<th>顧客名</th>
<th>住所</th>
<th>代表電話</th>
</tr>
<tbody>
<tr>
<td>0181</td>
<td>情報電機株式会社</td>
<td>東京都文京区本駒込OO-A</td>
<td>99-9999-9999</td>
</tr>
</tbody>
</table>
</div>
<table class="mag_h30">
<caption class="grey-text mag_h10">部品表</caption>
<thead>
<tr>
<th><span class="key">部品番号</span></th>
<th>部品名</th>
<th>単価</th>
</tr>
</thead>
<tbody>
<tr>
<td>007551</td>
<td>スイッチ</td>
<td>80</td>
</tr>
</tbody>
</table>
<div class="table-container mag_h30">
<table>
<caption class="grey-text mag_h10">出荷表</caption>
<thead>
<tr>
<th><span class="key">出荷番号</span></th>
<th>顧客番号</th>
<th>部品番号</th>
<th>出荷数</th>
<th>出荷金額</th>
<th>出荷日</th>
</tr>
</thead>
<tbody>
<tr>
<td>150412</td>
<td>0181</td>
<td>007551</td>
<td>400</td>
<td>32000</td>
<td>20150115</td>
</tr>
<tr>
<td>150413</td>
<td>0059</td>
<td>000890</td>
<td>100</td>
<td>48000</td>
<td>20150115</td>
</tr>
</tbody>
</table>
</div><figcaption class="grey-text mag_h20 center">図 1　表の構成とデータの格納例</figcaption></figure>
<p>設問 1</p>
<p>リコールの対象となる電子部品の出荷先の顧客番号，顧客名, 出荷番号，出荷日，出荷数を，顧客番号の昇順に表示する。リコールの対象となる電子部品の部品番号は &#8220;007551&#8221; で，出荷日は 2015 年 1 月 10 日から 2015 年 1 月 20 日までである。次の SQL 文の<span class="border">a</span>に入れる正しい答えを，解答群の中から選べ。</p>
<pre><code class="language-sql">SELECT 顧客表.顧客番号, 顧客表.顧客名,
       出荷表.出荷番号, 出荷表.出荷日, 出荷表.出荷数
  FROM 顧客表, 出荷表
  WHERE 出荷表.顧客番号 = 顧客表.顧客番号 AND
        出荷表.部品番号 = '007551' AND
        [   a   ]
  ORDER BY 顧客表.顧客番号</code>
</pre>
<p>解答群</p>
<pre><code class="language-sql">ア  出荷表.出荷日 =  ‘20150110’ OR 出荷表.出荷日 = ‘20150120’
イ  出荷表.出荷日 = ANY  (‘20150110’, ‘20150120')
ウ  出荷表.出荷日 BETWEEN '20150110' AND '20150120'
エ  出荷表.出荷日 IN (‘20150110’, ‘20150120')</code></pre>
</div>
<p>部品の不具合があってリコールを実施するということです。それでは、設問を見てみましょう。</p>
<blockquote>
<p class="blue-grey-text">リコールの対象となる電子部品の出荷先の<br />
顧客番号、顧客名、出荷番号、出荷日、出荷数を、<br />
顧客番号の昇順に表示する</p>
</blockquote>
<p>に対応する SQL 文を作ることがテーマです。</p>
<p>そして、リコールの対象となる電子部品の条件が</p>
<blockquote>
<p class="blue-grey-text">部品番号は &#8220;007551&#8221; で、<br />
出荷日は 2015 年 1 月 10 日から 2015 年 1 月 20 日までである</p>
</blockquote>
<p>ということも示されています。</p>
<p>SQL 文の「英語」を、これらの「日本語」の文章に対応付ければ、<span class="border">a</span>に入る正しい答えがわかります。</p>
<p>&nbsp;</p>
<pre><code class="language-sql">SELECT 顧客表.顧客番号, 顧客表.顧客名, 出荷表.出荷番号, 出荷表.出荷日, 出荷表.出荷数
  /* 中略 */
  ORDER BY 顧客表.顧客番号</code>
</pre>
<p>は、</p>
<blockquote>
<p class="blue-grey-text">顧客番号、顧客名、出荷番号、出荷日、出荷数を、<br />
顧客番号の昇順に表示する</p>
</blockquote>
<p>に該当します。<code class="language-sql pad_w05 mag_w05">FROM 顧客表, 出荷番号</code>は、データを取り出す表を指定しているだけなので、気にする必要はありません。ポイントは、<code class="language-sql pad_w05 mag_w05">WHERE</code>の後の部分です。</p>
<pre><code class="language-sql">  WHERE 出荷表.顧客番号 = 顧客表.顧客番号 AND
        出荷表.部品番号 = '007551' AND
        [   a   ]</code>
</pre>
<p>「 WHERE 」は、「～であるところの」という意味の「関係副詞」です。 <span class="u">SQL 文では、<code class="language-sql pad_w05 mag_w05">WHERE</code>の後に条件を指定します。</span></p>
<p>条件は、「～かつ」を意味する<code class="language-sql pad_w05 mag_w05">AND</code>でつながれて 3 つあります。</p>
<pre><code class="language-sql">出荷表.顧客番号 = 顧客表.顧客番号</code></pre>
<p><i class="material-icons indigo-text mag_rt05">looks_one</i>「出荷表の顧客番号と顧客表の顧客番号を結び付ける」という意味であり、複数の表（ここでは、顧客表と出荷表）からデータを取り出すときのお決まりの条件です。</p>
<pre><code class="language-sql">出荷表.部品番号 = '007551'</code></pre>
<p><i class="material-icons indigo-text mag_rt05">looks_two</i></p>
<blockquote>
<p class="blue-grey-text">部品番号は &#8220;007551&#8221; で</p>
</blockquote>
<p>という条件に該当します。</p>
<pre><code class="language-sql">[   a   ]</code></pre>
<p><i class="material-icons indigo-text mag_rt05">looks_3</i>したがって、残った<span class="border">a</span>は、</p>
<blockquote>
<p class="blue-grey-text">出荷日は 2015 年 1 月 10 日から 2015 年 1 月 20 日まで</p>
</blockquote>
<p>に該当します。</p>
<p>&nbsp;</p>
<p>解答群に示された SQL 文を日本語に訳して、</p>
<blockquote>
<p class="blue-grey-text">出荷日は 2015 年 1 月 10 日から 2015 年 1 月 20 日まで</p>
</blockquote>
<p>に該当するものを選んでみましょう。</p>
<div class="background c-round mag_tp30">
選択肢ア</p>
<pre><code class="language-sql pad_w05 mag_w05">出荷表.出荷日 = '20150110' OR 出荷表.出荷日 = '20150120'</code></pre>
<p><code class="language-sql pad_w05 mag_w05">OR</code>が「または」という意味なので、<br />
「出荷表の出荷日が 2015 年 1 月 10 日、または、 出荷表の出荷日が 2015 年 1 月 20 日」であり、「～から・・・まで」ではありません
</div>
<div class="background c-round mag_h10">
選択肢イ</p>
<pre><code class="language-sql pad_w05 mag_w05">出荷表.出荷日 = ANY ('20150110', '20150120')</code></pre>
<p><code class="language-sql pad_w05 mag_w05">ANY</code>が「いずれか」という意味なので、<br />
「出荷表の出荷日が 2015 年 1 月 10 日、 2015 年 1 月 20 日のいずれか」であり、「～から・・・まで」ではありません
</div>
<div class="background c-round mag_bt30">
選択肢ウ</p>
<pre><code class="language-sql pad_w05 mag_w05">出荷表.出荷日 BETWEEN '20150110' AND '20150120'</code></pre>
<p><code class="language-sql pad_w05 mag_w05">BETWEEN ～ AND ・・・</code>が「～から・・・まで」という意味なので、<br />
「出荷表の出荷日が 2015 年 1 月 10 日から 2015 年 1 月 20 日まで」にピッタリ該当します
</div>
<p>したがって、選択肢ウが正解です</p>
<p>念のため、選択肢エも見ておきましょう。</p>
<div class="background c-round mag_h30">
選択肢エ</p>
<pre><code class="language-sql pad_w05 mag_w05">出荷表.出荷日 IN  ('20150110', '20150120')</code></pre>
<p><code class="language-sql pad_w05 mag_w05">IN</code>が「～の中にある」という意味なので、<br />
「出荷表の出荷日が 2015 年 1 月 10 日、 2015 年 1 月 20 日の中にある」であり、「～から・・・まで」ではありません。
</div>
<p><span class="chip mag_rt10">解答</span>ウ</p>
<div class="divider mag_h60"></div>
<p>いかがでしたか？ 「英語だと思って日本語に訳してみること」で、 SQL 文の読み方が「わかった」でしょう。</p>
<p>今後の試験対策としては、まず、教材（きっと何らかの試験対策教材をお持ちですね）に示された SQL の構文に、一通り目を通してください。 SQL 文の英語を日本語に訳して意味を理解できれば、構文を暗記する必要はありません。</p>
<p>その上で、できるだけ多くの過去問題を解いてください。問題を解くときも、 SQL 文の英語を日本語に訳して意味を考えてください。</p>
<p>もしも、知らない英単語に遭遇したら、英和辞典で意味を調べてください。そうすれば、きっと SQL 文の意味がわかるはずです。</p>
<p>最後にもう一度だけ言います。　<span class="bold"> SQL 文は英語</span> です。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/sql/">基本情報でわかる SQL 「英語だと思って日本語に訳せばわかる」</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>「厳選5題」過去問と解説 &#124; 平成24年度 秋期 の過去問やるならこれをやれ</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h24_autumn/</link>
		<pubDate>Wed, 11 Sep 2019 07:58:20 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[2進数]]></category>
		<category><![CDATA[FIFO LRU LFU]]></category>
		<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[午前問題]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=kakomon-gensen&#038;p=1989</guid>
		<description><![CDATA[<p>ここでは、平成24年度 秋期 基本情報技術者試験の午前試験 の中から「やるべき問題」を5題に厳選し、ぶっちゃけた解説をさせていただきます。 やるべき問題とは、よく出る問題であり、かつ、練習すればできる問題（練習しないとで [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h24_autumn/">「厳選5題」過去問と解説 | 平成24年度 秋期 の過去問やるならこれをやれ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>ここでは、<a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2012h24_2/2012h24a_fe_am_qs.pdf">平成24年度 秋期 基本情報技術者試験の午前試験</a> の中から「やるべき問題」を5題に厳選し、ぶっちゃけた解説をさせていただきます。</p>
<p>やるべき問題とは、よく出る問題であり、かつ、練習すればできる問題（練習しないとできない問題）です。</p>
<style>h2 .chip{vertical-align:middle;background:#3f51b5;color:white;margin-right:.75em;}.chip i{font-size:2em!important;}.mag_auto{margin:1.5em auto;}table{font-size:.85em;}.border td{border-left:1px solid rgba(0,0,0,.12);border-right:1px solid rgba(0,0,0,.12);border-top:1px solid rgba(0,0,0,.12);}.half-width{width:50%;margin:auto;}</style>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_one</i></span>2 の補数表現と算術右シフトをマスターしよう</h2>
<div class="card-panel mag_h30">
<p>問 1　(平成 24 年度 秋期)</p>
<p>8 ビットの 2 進数 11010000 を右に 2 ビット算術シフトしたものを，00010100 から<br />
減じた値はどれか。 ここで，負の数は 2 の補数表現によるものとする。</p>
<p>ア　00001000　　イ　00011111　　<br class="hide-on-med-and-up">ウ　00100000　　エ　11100000
</div>
<div class="chip">解説</div>
<p>この問題を解くには、「 2 の補数表現」および「算術右シフト」の知識が必要になります。</p>
<p>これらを「苦手です！」という人が多いようですが、それならばこそ、この問題を通して苦手を克服してください。 苦手を克服すれば、確実に得点アップにつながるからです。</p>
<p>&nbsp;</p>
<p><span class="bold">2 の補数表現は、マイナス符号を使わずに 0 と 1 だけでマイナスの数を表す仕組み</span> です。</p>
<p>2 の補数表現では、2 進数の最上位桁を「符号ビット」と呼び、符号ビットが 0 ならプラスの数を表し、 1 ならマイナスの数を表します。</p>
<p>問題に示された <span class="bold">1</span>1010000 は、最上位桁が 1 なので、マイナスの数を表しています。</p>
<p>ここまでは、OK でしょうか？</p>
<p>&nbsp;</p>
<p><span class="u">算術右シフトは、右方向つまり下位桁に桁をずらして、割り算を行うこと</span>です。</p>
<p>その際に、桁をずらしても符号ビットが変わらないように、符号ビットを除いた部分をシフトします。 そして、シフトして空いた上位桁には、符号ビットと同じ数を入れます。</p>
<p>ここでは、 11010000 を 2 ビット算術右シフトするのですから、</p>
<p>最上位桁の [ 1 ] 1010000 を除いた<br />
1 [ 1010000 ] の部分を下位桁に 2 桁ずらして<br />
1 [ xx10100 ] とし、<br />
空いた上位桁の<br />
1 [ xx ] 10100 の部分に符号ビットと同じ 1 を入れて、<br />
1 [ 11 ] 10100<br />
にします。</p>
<p>空いた桁に符号ビットと同じ値を入れることで、ちゃんと割り算の結果になるのです。</p>
<p>ここまでは、OK でしょうか？</p>
<p>&nbsp;</p>
<p>もう少しで問題が解けますから、がんばってください。</p>
<p>11010000 を 2 ビット算術右シフトした結果は、<br />
11110100 になりました。 符号ビットが 1 なので、 11110100 は、マイナスの数です。</p>
<p>これを 00010100 から引くのですから、 11110100 を同じ絶対値のままプラスの値にして足せばよいことになります。</p>
<p>マイナスの数を引くのは、同じ絶対値のプラスの数を足すことと同じだからです。</p>
<p>たとえば、 8 -（ -5 ）は、8 + 5 です。</p>
<p>ここまでは、OK でしょうか？</p>
<p>&nbsp;</p>
<p>2 の補数表現では、「反転して 1 を足す」という操作を行うことで、同じ絶対値のまま、プラスの数をマイナスの数に、マイナスの数をプラスの数に変換できます。</p>
<p>11110100 を反転する（ 0 を 1 に、 1 を 0 にする）と、<br />
00001011 です。<br />
00001011 に 1 を足すと、<br />
00001100 です。</p>
<p>したがって、結果は、<br />
00010100 + 00001100 = 00100000<br />
となり、ウが正解です。 いかがでしょう。</p>
<p>何となくわかったなら、実際に、手作業で計算を行ってみてください。 そうすれば、きっと 2 の補数表現と算術右シフトをマスターできるはずです！</p>
<p><span class="chip mag_tp30">解答</span> ウ</p>
<div class="grey lighten-5 pad_20 c-round">
関連タグ<i class="material-icons teal-text text-lighten-2">search</i>: <a href="../../tag/2進数" class="chip teal white-text">2 進数</a>
</div>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_two</i></span>探索アルゴリズムの計算量のオーダを覚えよう</h2>
<div class="card-panel mag_h30">
問 3　(平成 24 年度 秋期)</p>
<p>探索方法とその実行時間のオーダの適切な組合せはどれか。 ここで，探索するデータの数を <em>n</em> とし，ハッシュ値が衝突する (同じ値になる) 確率は無視できるほど小さいものとする。 また，実行時間のオーダが <em>n<sup>2</sup></em> であるとは，<em>n</em> 個のデータを処理する時間が <em>cn<sup>2</sup></em> (c は定数) で抑えられることをいう。</p>
<table class="mag_h30 bordered centered responsive-width">
<thead>
<tr>
<th></th>
<th>2 分探索</th>
<th>線形探索</th>
<th>ハッシュ探索</th>
</tr>
</thead>
<tbody>
<tr>
<td>ア</td>
<td><em>log<sub>2</sub>n</em></td>
<td><em>n</em></td>
<td>1</td>
</tr>
<tr>
<td>イ</td>
<td><em>nlog<sub>2</sub>n</em></td>
<td><em>n</em></td>
<td><em>log<sub>2</sub>n</em></td>
</tr>
<tr>
<td>ウ</td>
<td><em>nlog<sub>2</sub>n</em></td>
<td><em>n<sup>2</sup></em></td>
<td>1</td>
</tr>
<tr>
<td>エ</td>
<td><em>n<sup>2</sup></em></td>
<td>1</td>
<td><em>n</em></td>
</tr>
</tbody>
</table>
</div>
<div class="chip">解説</div>
<p>あれこれ難しそうなことが書かれていますが、この問題のテーマは<span class="bold">「計算量のオーダ」</span>です。</p>
<p>「計算量」とは、計算の量、つまり処理回数のことで、同じ目的のアルゴリズムを比較するために使われます。</p>
<p>&nbsp;</p>
<p>基本情報技術者試験では、<span class="bold">「データが n 個ある場合の最大の処理回数を n を使った式で示したもの」を 計算量 </span>とします。</p>
<p>実際の処理回数は、<br />
2n<sup>2</sup> + 5n + 7<br />
のように係数や定数を持つものとなりますが、それらを省略して、さらに最大の次数で示します。</p>
<p>2n<sup>2</sup> + 5n + 7 という処理回数の場合は、係数と定数を省略して<br />
n<sup>2</sup> + n<br />
とし、さらに最大の次数である<br />
n<sup>2</sup><br />
で示します。 これが「オーダ」です。 オーダ（ order ）は、直訳すると「次数」や「規模」という意味です。</p>
<p>&nbsp;</p>
<p>この問題は、<span class="u">探索という同じ目的を持った「二分探索」「線形探索」「ハッシュ探索」という 3 つのアルゴリズムのオーダを知っていますか？</span> という内容です。</p>
<p>線形探索のオーダが、最もわかりやすいので、まず、それでオーダのイメージをつかんでください。</p>
<p><span class="u">線形探索は、「配列の先頭から順に 1 つずつ要素をチェックする」というアルゴリズム</span>です。</p>
<p>要素が 10 個あれば、最大で 10 回の処理を行います。<br />
要素が 100 個あれば、最大で 100 回の処理を行います。<br />
要素が n 個あれば、最大で n 回の処理を行います。</p>
<p>したがって、線形探索のオーダは n です。</p>
<figure><figcaption>図　線形探索のオーダは n である</figcaption><img class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2019/09/q3_figure.png" loading="lazy"><br />
</figure>
<p>次は、ハッシュ探索です。</p>
<p><span class="u">ハッシュ探索は、「データの値に計算式を適用して格納場所を決める」というアルゴリズム</span>です。</p>
<p>たとえば、「データの値を 10 で割った余りを求める」という計算式を適用すれば、</p>
<p>58 というデータの格納場所は、<br />
58 mod 10 = 8<br />
になります（ mod は、割り算の余りを求める演算子だとします）。</p>
<p>この仕組みから、ハッシュ探索のオーダは、理想的には 1（ 1 回の処理で目的の値が見つかる）です。 データの値がわかれば、 1 回の処理で格納場所がわかるからです。</p>
<p>&nbsp;</p>
<p>ここで「理想的」と断っているのは、後から同じ格納場所になってしまうデータが生じた場合は、別の場所に格納することになるので、 1 回の処理で格納場所がわからないからです。</p>
<p>そこで、問題文には、「ハッシュ値が衝突する（同じ値になる）確率は無視できるほど小さいものとする」と示されています。</p>
<p>「ハッシュ値」とは、計算式で得られた格納場所のことです。 これが同じ値になる確率が無視できるほど小さいのですから、ここでは、ハッシュ法のオーダは 1 で OK です。</p>
<figure><figcaption>図　ハッシュ法のオーダは理想的には 1 である</figcaption><img class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2019/09/q3_hash.png" loading="lazy"><br />
</figure>
<p>最後に二分探索のオーダです。 これは、<br />
log<sub>2</sub>n<br />
という表現になります。</p>
<p>log は、高校で習ったはずですが、意味を覚えていますか？ </p>
<p>もしも、忘れてしまったら、<br />
「 <span class="bold">log<sub>2</sub>n は、 n 個のものを 1 個にする分割回数</span>である」<br />
ということと、<br />
具体例として<br />
「 <span class="bold">log<sub>2</sub>8 = 3（ 8 個のものを 1 個にする分割回数は 3 である）</span>」<br />
を覚えてください。</p>
<p>要素数 8 個の配列は、</p>
<p>1 回目の分割で 8 個が 4 個になり、<br />
2 回目の分割で 4 個が 2 個になり、<br />
3 回目の分割で 2 個が 1 個になります。</p>
<p>この最後の 1 個までチェックするのが、最大の処理回数になります。</p>
<p><span class="u">二分探索は、「探索対象の真ん中の値をチェックし、その結果から探索対象を二分割して絞り込むことを繰り返す」というアルゴリズム</span>です。 だから、二分探索の計算量は、log<sub>2</sub>n なのです。</p>
<figure><figcaption>図　二分探索のオーダは分割回数を意味する log<sub>2</sub>n である</figcaption><img class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2019/09/q3_log.png" loading="lazy"><br />
</figure>
<p>以上のことから、正解はアです。</p>
<p><span class="chip mag_tp30">解答</span> ア</p>
<div class="grey lighten-5 pad_20 c-round">
関連タグ<i class="material-icons teal-text text-lighten-2">search</i>: <a href="../../tag/アルゴリズム" class="chip teal white-text">アルゴリズム</a>
</div>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_3</i></span>ビット数とコードのイメージをつなげよう</h2>
<div class="card-panel mag_h30">
<p>問 4　(平成 24 年度 秋期)</p>
<p>英字の大文字 ( A ~ Z ) と数字 ( 0 ~ 9 ) を同一のビット数で一意にコード化するには，少なくとも何ビットが必要か。<br />
ア　5　　イ　6　　ウ　7　　エ　8
</p></div>
<div class="chip">解説</div>
<p>「コード化（符号化）」とは、本来は数値でない情報を、数値に置き換えて表すことです。 置き換えられた数値を「コード」と呼びます。</p>
<p>この問題は、文字と数字を 2 進数のコードにするには、何ビット（ 2 進数で何桁）が必要になるかを答えるものです。</p>
<p>&nbsp;</p>
<p>2 進数の 1 ビットは、 0 と 1 の 2 種類のコードを表せます。</p>
<dl class="background c-round">
<dt>2 ビットなら</dt>
<dd>00 、 01 、 10 、 11 の 4 種類</dd>
<dt>3 ビットなら</dt>
<dd>000 、 001 、 010 、 011 、 100 、 101 、 110 、 111 の 8 種類</dd>
</dl>
<p>つまり、 1 ビットで 2 種類のコードを表せ、その後はビット数が 1 桁増えるごとに表せるコードの種類が 2 倍になるのです。</p>
<p>選択肢に示された 5 ビット、6 ビット、7 ビット、8 ビットで表せるコードの種類は、以下のようになります。</p>
<dl class="background c-round">
<dt>5 ビット</dt>
<dd>2 × 2 × 2 × 2 × 2 = 32 種類</dd>
<dt>6 ビット</dt>
<dd>2 × 2 × 2 × 2 × 2 × 2 = 64 種類</dd>
<dt>7 ビット</dt>
<dd>2 × 2 × 2 × 2 × 2 × 2 × 2 = 128 種類</dd>
<dt>8 ビット</dt>
<dd>2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 256 種類</dd>
</dl>
<p>A ～ Z の 26 文字と 0 ～ 9 の 10 文字を合わせると 36 文字なので、全部で 36 種類のコードが必要です。</p>
<p>5 ビットの 32 種類では足りません。 6 ビットの 64 種類あれば足りるので、イの 6 ビットが正解です。</p>
<p><span class="chip mag_tp30">解答</span> イ</p>
<p>&nbsp;</p>
<p>以下に、36 文字を 6 ビットのコードに置き換えた例を示します。 これを見れば、ビット数とコードのイメージがつながるでしょう。</p>
<p>未使用のコードがあるので、もったいない感じがしますが、5 ビットでは足りないので、6 ビットにしなければなりません。</p>
<div class="row mag_h30">
<div class="col m6">
<table class="striped centered">
<thead>
<tr>
<th>コード</th>
<th>文字</th>
<th>コード</th>
<th>文字</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>A</td>
<td>10000</td>
<td>Q</td>
</tr>
<tr>
<td>1</td>
<td>B</td>
<td>10001</td>
<td>R</td>
</tr>
<tr>
<td>10</td>
<td>C</td>
<td>10010</td>
<td>S</td>
</tr>
<tr>
<td>11</td>
<td>D</td>
<td>10011</td>
<td>T</td>
</tr>
<tr>
<td>100</td>
<td>E</td>
<td>10100</td>
<td>U</td>
</tr>
<tr>
<td>101</td>
<td>F</td>
<td>10101</td>
<td>V</td>
</tr>
<tr>
<td>110</td>
<td>G</td>
<td>10110</td>
<td>W</td>
</tr>
<tr>
<td>111</td>
<td>H</td>
<td>10111</td>
<td>X</td>
</tr>
<tr>
<td>1000</td>
<td>I</td>
<td>11000</td>
<td>Y</td>
</tr>
<tr>
<td>1001</td>
<td>J</td>
<td>11001</td>
<td>Z</td>
</tr>
<tr>
<td>1010</td>
<td>K</td>
<td>11010</td>
<td>0</td>
</tr>
<tr>
<td>1011</td>
<td>L</td>
<td>11011</td>
<td>1</td>
</tr>
<tr>
<td>1100</td>
<td>M</td>
<td>11100</td>
<td>2</td>
</tr>
<tr>
<td>1101</td>
<td>N</td>
<td>11101</td>
<td>3</td>
</tr>
<tr>
<td>1110</td>
<td>O</td>
<td>11110</td>
<td>4</td>
</tr>
<tr>
<td>1111</td>
<td>P</td>
<td>11111</td>
<td>5</td>
</tr>
</tbody>
</table>
</div>
<div class="col m6">
<table class="striped centered">
<thead>
<tr>
<th>コード</th>
<th>文字</th>
<th>コード</th>
<th>文字</th>
</tr>
</thead>
<tbody>
<tr>
<td>100000</td>
<td>6</td>
<td>110000</td>
<td>(未使用)</td>
</tr>
<tr>
<td>100001</td>
<td>7</td>
<td>110001</td>
<td>(未使用)</td>
</tr>
<tr>
<td>100010</td>
<td>8</td>
<td>110010</td>
<td>(未使用)</td>
</tr>
<tr>
<td>100011</td>
<td>9</td>
<td>110011</td>
<td>(未使用)</td>
</tr>
<tr>
<td>100100</td>
<td>(未使用)</td>
<td>110100</td>
<td>(未使用)</td>
</tr>
<tr>
<td>100101</td>
<td>(未使用)</td>
<td>110101</td>
<td>(未使用)</td>
</tr>
<tr>
<td>100110</td>
<td>(未使用)</td>
<td>110110</td>
<td>(未使用)</td>
</tr>
<tr>
<td>100111</td>
<td>(未使用)</td>
<td>110111</td>
<td>(未使用)</td>
</tr>
<tr>
<td>101000</td>
<td>(未使用)</td>
<td>111000</td>
<td>(未使用)</td>
</tr>
<tr>
<td>101001</td>
<td>(未使用)</td>
<td>111001</td>
<td>(未使用)</td>
</tr>
<tr>
<td>101010</td>
<td>(未使用)</td>
<td>111010</td>
<td>(未使用)</td>
</tr>
<tr>
<td>101011</td>
<td>(未使用)</td>
<td>111011</td>
<td>(未使用)</td>
</tr>
<tr>
<td>101100</td>
<td>(未使用)</td>
<td>111100</td>
<td>(未使用)</td>
</tr>
<tr>
<td>101101</td>
<td>(未使用)</td>
<td>111101</td>
<td>(未使用)</td>
</tr>
<tr>
<td>101110</td>
<td>(未使用)</td>
<td>111110</td>
<td>(未使用)</td>
</tr>
<tr>
<td>101111</td>
<td>(未使用)</td>
<td>111111</td>
<td>(未使用)</td>
</tr>
</tbody>
</table>
</div>
</div>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_4</i></span>仮想記憶のページインとページアウトを手作業で練習しておこう</h2>
<div class="card-panel mag_h30">
<p>問 19　(平成 24 年度 秋期)</p>
<p>ページング方式の仮想記憶において，ページ置換えアルゴリズムに LRU 方式を採用する。 主記憶に割り当てられるページ枠が 4 のとき，ページ 1 , 2 , 3 , 4 , 5 , 2 , 1 , 3 , 2 , 6 の順にアクセスすると，ページ 6 をアクセスする時点で置き換えられるページはどれか。 ここで，初期状態では主記憶にどのページも存在しないものとする。</p>
<p>ア　1　　イ　2　　ウ　4　　エ　5
</p></div>
<div class="chip">解説</div>
<p>「ページング方式の仮想記憶」とは、プログラムやデータを「ページ」と呼ばれる固定サイズで区切り、<span class="bold">実メモリ（主記憶）と仮想メモリ（ハードディスク）の間で、ページの入れ換えをすること</span> です。</p>
<p>実メモリの容量が足りなくなったときに、今度使われる可能性が低いページを仮想メモリに追い出し（ページアウト）、空いたページに必要なページを読み込む（ページイン）のです。</p>
<p>&nbsp;</p>
<p>具体例が示されて「仮想記憶のページアウトとページインを手作業でやりなさい」という問題は、午前試験にも午後試験にもよく出題されます。</p>
<p>なかなか面倒な作業なので、事前に練習しておかないと戸惑うと思います。 ここでやっておきましょう。</p>
<p>&nbsp;</p>
<p>この問題では、ページ枠（実メモリのページ数）が 4 個で、LRU 方式でページの入れ換えを行います。</p>
<p>LRU は、Least Recently Used の略で、直訳すると「最も～でない、最近、使われる」であり、わかりやすい言葉にすると「最後に使われてから最も時間が経過したページを入れ換える」です。</p>
<p>&nbsp;</p>
<p>紙の上に 4 つの枠を書いてください。 これが、実メモリの 4 ページを表します。 最初は、どのページも未使用です。</p>
<p>ここに、 1 、2 、3 、4 、5 、2 、 1 、3 、2 、6 の順にアクセスして（利用して）いきます。</p>
<p>実メモリが空いていれば、そのままページインします。 実メモリが一杯のときは、LRU 方式でページアウトしてからページインします（これがページの入れ換えです）。</p>
<p>この問題では、最後の 6 をアクセスするときにページアウトされるページを答えます。</p>
<p>&nbsp;</p>
<p>以下に手順を示しますので、やり方がわかったら、実際にやってみてください。 ★ マークは、LRU 方式におけるページアウトの対象となるページを意味しています。 このようなマークを付けるとわかりやすいはずです。</p>
<ol class="mag_h30 background c-round">
<li class="mag_h20">初期状態</li>
<table class="half-width centered border bordered">
<tr>
<td>(空き)</td>
</tr>
<tr>
<td>(空き)</td>
</tr>
<tr>
<td>(空き)</td>
</tr>
<tr>
<td>(空き)</td>
</tr>
</table>
<li class="mag_h20"> 1 をアクセスする（ 1 がページインされる）</li>
<table class="half-width centered border bordered">
<tr>
<td>1</td>
</tr>
<tr>
<td>　</td>
</tr>
<tr>
<td>　</td>
</tr>
<tr>
<td>　</td>
</tr>
</table>
<li class="mag_h20"> 2 をアクセスする（ 2 がページインされる）</li>
<table class="half-width centered border bordered">
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>　</td>
</tr>
<tr>
<td>　</td>
</tr>
</table>
<li class="mag_h20"> 3 をアクセスする（ 3 がページインされる）</li>
<table class="half-width centered border bordered">
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>　</td>
</tr>
</table>
<li class="mag_h20"> 4 をアクセスする（ 4 がページインされ、 1 がページアウトの対象になる）</li>
<table class="half-width centered border bordered">
<tr>
<td>1 <i class="material-icons">grade</i></td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
</table>
<li class="mag_h20"> 5 をアクセスする（ 1 がページアウトされ、5 がページインされ、2 がページアウトの対象になる）</li>
<table class="half-width centered border bordered">
<tr>
<td>5</td>
</tr>
<tr>
<td>2 <i class="material-icons">grade</i></td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>4</td>
</tr>
</table>
<li class="mag_h20"> 2 をアクセスする（ 3 がページアウトの対象になる）</li>
<table class="half-width centered border bordered">
<tr>
<td>5</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3 <i class="material-icons">grade</i></td>
</tr>
<tr>
<td>4</td>
</tr>
</table>
<li class="mag_h20"> 1 をアクセスする（ 3 がページアウトされ、 1 がページインされ、4 がページアウトの対象になる）</li>
<table class="half-width centered border bordered">
<tr>
<td>5</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>1</td>
</tr>
<tr>
<td>4 <i class="material-icons">grade</i></td>
</tr>
</table>
<li class="mag_h20"> 3 をアクセスする（ 4 がページアウトされ、3 がページインされ、5 がページアウトの対象になる）</li>
<table class="half-width centered border bordered">
<tr>
<td>5 <i class="material-icons">grade</i></td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>1</td>
</tr>
<tr>
<td>3</td>
</tr>
</table>
<li class="mag_h20"> 2 をアクセスする</li>
<table class="half-width centered border bordered">
<tr>
<td>5 <i class="material-icons">grade</i></td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>1</td>
</tr>
<tr>
<td>3</td>
</tr>
</table>
<li class="mag_h20"> 6 をアクセスする（ 5 がページアウトされ、6 がページインされ、 1 がページアウトの対象になる）</li>
<table class="half-width centered border bordered">
<tr>
<td>6</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>1 <i class="material-icons">grade</i></td>
</tr>
<tr>
<td>3</td>
</tr>
</table>
</ol>
<p>6 をアクセスするときにページアウトされるのは、ページ 5 です。 したがって、エが正解です。</p>
<p><span class="chip mag_tp30">解答</span> エ</p>
<div class="grey lighten-5 pad_20 c-round">
関連タグ<i class="material-icons teal-text text-lighten-2">search</i>: <a href="../../tag/fifo-lru-lfu" class="chip teal white-text">FIFO LRU LFU</a>
</div>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_5</i></span>  関係データベースの参照の整合性の意味を覚えよう</h2>
<div class="card-panel mag_h30">
問 31　(平成24年度 秋期)</p>
<p>関係データベースの &#8220;注文&#8221; 表の &#8220;顧客番号&#8221; は，&#8221;顧客&#8221; 表の主キー &#8220;顧客番号&#8221; を参照する外部キーである。 このとき，参照の整合性を損なうデータ操作はどれか。  ここで，ア ~ エの記述におけるデータの並びは，それぞれの表の列の並びと同順とする。</p>
<div class="row mag_h30">
<div class="col s6">
<table class="bordered centered">
<caption>注文</caption>
<thead>
<tr>
<th>伝票番号</th>
<th>顧客番号</th>
</tr>
</thead>
<tbody>
<tr>
<td>0001</td>
<td>C005</td>
</tr>
<tr>
<td>0002</td>
<td>K001</td>
</tr>
<tr>
<td>0003</td>
<td>C005</td>
</tr>
<tr>
<td>0004</td>
<td>D010</td>
</tr>
</tbody>
</table>
</div>
<div class="col s6">
<table class="bordered centered">
<caption>顧客</caption>
<thead>
<tr>
<th>顧客番号</th>
<th>顧客名</th>
</tr>
</thead>
<tbody>
<tr>
<td>C005</td>
<td>福島</td>
</tr>
<tr>
<td>D010</td>
<td>千葉</td>
</tr>
<tr>
<td>K001</td>
<td>長野</td>
</tr>
<tr>
<td>L035</td>
<td>宮崎</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="mag_h10">
ア　&#8221;顧客&#8221; 表の行　<span style="border: 1px solid;">　L035　</span><span style="border: 1px solid;">　宮崎　</span>　を削除する。
</div>
<div class="mag_h10">
イ　&#8221;注文&#8221; 表に行　<span style="border: 1px solid;">　0005　</span><span style="border: 1px solid;">　D010　</span>　を追加する。
</div>
<div class="mag_h10">
ウ　&#8221;注文&#8221; 表に行　<span style="border: 1px solid;">　0006　</span><span style="border: 1px solid;">　F020　</span>　を追加する。
</div>
<div class="mag_h10">
エ　&#8221;注文&#8221; 表の行　<span style="border: 1px solid;">　0002　</span><span style="border: 1px solid;">　K001　</span>　を削除する。
</div>
</div>
<div class="chip">解説</div>
<p>この問題のテーマは、関係データベースの「参照の整合性」です。</p>
<p>関係データベースの DBMS（ Data Base Management System ）には、参照の整合性を保つ機能があり、それを損なう操作を受け付けません。</p>
<p>それがどういう意味なのか、この問題を通して覚えてください。</p>
<p>&nbsp;</p>
<p>関係データベースでは、表に「主キー」を設定します。 <span class="bold">主キーは、他と重複しないユニークな列</span> であり、それによってレコードを特定できます。 注文表では、伝票番号が主キーであり、顧客表では、顧客番号が主キーです。</p>
<p>&nbsp;</p>
<p>注文表の列には、顧客表の主キーである顧客番号があります。 このような <span class="bold">他の表の主キーを「外部キー」</span> と呼びます。</p>
<p>「ある表の外部キー」→「他の表の主キー」で、表から表を参照できます。 参照とは、表から他の表をたどることであり、「リレーションシップ」とも呼びます。</p>
<figure><figcaption>図　「ある表の外部キー」→「他の表の主キー」で表から表を参照できる</figcaption><img class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2019/09/q31_relation.png" loading="lazy"><br />
</figure>
<p>参照の整合性とは、参照先のレコードが存在するように保つ機能です。</p>
<p>たとえば、先ほどの例で、顧客表の<br />
［ C005　福島 ］<br />
というレコードを削除する操作をすると、注文表の<br />
［ 0001　C005 ］<br />
というレコードからたどれなくなってしまうので（参照ができなくなってしまうので）、その操作を DBMS が受け付けません。</p>
<p>これで、参照の整合性の意味をおわかりいただけましたね。 それでは、選択肢を見てみましょう。</p>
<p>&nbsp;</p>
<p>選択肢アは、顧客表の［ L035　宮崎 ］というレコードを削除しています。 注文表には［ L035　宮崎 ］を参照しているレコードはないので、参照の整合性は損なわれません。</p>
<p>選択肢イは、注文表に［ 0005　D010 ］というレコードを追加しています。 顧客表には［ D010　千葉 ］というレコードがあるので、参照の整合性は損なわれません。</p>
<p>選択肢ウは、注文表に［ 0006　F020 ］というレコードを追加しています。 顧客表には［ F020 ］という顧客番号のレコードはないので、この操作をすると参照の整合性が損なわれます。 したがって、ウが正解です。</p>
<p>念のため選択肢エも確認しておきましょう。 注文表から［ 0002　K001 ］を削除しても、参照の向きが注文表から顧客表なので、参照の整合性は損なわれません。</p>
<p><span class="chip mag_tp30">解答</span> ウ</p>
<div class="grey lighten-5 pad_20 c-round">
関連タグ<i class="material-icons teal-text text-lighten-2">search</i>: <a href="../../tag/データベース" class="chip teal white-text">データベース</a>
</div>
<div class="divider mag_tp50 mag_bt30"></div>
<p>記事をお読みいただきありがとうございます。</p>
<p>もしも、一度解いただけでは、よくわからない問題があったなら、わかるまで何度でも練習してください。 <span class="bold">「やるべき問題」は「わかるまでやるべき問題」</span>だからです。</p>
<p>この厳選問題大全集が、受験者の皆様のお役に立てば幸いです。</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h24_autumn/">「厳選5題」過去問と解説 | 平成24年度 秋期 の過去問やるならこれをやれ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>「厳選5題」過去問と解説 &#124; 平成25年度 秋期 の過去問やるならこれをやれ</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h25_autumn/</link>
		<pubDate>Mon, 05 Aug 2019 02:32:42 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[OSI参照モデル]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[トランザクション]]></category>
		<category><![CDATA[ポート番号]]></category>
		<category><![CDATA[午前問題]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=kakomon-gensen&#038;p=1901</guid>
		<description><![CDATA[<p>ここでは、平成 25 年度 秋期 基本情報技術者試験の午前試験 の中から「やるべき問題」を 5 題に厳選し、ぶっちゃけた解説をさせていただきます。 やるべき問題とは、よく出る問題であり、かつ、練習すればできる問題（練習し [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h25_autumn/">「厳選5題」過去問と解説 | 平成25年度 秋期 の過去問やるならこれをやれ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>ここでは、<a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2013h25_2/2013h25a_fe_am_qs.pdf" rel="noopener" target="_blank">平成 25 年度 秋期 基本情報技術者試験の午前試験</a> の中から「やるべき問題」を 5 題に厳選し、ぶっちゃけた解説をさせていただきます。</p>
<p>やるべき問題とは、よく出る問題であり、かつ、練習すればできる問題（練習しないとできない問題）です。</p>
<style>h2 .chip{vertical-align:middle;background:#3f51b5;color:white;margin-right:.75em;}.chip i{font-size:2em!important;}table{font-size:.85em;}dl.inline dd{margin-left:2em;}table.border td{border:.1em solid #9e9e9e}</style>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_one</i></span>見かけは難しそうですが、実はとっても簡単な問題です</h2>
<div class="card-panel mag_h30">
問 31</p>
<p>&#8220;商品&#8221; 表に対して，更新 SQL 文を実行するトランザクションが，デッドロックの発生によって異常終了した。 異常終了後の &#8220;商品&#8221; 表はどれか。 ここで， &#8220;商品&#8221; 表に対する他のトランザクションは，参照は行うが更新はしないものとする。</p>
<table class="bordered mag_h30 responsive-width">
<caption>商品</caption>
<thead>
<tr>
<th>商品コード</th>
<th>商品名</th>
<th>販売単価</th>
</tr>
</thead>
<tbody>
<tr>
<td>A010</td>
<td>AAA</td>
<td>2,500</td>
</tr>
<tr>
<td>B020</td>
<td>BBB</td>
<td>1,000</td>
</tr>
<tr>
<td>C030</td>
<td>CCC</td>
<td>4,500</td>
</tr>
</tbody>
</table>
<p>〔更新 SQL 文〕</p>
<p><code class="language-sql">DELETE FROM 商品 WHERE 商品コード = 'B020'</code></p>
<div class="row">
<div class="col m6 s12">
ア</p>
<table class="bordered mag_h30">
<thead>
<tr>
<th>商品コード</th>
<th>商品名</th>
<th>販売単価</th>
</tr>
</thead>
<tbody>
<tr>
<td>A010</td>
<td>AAA</td>
<td>2,500</td>
</tr>
<tr>
<td>B020</td>
<td>NULL</td>
<td>1,000</td>
</tr>
<tr>
<td>C030</td>
<td>CCC</td>
<td>4,500</td>
</tr>
</tbody>
</table>
</div>
<div class="col m6 s12">
イ</p>
<table class="bordered mag_h30">
<thead>
<tr>
<th>商品コード</th>
<th>商品名</th>
<th>販売単価</th>
</tr>
</thead>
<tbody>
<tr>
<td>A010</td>
<td>AAA</td>
<td>2,500</td>
</tr>
<tr>
<td>B020</td>
<td>BBB</td>
<td>1,000</td>
</tr>
<tr>
<td>C030</td>
<td>CCC</td>
<td>4,500</td>
</tr>
</tbody>
</table>
</div>
<div class="col m6 s12">
ウ</p>
<table class="bordered mag_h30">
<thead>
<tr>
<th>商品コード</th>
<th>商品名</th>
<th>販売単価</th>
</tr>
</thead>
<tbody>
<tr>
<td>A010</td>
<td>AAA</td>
<td>2,500</td>
</tr>
<tr>
<td>C030</td>
<td>CCC</td>
<td>4,500</td>
</tr>
</tbody>
</table>
</div>
<div class="col m6 s12">
エ</p>
<table class="bordered mag_h30">
<thead>
<tr>
<th>商品コード</th>
<th>商品名</th>
<th>販売単価</th>
</tr>
</thead>
<tbody>
<tr>
<td>B020</td>
<td>BBB</td>
<td>1,000</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="chip">解説</div>
<p>この問題は、データベースに関する用語、頻出の SELECT 命令ではない SQL 文、データが入った表、などが並んでいて、一見して難しそうですが、実は、とっても簡単です。</p>
<p>「デッドロック」という言葉の意味がわかっていれば、正解を選ぶことができます。</p>
<p>&nbsp;</p>
<p><span class="bold">デッドロックとは、複数のトランザクション（データベースに対する1つの処理のまとまり）が、お互いに相手の処理が終わるのを待っていて、先に進めない状態</span> です。</p>
<p>DBMS（ Data Base Management System ）は、デッドロックを検出すると、トランザクションを <span class="bold">ロールバック</span>（トランザクションを異常終了させて、データベースの内容を元に戻すこと）します。</p>
<p>したがって、異常終了後の商品表は、問題文に示された商品表と同じ内容の選択肢イです。</p>
<p>「ええっ！ たったそれだけの問題なのですか？」と思われるかもしれませんが、そうなのです。 おそらく出題者は、デッドロックという用語をテーマにした問題を作りたかっただけなのでしょう。</p>
<p>具体例を示したので、このように大げさな問題になってしまったのです。</p>
<p>このような問題に遭遇したときは、難しそうな見かけに惑わされずに、「必ずできる！」という自信を持って解いてください。</p>
<p><span class="chip mag_tp30">解答</span> イ</p>
<p class="grey-text mag_tp30"><i class="material-icons mag_rt05">search</i>タグで関連記事を見る <a href="../../tag/データベース" class="tag">データベース</a> <a href="../../tag/トランザクション" class="tag">トランザクション</a></p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_two</i></span>共有ロックと専有ロックの違いを知っておこう</h2>
<div class="card-panel mag_h30">
問 32　(平成 25 年度 秋期)</p>
<p>表は，トランザクション 1 ~ 3 が資源 A 〜 C にかけるロックの種別を表す。 また，資源へのロックはトランザクションの開始と同時にかけられる。 トランザクション 1 ~ 3 のうち二つのトランザクションをほぼ同時に開始した場合の動きについて，適切な記述はどれか。 ここで，表中の &#8220;－&#8221; はロックなし，&#8221;S&#8221; は共有ロック， &#8220;X&#8221; は専有ロックを示す。</p>
<table class="bordered centered responsive-width">
<thead>
<tr>
<th width="40%">トランザクション ＼ 資源</th>
<th width="20%">A</th>
<th width="20%">B</th>
<th width="20%">C</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>S</td>
<td>－</td>
<td>X</td>
</tr>
<tr>
<td>2</td>
<td>S</td>
<td>X</td>
<td>－</td>
</tr>
<tr>
<td>3</td>
<td>X</td>
<td>S</td>
<td>－</td>
</tr>
</tbody>
</table>
<dl class="inline">
<dt>ア</dt>
<dd>トランザクション 1 の後にトランザクション 3 を開始したとき，トランザクション 3 の資源待ちはない。 </dd>
<dt>イ</dt>
<dd>トランザクション 2 の後にトランザクション 1 を開始したとき，トランザクション 1 の資源待ちはない。 </dd>
<dt>ウ</dt>
<dd>トランザクション 2 の後にトランザクション 3 を開始したとき，トランザクション 3 の資源待ちはない。 </dd>
<dt>エ</dt>
<dd>トランザクション 3 の後にトランザクション 1 を開始したとき，トランザクション 1 の資源待ちはない。 </dd>
</dl>
</div>
<div class="chip">解説</div>
<p>もう 1 つ、トランザクションに関する問題を紹介しましょう。</p>
<p>トランザクションは、データを処理するときに、そのデータが他のトランザクションから使われないように <span class="bold">ロック</span> をかけます。</p>
<p>他のトランザクションは、ロックが解除されるのを待つことになります。 複数のトランザクションが、お互いに相手のロックが解除されるのを待っていて、先に進めない状態になってしまうことが、先ほどの厳選問題 1 のテーマになっていたデッドロックです。</p>
<p>&nbsp;</p>
<p>ロックの種類には、<span class="bold">「共有ロック」</span> と <span class="bold">「専有ロック」</span> があり、それらがこの問題のテーマになっています。</p>
<dl class="background c-round">
<dt class="bold">共有ロック</dt>
<dd>データを参照するときにかけるロックです。 </dd>
<dt class="bold">専有ロック</dt>
<dd>データを更新（登録、更新、削除）するときにかけるロックです。</dd>
</dl>
<p>トランザクションを擬人化すれば、</p>
<dl>
<dt>共有ロック</dt>
<dd>「俺がデータを見ているから、他の奴らは更新するなよ。 ただし、見るだけならいいぞ」というイメージ</dd>
<dt>専有ロック</dt>
<dd>「俺がデータを更新しているから、他の奴らは更新するなよ。 見るのもだめだぞ」というイメージ</dd>
</dl>
<p>つまり、共有ロックがかけられたデータには、他のトランザクションから共有ロックをかけられますが、専有ロックはかけられません。 専有ロックがかけられたデータには、他のトランザクションから共有ロックも専有ロックもかけられません。</p>
<p>&nbsp;</p>
<p>それでは、問題を見てみましょう。</p>
<p>ここでは、ロックをかける A 、B 、C というデータのことを <span class="bold">「資源」</span> と呼んでいます。</p>
<p>トランザクションは 3 つあり、</p>
<ol class="background c-round">
<li>トランザクション 1 は「 A に共有ロックをかける → C に専有ロックをかける」</li>
<li>トランザクション 2 は「 A に共有ロックをかける → B に専有ロックをかける」</li>
<li>トランザクション 3 は「 A に専有ロックをかける → B に共有ロックをかける」</li>
</ol>
<p>という順序で、それぞれ処理を行います。</p>
<p>これによって、どのようなロックの資源待ち（資源のロックの解除待ち）が生じるかを、選択肢から選ぶという問題です。</p>
<p>&nbsp;</p>
<dl class="mag_h30">
<dt>ア</dt>
<dd class="mag_h10">
トランザクション 1 の後にトランザクション 3 を開始すると、先にトランザクション 1 が資源 A に共有ロックをかけ、その後でトランザクション 3 が資源 A に専有ロックをかけようとしますが、既に共有ロックがかけられているので資源待ちになります。</p>
<p>したがって、アの記述は、不適切です。 </dd>
<dt>イ</dt>
<dd class="mag_h10">
トランザクション 2 の後にトランザクション 1 を開始すると、先にトランザクション 2 が資源 A に共有ロックをかけ、その後でトランザクション 1 が資源 A に共有ロックをかけます。</p>
<p>どちらも共有ロックなので資源待ちになりません。</p>
<p>次に、トランザクション 2 は誰も使っていない資源 B に専有ロックをかけ、トランザクション 1 が誰も使っていない資源 C に専有ロックをかけます。 どちらも、資源待ちになりません。</p>
<p>したがって、イの記述は、適切です。 </dd>
<dt>ウ</dt>
<dd class="mag_h10">
トランザクション 2 の後にトランザクション 3 を開始すると、先にトランザクション 2 が資源 A に共有ロックをかけ、その後でトランザクション 3 が資源 A に専有ロックをかけようとしますが、既に共有ロックがかけられているので資源待ちになります。</p>
<p>したがって、ウの記述は、不適切です。 </dd>
<dt>エ</dt>
<dd class="mag_h10">
トランザクション 3 の後にトランザクション 1 を開始すると、先にトランザクション 3 が資源 A に専有ロックをかけ、その後でトランザクション 1 が資源 A に共有ロックをかけようとしますが、既に専有ロックがかけられているので資源待ちになります。</p>
<p>したがって、エの記述は、不適切です。 </dd>
</dl>
<p><span class="chip mag_tp30">解答</span> イ</p>
<p class="grey-text mag_tp30"><i class="material-icons mag_rt05">search</i>タグで関連記事を見る <a href="../../tag/データベース" class="tag">データベース</a></p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_3</i></span>略語の問題を練習するときには、2 つのポイントがあります</h2>
<div class="card-panel mag_h30">
問 36　(平成 25 年度 秋期)</p>
<p>電子メールで，静止画，動画，音声などの様々な情報を送ることができる仕組みはどれか。</p>
<p>ア　FTP　　イ　MIME　　ウ　POP　　エ　TELNET
</p></div>
<div class="chip">解説</div>
<p>選択肢に略語が並んでいますね。 はじめに答えを言ってしまいますが、正解はエの MIME （マイム）です。</p>
<p>これまでの連載でも何度か説明してきましたが、この手の問題を練習するときのポイントは、2 つあります。</p>
<p>&nbsp;</p>
<p>1 つは、 <span class="bold">正解となっている選択肢の略語だけを覚える</span> ことです。</p>
<p>試験では、同じ問題が何度も再利用されています。 この問題も、再利用されるときには、そのまま再利用されるはずなので、ここでは、 MIME という略語だけを覚えてください。</p>
<p>他の略語も気になるかもしれませんが、それらは、それらが正解となっている問題に遭遇したときに覚えてください。 これが、効率的な学習方法です。</p>
<p>&nbsp;</p>
<p>もう 1 つは、 <span class="bold">略語の意味を調べて覚える</span> ことです。</p>
<p>もしも、MIME を「 MIME とは、電子メールで、静止画、動画、音声など様々な情報を送ることができる仕組みである」と覚えるとしたら、MIME という言葉と説明がつながらないでしょう。</p>
<p>「 MIME って何だっけ？」<br />
「電子メールで、静止画、動画、音声など様々な情報を送ることができる仕組みって何だっけ？」</p>
<p>ということになってしまいます。</p>
<p>&nbsp;</p>
<p>MIME は、<span class="bold">Multipurpose Internet Mail Extension</span> という意味です。</p>
<p>直訳すると、「多目的なインターネットメールの拡張」です。</p>
<p>そもそも <span class="bold">インターネットの電子メールというものは、文字しか送れない</span> ようになっています。</p>
<p>静止画、動画、音声などの様々な情報を送ることができるのは、それらのデータを文字に変換してメールに添付しているからです。 その仕組みを MIME と呼びます。</p>
<p>「 MIME は、Multipurpose Internet Mail Extension という意味だ」と覚えれば、「電子メールで、静止画、動画、音声など様々な情報を送ることができる仕組みはどれか」という問題を見て、すぐに MIME を選べるはずです。</p>
<p><span class="chip mag_tp30">解答</span> イ</p>
<div class="divider mag_tp40 mag_bt10"></div>
<p class="grey-text small-text"><i class="material-icons mag_rt05">info_outline</i>MIME タイプに関する詳しい記事</p>
<p><a href="../../mastering_tech/mime_type/"></p>
<div class="row valign-wrapper pad_w20">
<div class="col s3 m2 flex pad_00"><img src="../../wp-content/uploads/2020/12/mime_cover.jpg" loading="lazy" /></div>
<div class="col s9 m10 pad_10 blue-grey-text bold">基本情報でわかる MIME タイプ 「電子メールの仕組みを知れば役割がわかる」</div>
</div>
<p></a></p>
<div class="divider mag_bt40 mag_tp10"></div>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_4</i></span>ネットワークの階層とは、どういうことかを知ってください</h2>
<div class="card-panel mag_h30">
問 37　(平成 25 年度 秋期)</p>
<p>1 個の TCP パケットをイーサネットに送出したとき，イーサネットフレームに含まれる宛先情報の，送出順序はどれか。</p>
<dl class="inline">
<dt>ア</dt>
<dd>宛先 IP アドレス，宛先 MAC アドレス，宛先ポート番号</dd>
<dt>イ</dt>
<dd>宛先 IP アドレス，宛先ポート番号，宛先 MAC アドレス</dd>
<dt>ウ</dt>
<dd>宛先 MAC アドレス， 宛先 IP アドレス，宛先ポート番号</dd>
<dt>エ</dt>
<dd>宛先 MAC アドレス，宛先ポート番号，宛先 IP アドレス</dd>
</dl>
</div>
<div class="chip">解説</div>
<p>この問題は、とってもよい問題だと思います。</p>
<p>ネットワークが階層化されているとは、どういうことかを、イメージできるようになるからです。</p>
<p>基本情報技術者試験のテーマである OSI 基本参照モデル では、ネットワークを7つの階層に分けていますが、実際に普及しているプロトコルは、</p>
<p>「アプリケーションプロトコル」<br />
「 TCP 」<br />
「 IP 」<br />
「イーサネット」</p>
<p>の 4 つの階層に分けることができます。</p>
<table class="bordered centered responsive-width">
<thead>
<tr>
<th>OSI 基本参照モデル</th>
<th>実際に普及しているプロトコル</th>
</tr>
</thead>
<tbody>
<tr>
<td>アプリケーション層</td>
<td rowspan="3">HTTP や SMTP などの<br />アプリケーションプロトコル</td>
</tr>
<tr>
<td>プレゼンテーション層</td>
</tr>
<tr>
<td>セッション層</td>
</tr>
<tr>
<td>トランスポート層</td>
<td>TCP</td>
</tr>
<tr>
<td>ネットワーク層</td>
<td>IP</td>
</tr>
<tr>
<td>データリンク層</td>
<td rowspan="2">イーサネット</td>
</tr>
<tr>
<td>物理層</td>
</tr>
</tbody>
</table>
<p>ユーザーが Web ブラウザやメールソフトなどのアプリケーションから送信したデータは、4 つの階層を上から下にたどって送出されます。</p>
<p>その際に、それぞれのプロトコルに応じた宛先と差出人などの情報が付加されるのです。</p>
<p>この情報は、データの先頭に付加されるので <span class="bold">「ヘッダ」</span> と呼ばれます。</p>
<p>&nbsp;</p>
<p>アプリケーションで作成されたデータは、 TCP → IP → イーサネット という階層を順番にたどります。</p>
<dl class="background c-round">
<dt class="bold">TCP の階層</dt>
<dd>TCP における宛先と差出人の識別番号である「 TCP ポート番号」が付加されます。 </dd>
<dt class="bold">IP の階層</dt>
<dd>IP における宛先と差出人の識別番号である「 IP アドレス」が付加されます。 </dd>
<dt class="bold">イーサネットの階層</dt>
<dd>イーサネットにおける宛先と差出人の識別番号である「 MAC アドレス」が付加されます。</dd>
</dl>
<p>この状態になったデータを「イーサネットフレーム」と呼びます。</p>
<p>大雑把にいうと、イーサネットフレームの内容は、先頭から順に MAC アドレス、IP アドレス、 TCP ポート番号、アプリケーション のデータなので、ウが正解です。</p>
<p>&nbsp;</p>
<p><i class="material-icons">arrow_back</i> イーサネットフレームを送出する方向</p>
<table class="border">
<tr>
<td>MAC アドレス</td>
<td>IP アドレス</td>
<td>TCP ポート番号</td>
<td>アプリケーションのデータ</td>
</tr>
</table>
<p><span class="chip mag_tp30">解答</span> ウ</p>
<p class="grey-text mag_tp30"><i class="material-icons mag_rt05">search</i>タグで関連記事を見る <a href="../../tag/OSI参照モデル" class="tag">OSI 参照モデル</a></p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_5</i></span>クラスの関連付けの表記方法をまとめて覚えよう</h2>
<div class="card-panel mag_h30">
問 46　(平成 25 年度 秋期)</p>
<p>UML のクラス図のうち，汎化の関係を示したものはどれか。</p>
<div class="flex wrap">
<div class="col m6 s12">
ア<br />
<img class="materialboxed hoverable" src="../../wp-content/uploads/2019/08/h25_a_q46_option_a.png" loading="lazy">
</div>
<div class="col m6 s12">
イ<br />
<img class="materialboxed hoverable" src="../../wp-content/uploads/2019/08/h25_a_q46_option_i.png" loading="lazy">
</div>
<div class="col m6 s12">
ウ<br />
<img class="materialboxed hoverable" src="../../wp-content/uploads/2019/08/h25_a_q46_option_u.png" loading="lazy">
</div>
<div class="col m6 s12">
エ<br />
<img class="materialboxed hoverable" src="../../wp-content/uploads/2019/08/h25_a_q46_option_e.png" loading="lazy">
</div>
</div>
</div>
<div class="chip">解説</div>
<p>この問題を選んだのは、UML のクラス図におけるクラスの関連付けの表記方法をまとめて覚えられるからです。</p>
<p>クラスは、現実世界のオブジェクト（物や生き物）を定型化したものです。</p>
<p>たとえば、会社に勤務している「佐藤さん」「鈴木さん」「田中さん」というオブジェクトは、「社員クラス」に定型化できます。</p>
<p>クラスは、</p>
<p>「クラス名」<br />
「属性（データ）」<br />
「操作（データを使った処理）」</p>
<p>を持ちます。 それらを 3 段重ねの四角形で示したものが、<span class="bold">クラス図</span> です。</p>
<p>この問題では、クラス名だけが示されています。</p>
<figure><figcaption>クラス図の表記方法</figcaption><img class="materialboxed z-depth-5" style="margin:auto;" src="../../wp-content/uploads/2019/08/h25_a_q46_figure2.png" loading="lazy"><br />
</figure>
<p>オブジェクト指向では、システム全体を、クラスを単位として <span class="bold">モジュール化（部品化）</span> します。</p>
<div class="row background c-round">
<div class="col m4 s12">ア <img class="materialboxed" src="../../wp-content/uploads/2019/08/h25_a_q46_option_a.png" " loading="lazy"></div>
<div class="col m8 s12">複数のクラスから構成されたシステムでは、クラスとクラスが関連を持ちます。 単に何らかの「関連」があるということは、クラスと他のクラスを直線で結んで示します。 これは、選択肢アです。</p>
<p>関連の多重度（ 1 対 1 、1 対多、多対多）を書き添えることもでき、1 を「 1 」で表し、多を「 * 」で表します。 選択肢アの多重度は、1 対 1 です。</p>
<p>このクラス図は、「自動車」と「車検証」は、1 対 1 の関連を持っていることを表しています。</p></div>
</div>
<div class="row background c-round">
<div class="col m4 s12">エ <img class="materialboxed" src="../../wp-content/uploads/2019/08/h25_a_q46_option_e.png" " loading="lazy"></div>
<div class="col m8 s12">あるクラスが他のクラスを使っていることを <span class="bold">「依存」</span> と呼びます。</p>
<p>依存は、使う側から使われる側に向かって、破線の矢印を引くことで示します。</p>
<p>選択肢エのクラス図は、「ドライバ」が「自動車」に依存している（ドライバが自動車を使う）ことを表しています。</p></div>
</div>
<div class="row background c-round">
<div class="col m4 s12">ウ <img class="materialboxed" src="../../wp-content/uploads/2019/08/h25_a_q46_option_u.png" " loading="lazy"></div>
<div class="col m8 s12">あるクラスが他のクラスを持っていることを <span class="bold">「集約」</span> と呼びます。</p>
<p>集約は、持つ側にひし形を書き添えた線を引くことで示します。</p>
<p>必須のもの（必ず持っているもの）の場合は、ひし形の内部を黒く塗りつぶし、オプション（持ってなくても構わないもの）の場合は、塗りつぶしません。</p>
<p>選択肢ウのクラス図は、「自動車」が「タイヤ」と「エンジン」を集約している（自動車がタイヤとエンジンを持っている）こと、そしてタイヤとエンジンが必須のものであることを表しています。</p>
<p>さらに、どちらも多重度が 1 対多であることを表しています。</p></div>
</div>
<div class="row background c-round">
<div class="col m4 s12">イ <img class="materialboxed" src="../../wp-content/uploads/2019/08/h25_a_q46_option_i.png" loading="lazy"></div>
<div class="col m8 s12">あるクラスの上位概念のクラスを定義することを <span class="bold">「汎化」</span> と呼びます。</p>
<p>汎化は、上位概念のクラスに向かって、三角形を書き添えた線を引くことで示します。</p>
<p>選択肢イのクラス図は、「スポーツカー」の上位概念として「自動車」を定義することを表しています。</p></div>
</div>
<p>この問題は、汎化を表しているクラス図を選ぶものなので、選択肢イが正解です。</p>
<p>&nbsp;</p>
<p>汎化は、少しわかりにくいと思いますので、補足説明をしておきましょう。</p>
<p>問題に示された「スポーツカー」の上位概念が「自動車」であるという例より、複数のクラスの共通点を抽出したクラスを定義するという例の方が、わかりやすいでしょう。</p>
<p>以下のクラス図は、「スポーツカー」と「トラック」の共通点を抽出したクラスとして「自動車」を定義しています。 スポーツカーとトラックは、どちらも自動車だからです。 この場合、自動車を「スーパークラス（上位クラス）」、スポーツカーとトラックを「サブクラス（下位クラス）」と呼びます。</p>
<figure>
<img class="materialboxed" style="margin:auto;" src="../../wp-content/uploads/2019/08/h25_a_q46_figure.png" loading="lazy"><br />
</figure>
<p><span class="chip mag_tp30">解答</span> イ</p>
<p class="grey-text mag_tp30"><i class="material-icons mag_rt05">search</i>タグで関連記事を見る <a href="../../tag/uml" class="tag">UML</a></p>
<p>&nbsp;</p>
<div class="divider mag_h50"></div>
<p>記事をお読みいただきありがとうございます。</p>
<p>もしも、一度解いただけでは、よくわからない問題があったなら、わかるまで何度でも練習してください。 <span class="bold">「やるべき問題」は「わかるまでやるべき問題」</span>だからです。</p>
<p>この厳選問題大全集が、受験者の皆様のお役に立てば幸いです。</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h25_autumn/">「厳選5題」過去問と解説 | 平成25年度 秋期 の過去問やるならこれをやれ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>「厳選5題」過去問と解説 &#124; 平成26年度 春期 の過去問やるならこれをやれ</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h26_spring/</link>
		<pubDate>Mon, 22 Jul 2019 03:19:20 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[2進数]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[午前問題]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=kakomon-gensen&#038;p=1787</guid>
		<description><![CDATA[<p>ここでは、平成 26 年度 春期 基本情報技術者試験の午前試験 の中から「やるべき問題」を 5 題に厳選し、ぶっちゃけた解説をさせていただきます。 やるべき問題とは、よく出る問題であり、かつ、練習すればできる問題（練習し [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h26_spring/">「厳選5題」過去問と解説 | 平成26年度 春期 の過去問やるならこれをやれ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>ここでは、<a href="https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_fe_am_qs.pdf" rel="noopener" target="_blank">平成 26 年度 春期 基本情報技術者試験の午前試験</a> の中から「やるべき問題」を 5 題に厳選し、ぶっちゃけた解説をさせていただきます。</p>
<p>やるべき問題とは、よく出る問題であり、かつ、練習すればできる問題（練習しないとできない問題）です。</p>
<div class="small-text blue-grey-text pad_20 grey lighten-5 mag_h30">
<i class="material-icons light-blue-text mag_rt05">info</i>本記事ではわかりやすいよう、シンタックスハイライトや囲みなどを入れています</span>
</div>
<style>h2 .chip{vertical-align:middle;background:#3f51b5;color:white;margin-right:.75em;}.chip i{font-size:2em!important;}table{font-size:.85em;}.card-panel>pre{margin-right:-24px;margin-left:-24px;padding-right:24px;padding-left:24px}article>pre{margin:1em -7.5%;padding:1em 7.5%}dl.inline dd{margin-left:2em}td,th{border:1px solid rgba(0,0,0,.12)}</style>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_one</i></span>小数点以下 4 桁まで、2 進数の桁の重みを書き出してみよう</h2>
<div class="card-panel mag_h30">
問 1　(平成 26 年度 春期)</p>
<p>次の 10 進小数のうち， 2 進数で表すと無限小数になるものはどれか。</p>
<p>ア　0.05　　イ　0.125　　<br class="hide-on-med-and-up">ウ　0.375　　エ　0.5
</div>
<div class="chip">解説</div>
<p>これは、練習しないとできない問題の典型でしょう。 ただし、練習すれば簡単にできるようになりますので、しっかり覚えてください。</p>
<p>まず、問題の趣旨を説明しましょう。</p>
<p>コンピュータの内部では、データが 2 進数で取り扱われています。</p>
<p>10 進数では、単純な小数点数であっても、それを <span class="bold">2 進数に変換すると、永遠に続く無限小数になってしまうものがあります。 </span></p>
<p>この無限小数は、途中で打ち切られることになるので、誤差が生じることになります。 それは、選択肢の中で、どの 10 進数でしょうか、という問題です。</p>
<p>&nbsp;</p>
<p>問題の解き方を説明しましょう。</p>
<p>基本情報技術者試験の会場には、電卓を持ち込めないので、面倒な計算が必要になる問題は、出題されません。 これまでの過去問題を見ると、2 進数の小数点数は、小数点以下 4 桁までしか出題されていません。</p>
<p>小数点以下 4 桁までの桁の重みを暗算で書き出してみましょう。</p>
<table class="responsive-width">
<thead>
<tr>
<th>小数点</th>
<th>0.5</th>
<th>0.25</th>
<th>0.125</th>
<th>0.0625</th>
</tr>
</thead>
<tbody>
<tr>
<td> . </td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p><span class="bold">2 進数は、桁が 1 つ下がると、桁の重みが 1 / 2</span> になります。</p>
<p>整数部の 1 桁目の桁の重みが 1 なので、小数点以下の桁の重みは、</p>
<div class="background c-round">
1 の 1 / 2 の 0.5<br />
0.5 の 1 / 2 の 0.25<br />
0.25 の 1 / 2 の 0.125<br />
0.125 の 1 / 2 の 0.0625
</div>
<p>です。</p>
<p><span class="bold">2 進数を 10 進数に変換するには、桁の重みと桁の数を掛けて集計</span> します。 これは、整数部でも小数点以下でも同様です。</p>
<p>そのため、小数点以下 4 桁までの 2 進数を 10 進数に変換すると、 0.5 、 0.25 、 0.125 、 0.0625 のいずれかを足し合わせた数になります。</p>
<p>選択肢に示された数が、 0.5 、 0.25 、 0.125 、 0.0625 のいずれかを足し合わせた数なら、小数点以下 4 桁までの 2 進数で表せます（ 2 進数で 無限小数 になりません）。</p>
<p>そうでないなら、2 進数で 無限小数 になります。 選択肢の中に 無限小数 になるものが、1 つだけあるはずだからです。</p>
<dl class="background inline c-round">
<dt>ア</dt>
<dd>0.05 は、 0.5 、 0.25 、 0.125 、 0.0625 のいずれかを足し合わせた数ではありません。 </dd>
<dt>イ</dt>
<dd>0.125 は、 0.125 そのものです。 </dd>
<dt>ウ</dt>
<dd>0.375 は、 0.375 = 0.25 + 0.125 です。 </dd>
<dt>エ</dt>
<dd>0.5 は、 0.5 そのものです。 </dd>
</dl>
<p>イ、ウ、エは、 0.5 、 0.25 、 0.125 、 0.0625 のいずれかを足し合わせた数なので、そうでない ア が 2 進数で無限小数になるはずです。</p>
<p>正解は、アです。</p>
<p><span class="chip mag_tp30">解答</span>ア</p>
<div class="divider mag_h30"></div>
<p><i class="material-icons light-blue-text">search</i><span class="grey-text mag_w10">タグで関連記事をチェック</span><a href="../../tag/2進数" class="tag">2進数</a></p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_two</i></span>この問題を通して、関係データベースの「掟（おきて）」を知っておこう</h2>
<div class="card-panel mag_h30">
問 26　(平成26年度 春期)</p>
<p>項目 a の値が決まれば項目 b の値が一意に定まることを， a → b で表す。 例えば，社員番号が決まれば社員名が一意に定まるという表現は，社員番号 → 社員名である。  この表記法に基づいて，図の関係が成立している項目 a ~ j を，関係データベース上の三つのテーブルで定義する組合せとして，適切なものはどれか。</p>
<figure class="mag_h30">
<img class="hoverable materialboxed z-depth-5" style="margin:auto;" src="../../wp-content/uploads/2019/07/h26_spring_q26_figure.png" alt="" loading="lazy" /><br />
</figure>
<dl class="inline">
<dt>ア</dt>
<dd>テーブル 1 ( a )<br />
テーブル 2 ( b , c , d , e )<br />
テーブル 3 ( f , g , h , i , j )</dd>
<dt>イ</dt>
<dd>テーブル 1 (a , b , c , d , e )<br />
テーブル 2 (b , f , g , h )<br />
テーブル 3 (e , i , j )</dd>
<dt>ウ</dt>
<dd>テーブル 1 (a , b , f , g , h )<br />
テーブル 2 ( c , d )<br />
テーブル 3 ( e , i , j )</dd>
<dt>エ</dt>
<dd>テーブル 1 ( a , c , d )<br />
テーブル 2 ( b , f , g , h )<br />
テーブル 3 ( e , i , j )</dd>
</dl>
</div>
<div class="chip">解説</div>
<p>データを表形式で格納する関係データベースには、必ず守らなければならないルールがあります。</p>
<p>それは、</p>
<p><span class="bold">「表には主キー（他と同じ値にならないユニークな列）があること」</span><br />
<span class="bold">「表には主キーに従属した（主キーによって一意に定まる）値だけがあること」</span></p>
<p>の 2 つです。 これらは、関係データベースの「掟（おきて）」と呼べるものです。 この掟がわかれば、この問題も簡単にできます。</p>
<p>&nbsp;</p>
<p>問題をみてみましょう。</p>
<p>何やら得体の知れない図が示されていますが、アルファベットの a 、b 、c 、・・・、j で示された項目が、どれによってどれが一意に定まるかを矢印で示しているのでしょう。</p>
<p>したがって、この図は、</p>
<p><span class="red-text bold">「 a が主キーであり、それに従属した b 、c 、d 、e という項目がある表」</span><br />
<span class="blue-text bold">「 b が主キーであり、それに従属した f 、g 、h という項目がある表」</span><br />
<span class="green-text bold">「 e が主キーであり、それに従属した i 、j という項目がある表」</span></p>
<p>の 3 つを表しています。</p>
<figure>
<img class="responsive-width hoverable materialboxed z-depth-5"  src="../../wp-content/uploads/2019/07/h26_spring_q26_figure2.png" alt="" loading="lazy" /><br />
</figure>
<p>選択肢を見ると、これまた何やら得体の知れない表現ですが、「テーブル名(項目名 1, 項目名 2, ・・・)」という意味なのでしょう。 したがって、イが正解です。</p>
<p><span class="chip mag_tp30">解答</span>イ</p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_3</i></span>選択肢の SQL 文の違いに注目して消去法で答えを絞り込もう</h2>
<div class="card-panel mag_h30">
問 28　(平成 26 年度 春期)</p>
<p>&#8220;商品&#8221; 表，&#8221;在庫&#8221; 表に対する次の SQL 文の結果と同じ結果が得られる SQL 文はどれか。 ここで，下線部は主キーを表す。 </p>
<p class="hide-on-med-and-up small-text grey-text"><i class="material-icons mag_rt05">info</i>右にスクロールできます</p>
<pre><code class="language-sql">SELECT 商品番号 FROM 商品
　　WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫) </code></pre>
<div class="row mag_h30">
<div class="col m6 s12">
<table>
<caption>商品</caption>
<thead>
<tr>
<th><span style="border-bottom: solid 1px;">商品番号</th>
<th>商品名</th>
<th>単価</th>
</tr>
</thead>
</table>
</div>
<div class="col m6 s12">
<table>
<caption>在庫</caption>
<thead>
<tr>
<th><span style="border-bottom: solid 1px;">倉庫番号</th>
<th><span style="border-bottom: solid 1px;">商品番号</th>
<th>在庫表</th>
</tr>
</thead>
</table>
</div>
</div>
<p>ア　</p>
<pre><code class="language-sql">SELECT 商品番号 FROM 在庫
　　　　WHERE EXISTS (SELECT 商品番号 FROM 商品)</code></pre>
<p>イ　</p>
<pre><code class="language-sql">SELECT 商品番号 FROM 在庫
　　　　WHERE NOT EXISTS (SELECT 商品番号 FROM 商品)</code></pre>
<p>ウ　</p>
<pre><code class="language-sql">SELECT 商品番号 FROM 商品
　　　　WHERE EXISTS (SELECT 商品番号 FROM 在庫
　　　　　　　　　　WHERE 商品.商品番号 = 在庫.商品番号)</code></pre>
<p>エ　</p>
<pre><code class="language-sql">SELECT 商品番号 FROM 商品
　　　　WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫
　　　　　　　　　　　　　WHERE 商品.商品番号 = 在庫.商品番号)</code></pre>
</div>
<div class="chip">解説</div>
<p>問題に示された SQL 文と同じ結果が得られる SQL 文を、選択肢から選ぶ問題です。</p>
<p>どの SQL 文も WHERE 句に SELECT 命令がある <span class="bold">副問合せ</span> になっています。</p>
<p>見るからに難しそうですが、選択肢の SQL 文の違いに注目して消去法で答えを絞り込んでいけば、簡単にできますので、どうぞ安心してください。</p>
<p>&nbsp;</p>
<p>まず、FROM 句を見てみましょう。</p>
<p>問題に示された SQL 文は、「 FROM 商品」です。</p>
<p>選択肢アとイは、「 FROM 在庫」であり、ウとエは「 FROM 商品」です。 同じ結果が得られる SQL 文を選ぶのですから、「 FROM 商品」であるべきです。</p>
<p>これで、答えをウとエに絞れます。</p>
<pre class="grey lighten-5 mag_h50" style="font-family:'consolas','Courier New','HCo Gotham SSm',Gotham,'ヒラギノ角ゴ Pro W3','Hiragino Kaku Gothic ProN','Hiragino Sans','BIZ UDPGothic',Meiryo,sans-serif!important;">
SELECT 商品番号 <span style="padding: 5px; margin-bottom: 5px; border: 2px dashed red;">FROM 商品</span> <span class="red-text">これと同じ結果になるSQL文を選ぶ</span>
　　WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫)

ア　SELECT 商品番号 <span style="padding: 5px; margin-bottom: 5px; border: 2px dashed red;">FROM 在庫</span> <i class="material-icons red-text">close</i>
　　　　WHERE EXISTS (SELECT 商品番号 FROM 商品)
イ　SELECT 商品番号 <span style="padding: 5px; margin-bottom: 5px; border: 2px dashed red;">FROM 在庫</span> <i class="material-icons red-text">close</i>
　　　　WHERE NOT EXISTS (SELECT 商品番号 FROM 商品)
ウ　SELECT 商品番号 <span style="padding: 5px; margin-bottom: 5px; border: 2px dashed red;">FROM 商品</span> <i class="material-icons red-text">panorama_fish_eye</i>
　　　　WHERE EXISTS (SELECT 商品番号 FROM 在庫
　　　　　　　　　　　　　　WHERE 商品.商品番号 = 在庫.商品番号)
エ　SELECT 商品番号 <span style="padding: 5px; margin-bottom: 5px; border: 2px dashed red;">FROM 商品</span> <i class="material-icons red-text">panorama_fish_eye</i>
　　　　WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫
　　　　　　　　　　　　　　　　　WHERE 商品.商品番号 = 在庫.商品番号)
<span class="hide-on-med-and-up grey-text small-text"><i class="material-icons mag_rt05">info</i>右にスクロールできます</span>
</pre>
<p>次に、選択肢ウとエを比べてみましょう。 違いは、EXISTS の前に NOT があるかどうかだけです。</p>
<p>問題に示された SQL 文の条件は、「在庫表から取り出した商品番号の中に、商品番号がない ( NOT IN ) 」です。</p>
<p>ウとエの EXISTS 句 の後にある SELECT 命令 は、「商品表と在庫表を商品番号で結合して、在庫表から商品番号を取り出せ」です。</p>
<p>この商品番号が存在しなければ、問題に示された SQL 文と同じ条件になるので、 NOT があるエが正解です。</p>
<pre class="grey lighten-5 mag_h50" style="font-family: Consolas, 'Courier New', 'Noto Sans JP';">
SELECT 商品番号 FROM 商品
　　WHERE 商品番号 <span style="padding: 5px; margin-bottom: 5px; border: 2px dashed red;">NOT IN</span> (SELECT 商品番号 FROM 在庫)
　　　　　　　　　　<span class="red-text">これと同じ結果になる SQL 文を選ぶ</span>

ウ　SELECT 商品番号 FROM 商品
　　　　WHERE <span style="padding: 5px; margin-bottom: 5px; border: 2px dashed red;">EXISTS</span> (SELECT 商品番号 FROM 在庫
　　　　　　　　<i class="material-icons red-text">close</i>　　　　WHERE 商品.商品番号 = 在庫.商品番号)
エ　SELECT 商品番号 FROM 商品
　　　　WHERE <span style="padding: 5px; margin-bottom: 5px; border: 2px dashed red;">NOT EXISTS</span> (SELECT 商品番号 FROM 在庫
　　　　　　　　<i class="material-icons red-text">panorama_fish_eye</i>　　　　　　　　WHERE 商品.商品番号 = 在庫.商品番号)
</pre>
<p><span class="chip mag_tp30">解答</span>エ</p>
<div class="divider mag_h30"></div>
<p><i class="material-icons light-blue-text">search</i><span class="grey-text mag_w10">タグで関連記事をチェック</span><a href="../../tag/sql" class="tag">SQL</a></p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_4</i></span>トランザクションの ACID 特性は、自分流のわかりやすい説明で覚えよう</h2>
<div class="card-panel mag_h30">
問 29　(平成 26 年度 春期)</p>
<p>トランザクションが，データベースに対する更新処理を完全に行うか，全く処理しなかったかのように取り消すか，のどちらかの結果になることを保証する特性はどれか。</p>
<p>ア　一貫性 ( consistency ) 　　<br class="hide-on-med-and-up">イ　原子性 ( atomicity )<br />
ウ　耐久性 ( durability )　　<br class="hide-on-med-and-up">エ　独立性 ( isolation )
</div>
<div class="chip">解説</div>
<p>利用者から見たデータベースに対する1つのまとまった処理を <span class="bold">「トランザクション」</span> と呼びます。</p>
<p>利用者から見たと断っているのは、コンピュータから見たら 1 つのトランザクションが複数の処理（複数の SQL 文）で構成されている場合が多々あるからです。</p>
<p>&nbsp;</p>
<p>代表的な例としてよく取り上げられるのは、銀行の振込処理です。</p>
<p>たとえば、「 A さんが B さんに 1 万円振り込む」という処理は、ユーザーである A さんから見れば 1 つのまとまった処理（トランザクション）ですが、コンピュータからみれば</p>
<p>「 A さんの口座の残高を &#8211; 1 万円して更新する」<br />
「 B さんの口座の残高を + 1 万円して更新する」</p>
<p>という 2 つの処理です。</p>
<p>&nbsp;</p>
<p>トランザクションには、「トランザクションとは、こういうものでなければいけない」という性質があり、 <span class="bold">ACID（アシッド）特性</span> と呼ばれます。</p>
<p>ACID は、選択肢に示された 4 つの言葉の頭文字を取ったものです。</p>
<p>「原子性（ atomicity ）」<br />
「一貫性（ consistency ）」<br />
「独立性（ isolation ）」<br />
「耐久性（ durability ）」</p>
<p>どれも難しそうな言葉ですね。</p>
<p>こういう言葉を覚えるときは、自分流のわかりやすい説明を作るとよいでしょう。 そうすれば、簡単に覚えられます。</p>
<p>以下に例を示します。</p>
<dl class="background c-round mag_h30">
<dt class="bold">原子性（ atomicity ）</dt>
<dd>原子のように分割できない こと</dd>
<dt class="bold">一貫性（ consistency ）</dt>
<dd>実行後のデータの内容に 矛盾が生じない こと</dd>
<dt class="bold">独立性（ isolation ）」</dt>
<dd> 処理途中の中途半端なデータが外部から見えない こと</dd>
<dt class="bold">耐久性（ durability ）」</dt>
<dd>実行後のデータが 確実に保存され失われない こと</dd>
</dl>
<p>それでは、問題文を見てみましょう。</p>
<blockquote><p><span class="grey-text">更新処理を完全に行うか、全く処理しなかったとように取り消すか、のどちらかの結果になることを保証する特性</span></p></blockquote>
<p>を ACID から選ぶという内容になっています。</p>
<p>先ほどの銀行の振込処理のように、複数の処理から構成されたトランザクションは、すべての処理を行わねば適切な結果が得られません。</p>
<p>もしも、いずれかの処理を行えなかった場合は、すべての処理を取り消す必要があります。</p>
<p>つまり、トランザクションは、分割して部分的に実行できないのです。 分割できないのですから、これは原子性（ atomicity ）です。 したがって、正解はイです。</p>
<p><span class="chip mag_tp30">解答</span>イ</p>
<h2><span class="chip">厳選問題<i class="material-icons mag_lt05">looks_5</i></span>JIS の定義からセキュリティの本質がわかる</h2>
<div class="card-panel mag_h30">
問 39　(平成 26 年度 春期)</p>
<p>情報セキュリティにおける &#8220;完全性&#8221; を脅かす攻撃はどれか。</p>
<dl class="inline">
<dt>ア</dt>
<dd>Web ページの改ざん</dd>
<dt>イ</dt>
<dd>システム内に保管されているデータの不正コピー</dd>
<dt>ウ</dt>
<dd>システムを過負荷状態にする DoS 攻撃</dd>
<dt>エ</dt>
<dd>通信内容の盗聴</dd>
</dl>
</div>
<div class="chip">解説</div>
<p>JIS（ JIS Q27001 ）では、「情報セキュリティ」という言葉を「情報の機密性、完全性及び可用性を維持すること」と定義しています。</p>
<p>「機密性」「完全性」「可用性」どれも難しそうな言葉ですね。</p>
<p>先ほどの ACID 特性と同様に、こういう言葉を覚えるときは、自分流のわかりやすい説明を作るとよいでしょう。 そうすれば、簡単に覚えられます。</p>
<p>以下に例を示します。</p>
<dl class="background c-round">
<dt class="bold">機密性（ confidentiality ）</dt>
<dd>情報漏えいが起こらないようにすること</dd>
<dt class="bold">完全性（ integrity ）</dt>
<dd>情報の改ざんが起こらないようにすること</dd>
<dt class="bold">可用性（ availability ）</dt>
<dd>情報の利用停止が起こらないようにすること</dd>
</dl>
<p>選択肢ア～ウは、機密性、完全性、可用性 のいずかを脅かす攻撃になっているはずです。</p>
<dl class="inline">
<dt>ア</dt>
<dd>「 Web ページの改ざん」は、完全性 を脅かします。 </dd>
<dt>イ</dt>
<dd>「不正コピー」は、情報が洩れるので、機密性 を脅かします。 </dd>
<dt>ウ</dt>
<dd>「 DoS 攻撃」は、サービスを停止させるので、可用性 を脅かします。 </dd>
<dt>エ</dt>
<dd>「盗聴」は、情報が洩れるので、機密性 を脅かします。 </dd>
</dl>
<p>ここでは、完全性を脅かす攻撃を選ぶのですから、選択肢アが正解です。</p>
<p>&nbsp;</p>
<p>セキュリティという言葉は、なかなかつかみどころのないものですが、この問題を通して <span class="bold">機密性、完全性、可用性という 3 つのポイントがある</span> ことを知ってください。</p>
<p>これは、セキュリティの本質がわかる、とってもよい問題です。</p>
<p><span class="chip mag_tp30">解答</span>ア</p>
<div class="divider mag_h50 mag_bt30"></div>
<p>記事をお読みいただきありがとうございます。</p>
<p>もしも、一度解いただけでは、よくわからない問題があったなら、わかるまで何度でも練習してください。 <span class="bold">「やるべき問題」は「わかるまでやるべき問題」</span>だからです。</p>
<p>この厳選問題大全集が、受験者の皆様のお役に立てば幸いです。</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kakomon-gensen/h26_spring/">「厳選5題」過去問と解説 | 平成26年度 春期 の過去問やるならこれをやれ</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>第2回 データベース &#124; 先を見据えた基本情報技術者試験対策</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/chishiki_career/database/</link>
		<pubDate>Fri, 15 Jun 2018 07:19:42 +0000</pubDate>
		<dc:creator><![CDATA[三好 康之]]></dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[ステップアップ基本情報技術者]]></category>
		<category><![CDATA[データベース]]></category>
		<category><![CDATA[正規化]]></category>

		<guid isPermaLink="false">http://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=chishiki_career&#038;p=201</guid>
		<description><![CDATA[<p>出題傾向 データベースの問題は、午前問題で 5 問、午後問題で 1 問（平成 29 年度 秋期）出題されています。 SQL 文の SELECT 、制約 基本情報技術者試験の試験勉強をしている間に仕上げておきたい分野 No [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/chishiki_career/database/">第2回 データベース | 先を見据えた基本情報技術者試験対策</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<h2>出題傾向</h2>
<p>データベースの問題は、午前問題で 5 問、午後問題で 1 問（平成 29 年度 秋期）出題されています。</p>
<h2>SQL 文の SELECT 、制約</h2>
<p>基本情報技術者試験の試験勉強をしている間に仕上げておきたい分野 No.1 は、<span class="bold">SQL 文</span> になります。</p>
<p>基本情報技術者試験 の 午後問題 の中心になる分野であり、過去に出題された 午前問題 の数も多く、基本情報技術者試験 の合格のためには必須になるところですが、それだけではありません。</p>
<p>次のステップの 応用情報技術者試験 でも中心になり、その次のステップの高度系の データベーススペシャリスト試験 においても、ここ数年は避けては通れない分野になっているからです。</p>
<p>筆者は、平成 15 年からもうかれこれ 15 年間にわたって、データベーススペシャリスト試験 の試験対策本を出しています。翔泳社のこの本です。</p>
<p><a href="https://www.shoeisha.co.jp/book/detail/9784798157948"><img class="mag_h50 hoverable" src="../../wp-content/uploads/2018/06/cover_sp_database.png" alt="" /></a></p>
<p>その中にも書いていますが、以前は SQL の問題を解かなくても合格することができました。つまり SQL の知識が無くても合格できていました。</p>
<p>高度系の中でも特に、データベーススペシャリスト試験 は出題パターンが固定化していたことや、問題数も午後 が 4 問だったこと、午後Ⅱではほとんど出題されなかったことなどから避けることができていました。</p>
<p>&nbsp;</p>
<p>しかし、平成 21 年から午後Ⅰの問題数は 3 問に減少し、平成 26 年から固定化も崩れ始めました。</p>
<p>午後Ⅱ試験でも 物理設計 の問題が定番化し、性能見積り や 評価 で SQL に関する知識が求められています。</p>
<p>SQL インジェクション対策 などで &#8220;セキュアプログラミング&#8221; の重要性が高まることも無関係ではないと思います。</p>
<p>&nbsp;</p>
<p>平成 26 年以後、<span class="bold">SQLは「捨てられない分野」となっています。</span></p>
<p>基本情報技術者試験では、特に &#8220;SELECT 文（選択）&#8221; と &#8220;制約&#8221; が中心ですが、実は SQL に関しては、レベル 2（基本情報技術者試験）と レベル 4（データベーススペシャリスト試験）で大差ありません。</p>
<p>したがって「 SQL は 基本情報技術者試験で仕上げておく！」という意気込みで挑めば、後々楽になるのは間違いありません。</p>
<p>高度系では、午後Ⅰ・午後Ⅱ対策としての「概念データモデルと関係スキーマの設計」の学習に専念できます。</p>
<h2>正規化（第3正規形まで）</h2>
<p>また、<span class="bold">正規化</span> の問題も、基本情報技術者試験、応用情報技術者試験、データベーススぺシャリスト試験 のいずれでも出題されます。</p>
<p>基本情報技術者試験では出題されない年度もあるので、正規化に関する知識が無くても合格できますが、高度系のデータベーススペシャリスト試験では、午後Ⅰ では必須（毎年必ず出題されている）で、午後Ⅱ でも直接的に問われることは無いが &#8220;知っていることが前提&#8221; で問題が作られています。</p>
<p>このため高度系になると避けては通れない分野になります。</p>
<p>&nbsp;</p>
<p>そこでおススメなのが次のように段階的に正規化を抑えていくことです。時間をかけてじっくりと熟成させることで、記憶への定着率を高めましょう。</p>
<h3>正規化 学習のステップ</h3>
<ol class="background c-round">
<li>基本情報技術者試験：第 3 正規形まで（厳密な定義ではなく、シンプルにキーワードを覚えるイメージ）</li>
<li>応用情報技術者試験：特になし</li>
<li>データベーススペシャリスト試験：第 3 正規形（厳密な定義）、第 5 正規形まで</li>
</ol>
<h2>キー</h2>
<p>高度系のデータベーススペシャリスト試験では、</p>
<p>主キー<br />
候補キー<br />
スーパーキー<br />
外部キー<br />
代理キー<br />
代替キー</p>
<p>など様々な &#8220;キー&#8221; が登場します。</p>
<p>特に、候補キーは午前、午後ともに頻出問題です。</p>
<p>&nbsp;</p>
<p>このうち基本情報技術者試験では、 &#8220;主キー&#8221; と &#8220;外部キー&#8221; が出題されます。</p>
<p>先に説明した &#8220;SQL 文&#8221; でいうところの &#8220;主キー制約&#8221; と &#8220;外部キー制約&#8221; です。</p>
<p>この 2 つの &#8220;キー&#8221; を、基本情報技術者試験で仕上げておけば高度系の試験対策が本当に楽になります。特に外部キーに関しては覚えることも少なくありません。</p>
<p>しかも、高度系の午後Ⅱ試験で必ず出題されている概念データモデルの作成に関する問題のうち、エンティティ間のリレーションシップを追加時に必要な知識になります。</p>
<p>したがって、レベル 2 の段階で仕上げておくと高度系ではかなり楽になります。</p>
<h2>まとめ</h2>
<p>データベースは IT エンジニアの必須スキルのひとつ。テクニカル系分野の中では、覚えないといけない基礎知識は少ない方かもしれませんが、その分、高度系では応用力が試されます。</p>
<p>筆者はデータベーススペシャリストの試験対策もやっていますが、いつも思うのは「 SQL に強くあってほしい！」ということです。</p>
<p>経験者でなくても、基本情報技術者試験か応用情報技術者試験で SQL を仕上げておいてほしいところです。</p>
<p>というのも、高度系試験対策で優先されるのは、やはり概念データモデルと関係スキーマの設計や、物理設計、チューニングなどになるからです。</p>
<p>基礎になる SQL の解説をやっていると倍以上に時間がかかりますし、だからと言って SQL を避けると &#8220;不合格のリスク&#8221; は高まります。</p>
<p>&nbsp;</p>
<p>そういうわけで、この先データベーススペシャリスト試験の合格を狙っている人は、ぜひ、ここで紹介している分野をしっかりと学習して仕上げておきましょう。</p>
<p>&nbsp;</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/chishiki_career/database/">第2回 データベース | 先を見据えた基本情報技術者試験対策</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
	</channel>
</rss>
