SQL
データベースに溜め込んだデータを活用しなくてはならない。
そのためにSQLというものがある。
それは表を定義(CREATE文),レコードを挿入(UPDATE文)、削除(DELETE文)、更新(UPDATE文)をしたりできる。
これらの命令は
- スキーマの定義や表の作成といった定義を担当する
データ定義言語
(DDL: Data DEfinition Language) - データの抽出や挿入、更新、削除といった操作を担当する
データ操作言語(DML:Data Manipulation Language)
に大別できる。
SQL文の処理
クエリ実行までの流れ
受けたクエリ(問い合わせ)の実行までの流れは、構文解析⇨オプティマイザ(最適化)⇨コード生成⇨実行
といった順で処理される。
オプティマイザ
SQLによるクエリに対して、最も効率がいいように最適化を行う
こと
具体的には、アクセス経路(順次検索かインデックスを使うかなど)や結合方法の選択がある。
SELECT文の基本的な書式
基本はどうのような条件で
、どの表から
、どの列を取り出すか
になる。
これを指定することによってデータベースから多様なデータを取り出すことができる。
SELECT 列名 FROM表名 WHERE 条件
SELECTはどの列を取り出すか?
FROMはどの表から?
WHEREはどのような条件で?
特定の列を抽出する(射影)
関係演算の一つ射影で列を取り出す。
*(アスタリスク)
を列で指定すると全ての列が抽出対象となる。
特定の表の抽出(選択)
関係演算の一つ選択で行を取り出す。
WHERE句を使って、取り出したい行の条件を指定します。
比較演算子
このWHER句は比較演算子
を用いて条件を指定する。
- = :等しい。
- > :大きい
- >=:以上
- < :小さい
- < :以下
- <>:等しくない。
条件を組み合わせて抽出する
複数の条件を組み合わせるには、論理演算子
を用いる。
AND
,OR
,NOT
がある。
WHERE句で使う。
比較演算子にかつ
を持たせるにはAND
または
を持たせるにはOR
ではない
を持たせるにはNOT
論理演算子の優先順位
論理演算子には優先順位がある。
NOT>AND>OR
になる。
表と表を結合する(結合)
表と表をくっつける
関係演算。
WHERE句でどの列を使ってくっつけるかを指定します。
SELECT *
FROM 受注表、顧客表
WHERE 受注表.顧客コード = 顧客表.顧客コード
受注表.顧客コード
の.
はどの表のどの列かを表すために用いられている。
結合させる列名が同じ名前同士である必要はない
データを整列させる
ORDER BY句
で抽出結果を整列させる。
ASCは昇順
、DESCは降順
ORDER BY 列名 ASC(またはDESC)
SELCT * FROM 商品表 ORDER BY 単価
デフォルトで昇順
なのでASCは省略できる。
SELECT 顧客コード,受注No,受注日付
FROM 受注表
ORDER BY 顧客コード, 受注日 DESC
関数を使って集計を行う
SQLにはデータを取り出す際に集計を行う。さまざまな関数(集合関数
と言う)が用意されています。
これを用いると列の合計や、最大値、レコードの件数などを求めることができる。
MAX(列名)
その列の最大値を求める。
MIN(列名)
その列の最小値を求める。
AVG(列名)
その列の平均値を求める。
SUM(列名)
その列の合計を求める。
COUNT(*)
行数を求める。
COUNT(列名)
その列の「列が入っている(空値じゃない)」 行数を求める。
データをグループ化する
特定の列をさしてその中身が一致する項目をひとまとめにして扱うことをいう。
GROUP BY句
を使う。
グループ化して、グループの中でまた処理ができたりする。
GROUP BY 列名
グループに条件をつけて絞り込む
グループ化した際、条件をつけて取り出すグループを絞り込むことができる。
HAVING句
を使いグループ化内の絞り込み処理を行う。
SELECT 分類,AVG(単価)
FROM 商品分類表
GROUP BY 分類
HAVING AVG(単価)>100
単価が100より大きい グループの分類と平均単価を表示する。
気づき
SQLを勉強していたため割合知っているところが出た。
なので気づきがここだけになった。
次も頑張る
関連記事
出典