サブクエリ
ある問い合わせの結果に基づいて、異なる問い合わせを行う仕組み
構文
select 列名, ... from テーブル名 where 列名 演算子(select 列名 from テーブル名2 ...);
スカラ・サブクエリ
- 必ず1行1列だけの戻り値を返す、サブクエリのこと。
- スカラとは単一のという意味
- 絶対にサブクエリが複数行を返さないようにする
ある問い合わせの結果に基づいて、異なる問い合わせを行う仕組み
構文
select 列名, ... from テーブル名 where 列名 演算子(select 列名 from テーブル名2 ...);
テーブル
ビュー
order b句が使えない
ビューに対する更新は不可能ではないが制限がある。
データを保存しないので、記憶装置の容量を節約できる。
よく使うselect文をビューにしておくことで、使い回しができる。
create view ビュー名(<ビューの列名>,<ビューの列名2>, ,..) as <select文>
drop view ビュー名;
2 . データ容量の削減
→特別な意図がなければ、テーブルは正規化する。
パフォーマンスの問題が解消できない(できなくなりそうな)場合はあえて非正規化することもある。
実務で見かける可能性もある。
テーブル同士の結び付き・関係性の種類
1対多
(1)ユーザー - (多)注文
(1)ブログの投稿者 - (多)ブログの投稿
(1)注文 - (多)注文明細
(1)部署 - (多)従業員
(多) 商品 - (多) 商品カテゴリ
(多) ブログの投稿 - (多)ブログのカテゴリ
(多) ユーザー - (多) 操作権限
select テーブル名1.列名, テーブル名2.列名 ... from テーブル名1 inner join テーブル名2 on テーブル名1.列名 = テーブル名2.列名;
select テーブル名1.列名, テーブル名2.列名 ... from テーブル名1 inner join テーブル名2 on テーブル名1.列名 = テーブル名2.列名 where 絞り込み条件;
記述順序 (必ずこの順序で書く必要がある)
実行順序
外部結合は欠落のあるデータを取り扱う結合。
構文 :外部結合 left outer join
select テーブル名1.列名, テーブル名2.列名 ... from テーブル名1 left outer join テーブル名2 on テーブル名1.列名 = テーブル名2.列名;
left outer join / right outer join
left outer join...左側(from句で最初に書いたテーブル)をマスタとする。
right outer join...右側(from句で後に書いたテーブル)をマスタとする。
select 列1, ... from テーブル1 union select 列2, ... FROM テーブル2
構文
round(対象の数値, 丸めの桁数)
例)
丸めの桁数に0を指定すると、小数点第1位で四捨五入 round(10,555, 0)
丸めの桁数に1を指定すると、小数点第2位で四捨五入 round(10,555, 1)
丸めの桁数に2を指定すると、小数点第3位で四捨五入 round(10,555, 2)
order by 列名や式 並び順, ...
並び順の指定
order byには、カンマ区切りで複数の並び替え条件を指定できる。
sum(expr) ※exprの合計値を返す。
avg(expr) ※exprの平均値を返す。
min(expr) ※exprの最小値を返す。
max(expr) ※exprの最大値を返す。
数値の0でも、長さ0でもなく、値がない。
集約関数では、基本的にはnullが無視される。
count(expr) 補足: * exprの数をカウント * count(*)とすると、テーブルの行数を取得できる。 * userテーブルの行数が、ユーザー数となる。
ここでの、ユニークユーザーとは、決まった集計期間内にアクセスしたユーザーの数を表す数値
あるユーザーAが決まった機関内に10アクセスしたとしても、1と数える。 where句と集約関数count(distinct expr)を組み合わせて使う。
count(distinct exor)の形で、count関数は、重複を排除した上で、個数を取得できる。
select 列名 from テーブル名 group by 列名;
having句は、テーブルのデータを集約して結果に対して、条件式を適用する場合に利用する。
構文
select 列1, ... from テーブル名 where 条件式 group by 列1, ... having 条件式;
※ ポイントとしては、havingは、group byの後に書く
記述順序 (必ずこの順序で書く必要がある)
実行順序
記述順序/実行順序の違い
※ ポイント : selectの記述順序と実行順序が異なる