普段触っているのはクライアントサイド(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