【1次試験】SQLなんか怖くない! byおのD
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
- 1. そもそもデータベースとは?
- 2. そもそもSQLとは?
- 3. SQLの基本構文
- 4. データの操作
- 4.1. フィルタリング(WHERE句)
- 4.1.1. 演算子
- 4.1.2. 抽出したいデータ①
- 4.1.3. 抽出したいデータ②
- 4.1.4. 抽出したいデータ③
- 4.2. データのソート(ORDER BY句)
- 4.2.1. 昇順・降順の指定
- 4.2.2. 抽出したいデータ
- 4.3. データの集計(GROUP BY句)
- 4.3.1. 集計関数
- 4.3.2. 抽出したいデータ①
- 4.3.3. 抽出したいデータ②
- 4.4. 応用トピック:副問合せ(サブクエリ)
- 4.4.1. 抽出したいデータ
- 4.5. 応用トピック:権限の付与と剥奪
- 5. おわりに
こんにちは、おのDです!
今日もLet’sスタD!
1次試験まであと28日となりました。(7月8日現在)
今日はSQLについてお話していきます。
経営情報システムの科目では、毎年のようにデータベースに関して出題されています。
特に、SQLは捨て問にされがちということですが、僕としてはちょっと勿体ない気もしてます。
以前、ひろしも同じような話をしていました。
もちろん、こういうプログラミング言語的なものはアレルギー反応があって、全く見る気がしない!ってことから捨て問としてバッサリ捨てる戦略も全然アリだと思います!
ただ、出題頻度が低い論点ならまだしも、毎年出ている頻出論点を捨てるのは勿体ないです。
そこで、今日は勉強の休憩時間にさらっと読んで、さらっと分かるようにデータベース関連の知識を解説していこうと思います。
そもそもデータベースとは?
要はたくさんの情報を整理して保存する場所です。
大きな箱の中にたくさんの引き出しがあり、それぞれの引き出しには情報が入っていると考えてください。
たとえば、1次試験の結果通知書を考えてみます。この山積みにされた1次試験の結果通知書には、名前や各科目の点数が記載されており、ここから、自分の分を探したり、もしくは平均点を算出するのはとても大変です。
そこで、データベースを使います。データベースは、それぞれの情報を適切な引き出し(テーブルと呼ばれます)に整理して保存します。
データベースの具体的なイメージとしては、エクセルの表がいっぱい集まっている、そのようなイメージが良いと思います。
そもそもSQLとは?
要はデータベースを操作するための言語です。
「SQL:Structured Query Language」の略で、直訳すると構造化問合せ言語という意味です。
問合せ言語という名前の通り、データベースに対して、必要な情報を抽出したり、加工したり削除するような指示(問合せ)を行うための言語です。
ちなみに、SQLはプログラミング言語には分類されないです。データベース言語の一種となります。
なぜ、このような言語が必要になるかというと、データベースには、整理された情報が格納されており、その情報を抽出・更新・削除するために、このような言語が存在します。
先ほどの例を使うと、全受験生の1次試験の結果から、自分の結果を参照したり、各科目の平均点を抽出したり、情報を更新したりするためです。
SQLの基本構文
では、ここからSQL文の話に本格的に入っていきます
例があった方が分かりやすいので、14代目の1次試験の結果を使って、SQLの構文を見ていきます。
使うテーブルは以下の通り。
※視覚的に見やすくするため、画像として埋め込んでます。
SELECT文
SELECT文は自分が参照したいテーブルから、必要となる情報を抽出するための構文です。
例えば上記テーブルの全件を抽出したい場合は以下のようになります。
■指示するSQL
■出力結果
次に、各メンバーの経済の点数のみを見たいケースを考えます。
この場合、SELECT文で列を、HN、経済で指定してあげます。
■指示するSQL
■出力結果
このように、SELECT文では、対象のテーブルに対して、必要となる列を指定して情報を抽出することが可能になります。
しかしながら、情報が全件出てきてしまうため、特定のデータを抽出したり、合計や平均を算出したりするにはもう少し工夫が必要になります。
そこで、SELECT文に対してWHERE句等の抽出条件が必要になってきます!
データの操作
フィルタリング(WHERE句)
抽出したい条件に合致するデータをSELECT文で指定します。そのときに使うのがWHERE句と演算子です。
例えば、14代目の1次試験結果テーブルから僕のデータのみを抽出したいときは、以下のようなSELECT文になります。
WHERE句を付けることによって、SELECT文に抽出条件を付け加えています。
WHEREの後に続くのが演算子になります。今回の場合は”=”(等しい)が演算子として使われており、「HN」が「おのD」に等しいものを抽出するSELECT文になります。
■SQL文
■出力結果
演算子
SQL文で良く使われる演算子は大きく4種類あります。
- 比較演算子:
- =: 等しい
- <>または!=: 等しくない
- <: より小さい
- >: より大きい
- <=: 以下
- >=: 以上
- 論理演算子:
- AND: 両方の条件が真の場合に真となる
- OR: どちらかの条件が真の場合に真となる
- NOT: 条件を反転させる
- 範囲演算子:
- BETWEEN: 指定した範囲内の値を含む
- IN: 指定した複数の値のいずれかを含む
- LIKE: パターンに一致する値を含む(ワイルドカード文字を使用)
- NULL演算子:
- IS NULL: NULLである
- IS NOT NULL: NULLでない
全部の例は紹介できませんが、例を見てみましょう!
抽出したいデータ①
経済の点数が70点から80点の範囲内の14代目のメンバー
■SQL
■出力結果
BETWEENという演算子は、指定した範囲内の値を含むデータを抽出します。今回の場合、70以上、80以下のデータを抽出します。
抽出したいデータ②
受験回数が2回と3回以上で、かつ、財務が75点以上の14代目のメンバー
■SQL
■出力結果
INという演算子は、指定した値のいずれかを含むデータを抽出します。今回は、受験回数の列に対して、「2回」「3回以上」の2つの値を指定しています。
>という演算子は、指定した値より大きいデータを抽出します。今回は財務の点数が75点よりも大きいデータを抽出します。「>=(以上)」との言葉の使い方に注意してください。
ANDは論理演算子です。今回のSELECT文の場合、受験回数と財務の点数に関する両条件を満たすデータを抽出します。
抽出したいデータ③
HNが「D」終わり、もしくは、HNに「トロ」を含んでいるの14代目のメンバー
■SQL
■出力結果
LIKEという演算子は、パターンに一致する値を含むデータを抽出します。今回指定した条件は、HNがDで終わるので、「%D」と指定しています。これはDより前の文字列はどんな文字が入っても良いという意味(後方一致)です。
トロについては、前後に%を付ける形で「%トロ%」としています。トロが含まれていればどんな文字列でも良いという意味(部分一致)です。
ORは論理演算子です。今回のSELECT文の場合、Dに関する条件か、トロに関する条件のいずれかを満たすデータを抽出します。
データのソート(ORDER BY句)
点数の高い順(降順)や低い順(昇順)にソート条件を指定するためには、ORDER BY句を使います。
昇順・降順の指定
- ASC:昇順
- DESC:降順
何も指定しなかった場合は、デフォルトは昇順になります。
ASCはAscend(上る)
DESCはDescending(下る)
の略だよ!
抽出したいデータ
受験回数が2回、3回以上で、経済の点数を降順、経営の点数を昇順で抽出
■SQL
■出力結果
経済の点数で降順、経営の点数で昇順のソート条件を指定しました。経済の点数に注目するとs.t.oとさやの点数が76点で同点数となっています。一方、経営の点数は、s.t.oが60点、さやが71点のため、s.t.oが先頭に来る結果となりました。
データの集計(GROUP BY句)
GROUP BY句は、特定の列の値に基づいてデータをグループ化します。つまり、データをグループごとにまとめることができます。
まとめた際に、どのようにまとめるのか、つまり、合計するのか、平均を求めるのか、算出方法を指定します。それが集計関数です。
集計関数
- COUNT関数:
- 指定した列の値の数をカウントします。GROUP BY句と組み合わせることで、グループごとの数を取得できます。
- SUM関数:
- 指定した列の値の合計を計算します。数値列に対して使用され、グループごとの合計値を取得することができます。
- AVG関数:
- 指定した列の値の平均値を計算します。数値列に対して使用され、グループごとの平均値を取得することができます。
- MAX関数:
- 指定した列の最大値を求めます。グループごとの最大値を取得することができます。
- MIN関数:
- 指定した列の最小値を求めます。グループごとの最小値を取得することができます。
抽出したいデータ①
受験回数ごとの、人数、経済の平均点、最高点
■SQL
■途中の計算イメージ
■抽出結果
まず、SELECT文の中にあるASですが、これは列に対して名前を付けるための句です。
今回抽出するのが、人数と平均と最高値であるため、それぞれCOUNT関数、AVG関数、MAX関数を使用しています。GROUP BY句で受験回数が指定されているので、各受験回数ごとの人数と平均と最高点が算出されます。
抽出したいデータ②
受験回数ごとの、人数、経済の平均点と最高点を算出し、人数が4人以上のデータ
■SQL
■抽出結果
GROUP BY句でグルーピングした結果に対して、抽出条件を指定する場合はHAVING句を使用します。
HAVING句は、集計関数(例: AVG、SUM、COUNT)の結果に対する条件を指定するために使用されます。SELECT文で抽出条件を指定するときはWHERE句とご説明しましたが、WHERE句では、個々の行に対する条件を指定します。
今回、HAVING句で指定したのは人数について4人以上だったため、受験回数が1回と2回のデータが抽出されました。
応用トピック:副問合せ(サブクエリ)
副問合せとは、あるSELECT文の結果を別のSQL文で利用することです。
抽出したいデータ
経済の点数が、14代目の経済の平均点数以上であるメンバーの一覧
■SQL
■途中の計算イメージ
■出力結果
WHERE句の中で、別のSELECT文が登場しています。これが副問合せのSELECT文です。
副問合せのSELECT文では、経済の平均点を計算しています。この計算結果をもとに、各メンバーの経済の点数と比較を行い、平均点以上のメンバー一覧を表示しています。
応用トピック:権限の付与と剥奪
ユーザによって、情報を参照・更新・削除を行うことを制御するために、テーブルに対して、その権限を付与または剥奪することができます。
権限を付与はGRANT文、剥奪はREVOKE文を使用します。
試験に出る可能性は低いかもしれませんが、一応紹介させていただきます。
例として、14代目の1次試験結果テーブルに対して、ユーザ1へSELECT権限を付与および剥奪するSQL文をご紹介します。
■権限を付与するSQL文
■権限を剥奪するSQL文
おわりに
本番までまだまだ点数は伸ばせます!
潰せる論点は潰していきましょう!
明日は、中小企業政策の科目について、1か月前に模試で18点だった僕の挽回した話をするよ!お楽しみに!
☆☆☆☆☆
いいね!と思っていただけたらぜひ投票(クリック)をお願いします!
ブログを読んでいるみなさんが合格しますように。
にほんブログ村
にほんブログ村のランキングに参加しています。
(クリックしても個人が特定されることはありません)
すごい分かりやすかったです!ラストスパート頑張ります!
すーぱぱさん
コメント頂きありがとうございます!
本番まで1か月しかありませんが、点数はまだまだ伸ばせます。
ラスト1か月頑張っていきましょう!
すーぱぱさんの合格、心より応援しています^^