隅々に散らばる情報を集約するデータベースと、操作するためのSQLとは?

隅々に散らばる情報を集約するデータベースと、操作するためのSQLとは?

膨大な情報をテーブルと呼ばれるたくさんの表にまとめるリレーショナル・データベース(RDS)。そして、そのRDSを操作するためのプログラム言語であるSQLについてまとめられています。

テーブル、カラムって言われると一瞬難しくてひるんでしまう。けれど、実体は普段仕事で使うEXCELのシートがたくさん存在するようなものが、データベースと呼ばれています。

そして、そんなたくさんのEXCELのシートをくっつけたり、検索したり、絞り込んだりして操作できるSQL言語。そんなSQL言語は「SELECT」「DELETE」みたいな言葉も使われていること。

そして、「ER図」や「テーブル定義書」みたいな形で、データベースを設計する方法も、見事に体系化されています。もちろん複雑な絞り込みを行ったりする場合は難しいです。けれども検索したり、削除したり、情報を更新したりぐらいは、英語を書くように使えるようになっときたいすね。

ありがとうございました!

本のまとめ

▼読んだ本は?

■スッキリわかるSQL入門 ドリル215問付き! スッキリわかるシリーズ
■中山 清喬 (著)・ 飯田 理恵子 (著)

▼SQLって何?

■データベースにアクセスし、操作するための言語のこと
■データベース内部には、データを格納したたくさんのファイルが生成される
■SQLはファイルに対して実行されるんじゃなく、データベース管理システムに送る
■このデータベース管理システムのことを「DBMS」という
■DBMSのうち、複数の表でデータ管理を行うシステムを「RDBMS」という

▼SQLでデータを検索する方法は?

■「SELECT」文を利用する

■すべてのカラムを検索する時「*」

■検索と同時に絞り込みを行いたい時「WHERE」

■検索した内容に別名を付けたい時「as」

▼データを追加するには?

■「insert」文を利用する

▼データを修正するには?

■「UPDATE」文を利用する

▼データを削除するには?

■「DELETE」文を利用する

▼データ型にはどんなのがある?

■カラムごとに、格納できるデータ型を決める必要がある
【1】INTEGER (整数) 型
【2】DECIMAL (少数) 型
【3】CHAR (固定の長さの文字列) 型
【4】VARCHAR (変動する長さの文字列) 型
【5】DATETIME(日付と時刻) 型

▼「WHERE」句で使われる比較演算子の種類は?

【1】= (左右の値が等しい)
【2】< (左辺は右辺より小さい) 【3】> (左辺は右辺より大きい)
【4】<= (左辺は右辺と同じか小さい) 【5】>= (左辺は右辺と同じか大きい)
【6】<> (左辺と右辺の値が等しくない)

▼「null」って何?

■「何も値が入っていない」ことを表す文字列
■「空白がある」「ゼロが入っている」とかではなく、ほんとになにもない状態

■nullを判定する記述「is null」
└nullでは比較演算子「=」は使えない

▼色んな検索方法は?

■特定の文字列を含むかどうかを判断
└「LIKE」演算子を使う
└「1月」の文字列を含んでいるカラムだけを検索する

■特定の範囲のデータを検索する
└「BETWEEN」を使う
└100~3000の間のデータを検索する

■複数のうち、いづれかに当てはまるデータを検索する
└「IN」を使う
└[データ名1][データ名2]のいづれかのデータを検索する

■2つの条件式を組み合わせる時
└「AND」を使う
└[データ名1]かつ[データ名2]のカラムのデータを更新する

■同じデータ名が入っている箇所をまとめて表示する
└「DISTINCT」を使う

■データを昇順・降順に並べ替えて検索する
└「ORDER BY」を使う

■先頭から指定した数行だけを検索する
└「LIMIT」を使う

▼データベースに使われるキーとは?

■主キー
└他の行と値が重複しない、オリジナルなデータが入っているカラムのこと
└すべてのテーブルは、必ず主キーのカラムが必要

■外部キー
└複数のテーブルを連携し、外部のテーブルから呼び出すために使うカラム

▼複数のテーブルの情報を扱うには?

■複数のテーブルのデータを結合する
└「UNION」を使う
└「カラム数」「データ型」が一致してる必要がある

■「テーブル1のデータ」から「テーブル2のデータ」を差し引いたデータだけ表示する
└「EXCEPT」を使う

■複数のテーブルのどちらにもあるデータのみを結合する
└「INTERSECT」を使う

▼条件で分岐させるには?

■「CASE」で分岐させる

▼SQLで使えるさまざまな関数は?

■「LENGTH」関数
└文字列の数を出力する
└()の中に、引数を指定する

■「TRIM」関数
└文字列の中にある空白を除去する

■「REPLACE」関数
└文字列の一部を、別の文字列に置き換える

■「ROUND」関数
└数字を四捨五入する
└四捨五入する桁数は「-2(10の位)」などマイナスで表す

■「CURRENT_DATE」関数
└今日の日付を表示する

■「SUM」関数
└合計数値を集計する

■「AVG」関数
└平均数値を集計する

■「MAX・MIN」関数
└最大値・最小値を集計する

■カラム内のデータ名が同じものをグループ化する
└「GROUP BY」を使う

■グループ化した上で、その後データを絞り込む
└「HAVING」を使う

▼複数のテーブルをくっつけるには?

■2つの表のカラム内の同じデータのみくっつける
└「JOIN」を使う

■左側の表のカラム内のデータを維持したままくっつける

■両側の表のカラム内のデータをすべて維持したままくっつける

▼トランザクションって何?

■トランザクション
└複数のSQL文を、一つのかたまりとして処理すること
└トランザクションがすべて処理されることを「コミット」という
└トランザクションの途中で問題が起きた場合「ロールバック」して元に戻す

■トランザクションの利用
└例えば銀行のATM処理などで使う
└「預金を下ろす→預金残高を減らす」など分割できない処理を、1つのトランザクションにまとめる

■トランザクションの書き方
└トランザクション利用時には、外部から処理できないようロックがかかる
└複数のトランザクションがお互いにロックを掛け合うと、処理が永久に止まる「デッドロック」に陥ることがある
【1】BEGIN(トランザクションの開始)
【2】COMMIT(トランザクションの終了)
【3】ROLLBACK(トランザクションを巻き戻す場所)

▼テーブル自体の操作方法は?

■テーブルの作成方法

■テーブルのカラごとムのデフォルト値を予め設定

■テーブルの列の値に制約を設定

■テーブルの削除方法

■テーブルへの列の追加方法

■テーブルの列の削除方法

▼インデックスって何?

■データベースの特定の列に対して付与する「目次」のこと
■インデックスを付与された列に検索を行う場合、処理スピードが速くなる
■基本的には、よく検索されるカラムに対して、インデックスを作成する
■特に「WHERE」「ORDER BY」「JOIN」が利用されるカラムに利用される
■でも、インデックスを多様しすぎるとディスク容量を消費する
■さらに、INSERTやDELETEの時にインデックスも追加・削除する必要が出て、処理が遅くなりがち

▼インデックスの操作方法は?

■インデックスを作成する

■インデックスを削除する

▼データベースのバックアップ方法は?

【1】データベースの中身全体
└日次、週次、月次など低頻度でバックアップする

【2】ログファイルの中身
└数分・数時間毎など高頻度でバックアップする
└DBMSのログは「トランザクションログ」と呼ばれ、実行したSQL全文のこと

▼データベースの設計順序は?

【0】要件定義
└「毎日のお金の出入りを記録したい」「費目の種類は、後から追加できるようにしておきたい」など、お客さんがやりたいことをまとめる

【1】概念設計
└データベースで管理すべき情報がどのようなものなのかを、データベース構造とかは無視して、ざっくり考える

【2】論理設計
└「データベースの中にどのようなテーブルを作り、それぞれのテーブルにどのような列を作るか?」をまとめる

【3】物理設計
└すべてのテーブルのすべての列について「データ型」「インデックス」「制約」「デフォルト値」などを確定する

▼概念設計・論理設計の中で作る「ER図」って何?

■「エンティティ」「属性」「関係」を表した図式
└エンティティ:「テーブル」のようなもの
└属性:テーブルの「カラム」のようなもの
└関係:複数のデータ間の「リレーション」のようなもの

■例えば「銀行のATMシステム」をER図で表すと
└エンティティ:「利用者名」「費目」「入出金行為」
└属性:「日付」「金額」
└関係:「利用者」1人に対して、複数回の「入出金行為」が発生する

▼物理設計で作る「テーブル定義書」って何?

■以下を決めて、ドキュメント化したもの
【1】最終的なテーブル名(物理名)を決める
【2】各列の「データ型」を決める
【3】各列の「制約・デフォルト値」を決める
【4】各列の「インデックス」を決める

関連する記事