MySQL

【MySQL】特定列の合計(SUM)を求める。

めも。

SELECT SUM([列名]) FROM [テーブル名];

例。

SELECT SUM(count) FROM logs;

 

【MySQL】LIKEキーワードで前方一致、後方一致検索を行う方法。

めも。

いつもどおりのLIKE文をちょっと変えてやるだけでOK。

まずはいつもの中間一致。

■中間一致

SELECT * FROM table_name WHERE col_name LIKE '%str%';

この場合、文字列中のどこかに「str」が含まれているレコードが取得される。

■前方一致

SELECT * FROM table_name WHERE col_name LIKE 'str%';

対象文字列前の「%」をはずしてやることで「str」から始まるレコードを取得できる。

■後方一致

SELECT * FROM table_name WHERE col_name LIKE '%str';

上記の前方一致に習い、後方一致検索を行う場合は後ろの「%」をはずしてやればよい。これで「str」で終わるレコードを取得できる。

 

【MySQL】重複行を除いてリストを作成する。

DISTINCT文を用いる。

SELECT DISTINCT [列名], [列名], [列名], ... FROM [テーブル名] WHERE ... ORDER BY ... LIMIT ...

例。

SELECT DISTINCT category FROM items WHERE 1

※上記は重複無しでカテゴリーを全て取得するSQLの例

 

【MySQL】複数のテーブルをJOINさせる方法。

めも。

極めて文法的なお話。

下記のような名前のテーブルがあるとする。

・table_1
・table_2
・table_3

ほしいカラムは下記とする。

・table_1.col_1
・table_2.col_2
・table_3.col_3

そして。

・「table_1.id」=「table_2」の「table1_id」
・「table_1.hoge_id」=「table_3」の「id」

だったとする。

この場合これらをすべてJOINしようとすると下記のようになる

SELECT t1.col_1, t2.col_2, t3.col_3 FROM table_1 AS t1 LEFT JOIN table_2 AS t2 ON t1.id = t2.table1_id LEFT JOIN table_3 AS t3 ON t1.hoge_id = t3.id

そして、この末端にWHERE、LIMIT、ORDERなどを追加してやればよい。
※この際、複数のテーブル間で同一のカラム名が存在しなかった場合、WHERE句などでテーブル名のプレフィックスを付加してやらなくてもエラーにはならない。っぽい。

【MySQL】テーブルをそのままCSVに出力する。

自分用めも。

文法。

select * from [DB名].[テーブル名] into outfile "/path/to/output/fileName.csv" fields terminated by ',' enclosed by '"' lines terminated by '\r\n';

例。

select * from mysql.help_topic into outfile "/home/admin/output.csv" fields terminated by ',' enclosed by '"' lines terminated by '\r\n';

一発で生成可能。さすがMySQL。めっちゃ便利。

 

【MySQL】リストとの比較を行う方法。

めも。

IN(value, value, value, …)文を使う。

文法はこんな感じ。

SELECT * FROM [テーブル名] WHERE [カラム名] IN('値1', '値2', '値3');

以下例。

SELECT * FROM sites WHERE id IN(1, 2, 3);

次に否定条件をリストで指定したい場合。

NOT IN(value, value, value, …)文を使う。

SELECT * FROM sites WHERE id NOT IN(1, 2, 3);

 

【MySQL】テーブル内の同一値をグルーピングして数える方法。

超絶自分用めも。

「COUNT()」関数と「GROUP BY」句を使う。

SELECT *, COUNT(site_id) FROM items GROUP BY site_id

わかりやすく書くと下記のような感じ。

SELECT [欲しいカラム名],[欲しいカラム名],[欲しいカラム名], ...,  COUNT([数えたいカラム名]) FROM [テーブル名] GROUP BY [数えたいカラム名]

結局わかりずらい。笑
まぁ自分用備忘録として。

 

【MySQL】JOINの際、各テーブルに対して別名をつける方法。

今更過ぎるけれどもわからなかったので調べた。

例えば以下のような感じ。
※ここではhogeテーブルとfugaテーブルがあるとする

SELECT h.id, h.name, f.email FROM hoge AS h LEFT JOIN fuga AS f ON h.fuga_id = f.id;

このようにテーブル名のあとに続けて「AS [エイリアス名]」と定義してやることで、それ以外の句ではそのエイリアス名を使用することが出来る。
SELECT句でテーブル名を一々フルで記述しなくてもよくなるので非常に便利。