Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
読んで字のごとく。突っ込み歓迎! ちなみにMySQLです。
- 複数のテーブルからレコードを取り出す
- 複数の値と一致するレコードを取得する
- 副問合せ
- レコード件数を返す
- 取得したレコード、の値の合計
- 平均値を求める
- 値がNULLのもの
- 複数のテーブルからレコードを取り出す
-
SELECT table1.*
FROM table1,table2
WHERE table1.key1 = table2.key1
AND table1.field2 = 'value'
AND table2.field2 = 'value';
memo: これは等価結合の場合。どちらかのデータが存在しない場合は結果に含まれない。
- 複数の値と一致するレコードを取得する
-
SELECT *
FROM table
WHERE field IN (value1,value2,value3);
- 副問合せ(サブクエリ)
-
SELECT *
FROM table1
WHERE key2 IN (SELECT key1 FROM table2 WHERE field1 = 'value');
- 取得したレコード件数を返す
-
SELECT field1,COUNT(field1) AS cnt_title
FROM table
GROUP BY field1
ORDER BY cnt DESC;
memo: NULL値もカウントする場合は COUNT(*)
memo: 純粋に一致した行数をカウントするだけなら COUNT(*) のみの指定が最も速い。
- 合計値を返す
-
SELECT SUM(field1) AS sum_title
FROM table1
WHERE key2 IN (SELECT key1 FROM table2 WHERE field1 = 'value');
- 平均値を求める
-
SELECT AVG(field1)
FROM table1
WHERE field2 <= 80;
- 値がNULLのもの
-
SELECT key1,field1
FROM table
WHERE field2 IS NULL;
パフォーマンス・チェック
- mytop -dtest -s1
-
- -d: データベース
- -u: ユーザ
- -p: パスワード
- -s: 更新時間(秒)
シェルから top コマンド風に MySQL の状態が確認できます(ドキュメント)。遅いクエリがあれば EXPLAIN 等からチェックすると良い。
Update
2008.05.29 : COUNT()にNULL値の場合を追加。いつも PRIMARY KEY を入れてたので意識外でした^^;
2008.05.29 : 平均と合計のサンプルが同じものになっていた所を修正。id:ramsに感謝!
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。