はじめに
今回は4月に受けたデータベース研修で学んだことをまとめていきます。
研修内容
午前はデータベースで扱う用語などの座学、午後は演習問題を進めていく流れでした。
学んだ内容についてまとめていきます。
データベースとは
ある特定の条件に当てはまる「データ」を複数集めて後で使いやすい形に整理した情報のかたまりのこと
メリット
- 複数のデータをまとめて管理できる
- 目的のデータを簡単に探すことができる
- 簡単に編集して使うことができる
基本的な用語解説
スキーマ
フォルダのようにデータベースの領域を区切ったもの
テーブル
データを行と列の表形式で格納する場所
Excelの表(テーブル)に近いイメージ
カラム
データベースにおける列
レコード
データベースにおける行
フィールド
データ項目
DBMS
データベースマネージメントシステムの略称
コンピュータ上でデータベースを管理してくれるシステム
例. Oracle、PostgreSQL、MySQL など
SQL
Structured Query Languageの略称で、データベースを操作するための言語のこと
Structured=構造、Query=問合せ、Language=言語
SQL文の基礎
SELECT
どの列を表示するかを指定します。
FROM
どのテーブルを使うかを指定します。
WHERE
「どのデータだけ取得するか」の条件を指定します。
データベースでの実行コマンド
以下の4つのテーブルを使っていくつかSQL文についてまとめます。

全データの取得
会員テーブルからのすべての会員情報の取得
実行SQL
SELECT * FROM (スキーマ名).会員;
特定列だけの取得
会員テーブルの全会員情報から氏名だけを取得する
実行SQL
SELECT 姓, 名 FROM (スキーマ名).会員;
先ほどの結果とは違い、姓と名だけが取得されます
*(アスタリスク)は「全ての列」を意味します。
特定行だけの取得
会員テーブルの会員情報から男性の情報だけを取得する
実行SQL
SELECT * FROM (スキーマ名).会員 WHERE 性別 = ‘男’;
全データではなく、男性のデータだけが取得されます
“=“は等しいという意味の比較演算子
いろいろな特定行取得方法
①
会員テーブルの会員情報から苗字に”田”がつく会員情報を取得する
実行SQL
SELECT * FROM (スキーマ名).会員 WHERE 姓 LIKE ‘%田%’;
=の代わりにLIKEとすることで、あいまい検索が可能になります
%は「何の文字があってもよい」ということを示します
一般にこういう%のような意味合いの文字をワイルドカードと呼ぶ
②
会員テーブルの会員情報から女性で
会員IDがA0004以下の会員情報を取得する
実行SQL
SELECT * FROM (スキーマ名).会員 WHERE 性別 = ‘女’ AND 会員ID <= ‘A0004’;
??=??などの条件をANDでくっつけることで複数の条件の指定ができる
③
会員テーブルの会員情報から女性、
または東京都町田市に住む会員情報を取得する
実行SQL
SELECT * FROM (スキーマ名).会員 WHERE 性別 = ‘女’ OR 住所 = ‘東京都町田市’;
??=??などの条件をORでくっつけることで
複数の条件のうちいずれかに合致する場合、という指定ができる
④
会員テーブルの会員情報から会員IDがA0001かA0004かA0006の会員情報を取得する
実行SQL
SELECT * FROM (スキーマ名).会員 WHERE 会員ID IN (‘A0001’,’A0004’,’A0006’);
IN (1,2,3,..)ように括弧内に条件を記載することで
括弧内の複数の条件のうちいずれかに一致する場合、という指定ができる
取得結果の並び替え
会員テーブルから男性の会員情報を取得し、生年月日が年齢の高い順に並び替える
実行SQL
SELECT * FROM (スキーマ名).会員
WHERE 性別 = ‘男’ ORDER BY 生年月日 ASC;
ORDER BYをつかうことで指定したカラムの昇順で並び替え(ソート)ができます。
ASC を DESC に変えると降順での並び替えになります。
ASC はデフォルトで適用されるため、省略可能です。
ORDER BY 生年月日 ;でも上記のSQL文と同じ結果になります。
降順にしたい場合DESCは省略できないです。
集計関数について
会員テーブルから女性の会員情報の件数(レコード数)を取得する
実行SQL
SELECT COUNT(*) FROM (スキーマ名).会員 WHERE 性別 = ‘女’;
SELECT対象をCOUNT(*)とすることで条件に合致したレコードの件数を取得できる
テーブル同士の結合
注文明細テーブルには商品IDはあるが商品名は持っていない
注文明細データを取得すると同時に商品名も取得できれば便利
実行SQL
SELECT 注文明細.注文ID, 注文明細.商品ID, 商品.商品名 FROM (スキーマ名).注文明細
INNER JOIN (スキーマ名).商品 ON 注文明細.商品ID = 商品.商品ID;
FROMでテーブルを指定した後、INNER JOIN テーブル名 ON 結合条件と書くことで
指定したテーブル同士を内部結合し、自分のテーブルにない情報を参照することができる
結合条件にはそれぞれのテーブルで共通となるカラムを=で繋げる必要がある
3つ以上のテーブルの結合
3つ以上のテーブルの結合を行う際はinner join を追加すればできます。
実行SQL
SELECT 注文.注文日,注文明細.注文ID,商品.商品名,注文明細.個数 FROM 注文明細
INNER JOIN 注文 ON 注文明細.注文ID = 注文.注文ID
INNER JOIN 商品 ON 注文明細.商品ID = 商品.商品ID;
以下のSQL文だとダメです。
実行SQL
SELECT 注文.注文日,注文明細.注文ID,商品.商品名,注文明細.個数 FROM 注文明細
INNER JOIN 注文 ON 注文明細.商品ID = 商品.商品ID
INNER JOIN 商品 ON 注文明細.商品ID = 商品.商品ID;
このSQL文がダメな理由は、テーブル結合の順番を正しくできていないためです。
まず1つ目のINNER JOINでは「注文」テーブルを結合しているため、
ON句では「注文明細」と「注文」を結びつける条件を書く必要があります。
しかし、このSQL文ではまだ結合していない「商品」テーブルを
結合条件で参照してしまっています。
テーブル結合では、
「今どのテーブルを結合しているのか」を意識して
順番に結合条件を書くことが大事。
GROUP BYについて
注文テーブルと注文明細テーブルから、会員ごとの注文件数を取得してください。
実行SQL
SELECT 注文.会員ID, COUNT(*) FROM 注文 GROUP BY 注文.会員ID;
GROUP BY とは、同じ値ごとにデータをグループ化して集計するためのSQL構文です。
COUNT() や SUM() などの集計関数と一緒によく使用されます。
まとめ
今回は
基本的な用語
SQL文の基礎
様々なデータの取得方法についてまとめてみました。
今後は UPDATE や DELETE、サブクエリなども学んでいきたいです。


