ただの適当な開発記

会社勤めしつつUnityでアプリ作ってる人の雑記

とりあえず覚えときたいsqlコマンドたち

普段触っているのはクライアントサイド(Unity)なんですが、ここ最近会社の施策でサーバーサイドの勉強をしています。
その施策については年末の振り返り記事で詳しく言及するとして、直近で勉強したsqlについての覚書です。

集計関数

GROUP BYを使いましょう

SELECT 
	PrefecturalID as '都道府県'
	,count(PrefecturalID) as '顧客数'
FROM
	Customers
GROUP BY
	PrefecturalID
WHERE 
;

集計結果に対する絞り込み

HAVINGを使いましょう

SELECT 
	PrefecturalID as '都道府県'
	,SUM(case WHEN CustomerClassID = 1 then 1 end) as '顧客数' 
FROM
	Customers
GROUP BY
	PrefecturalID
HAVING 
	SUM(case WHEN CustomerClassID = 1 then 1 end) >= 2
;

クロス集計

COUNT(case when 条件 then 1 else 0 end)

でカラムをつくっていく

http://www.albert2005.co.jp/analyst_blog/?p=775

重複(ちょうふく)の排除

SELECT DISTINCT col_name, ... FROM tbl_name;

内部結合

INNER JOIN (テーブル名) ON 結合条件

例:

SELECT 
	PrefecturalName as '都道府県名'
	,Count(Prefecturals.PrefecturalID) as '顧客数'
FROM
	Prefecturals
INNER JOIN
	Customers
ON
	Prefecturals.PrefecturalID = Customers.PrefecturalID
GROUP BY 
	PrefecturalName
;

http://www.dbonline.jp/mysql/select/index14.html

複数の内部結合

普通に繰り返せばおk

INNER JOIN (テーブル名) ON (条件) INNER JOIN (テーブル名) ON (条件)

http://d.hatena.ne.jp/atelier-shin/20090515/1242368331

自己結合

同じテーブルの情報を使ってなんかしたいときに使う
例えば商品情報のテーブルがあって、それを元に合計金額が2500円以上になる組み合わせを列挙するときとか

SELECT 別名1.カラム名, ...
 FROM テーブル名 別名1 INNER JOIN テーブル名 別名2
 ON 別名1.カラム名 = 別名2.カラム名;

http://www.dbonline.jp/sqlite/join/index5.html

複数の結果を縦方向に結合

UNION/UNION ALL(重複を含める場合はこっち)

SELECT
	EmployeeName as '氏名'
From
	Employees
UNION
SELECT
	CustomerName
FROM
	Customers
;

http://www.dbonline.jp/mysql/select/index18.html

SELECT文を用いたINSERT

#新しいテーブル作成
CREATE TABLE
	Prefecturals2
	(
	PrefecturalID int(11)
	,PrefecturalName varchar(20)
	)
;

#データ追加
INSERT INTO
	Prefecturals2
SELECT
	PrefecturalID
	,PrefecturalName
FROM
	Prefecturals
;

http://www.dbonline.jp/mysql/insert/index6.html

文字の0詰め

lpad,rpadを使おう
多分left padding,right paddingの略

lpad(対象のデータ,3,'0') = 対象のデータを3桁になるように左から0で詰めますよ

カラムの更新

UPDATE 対象のテーブル SET カラム = 新しいデータ;

http://qiita.com/katsukii/items/fcd161ffaadd157e63ed


定義の変更

・カラムの名前も変更

ALTER TABLE tbl_name CHANGE old_col_name column_definition;


・属性だけ変更

ALTER TABLE tbl_name MODIFY [COLUMN] column_definition;
<||
http://www.dbonline.jp/mysql/table/index19.html