MySQLで色んなSQL文

DBからデータを取得することはかなり多いと思います。

なので、色んなSELECT文の方法を記載したいと思います。

 

データを全て取得する

 

取得したいデータを取得する

 

取得するデータの条件を設定

[カラムaが1のデータを取得]

[カラムaが1〜10のデータを取得]

 

CASE文

[カラムdのデータよって表示させるデータを変えている]

answerが1の時はselect1のデータを表示
answerが2の時はselect2のデータを表示
answerが3の時はselect3のデータを表示
answerが4の時はselect4のデータを表示
answerが1〜4以外なら非表示

questions AS q ⇒ エイリアス(別名)を付けています
q.answer ⇒ テーブル名(エイリアス).カラム名
※テーブルを結合した時に、テーブルに同じカラム名があったとします。どちらのテーブルのカラムかわからないのでエラーが出ます。
なので、テーブル名.カラム名とすることで、どのテーブルのカラムかがわかりエラーもなくなります。

[複数あるパターン]

[関数を使用するパターン]

今回は modified と createdの時刻の差を取得します。

case文で、取得したデータがNULLだったら00:00:00、NULLじゃなかったら返り値を表示しています。

[t_ps_spot元データ]

[実行結果]

 

TIMEDIFF

時刻の差分を取得する

カラムcreated,modifiedのどちらかのデータまたは両方のデータが0000-00-00 00:00:00、NULLであった場合、NULLが返ってくる。

また、不正な引数を渡した場合はNULLが返ってくるようです。

[実行結果]

 

INNER JOIN

内部結合は、それぞれのテーブルの指定したカラムの値が一致するものだけを結合します。

[questionsとjoin]

[question_tagとjoinしてグループで絞ったときに文字列連結]

 

FROM句でのサブクエリの利用

FROM句でのサブクエリの利用は、これまでのサブクエリと性格が異なります。WHERE句、SELECT句でのサブクエリはあくまで結果として値を利用していました。これがFROM句での利用では、サブクエリの結果を1つのテーブルとして扱うことが可能となります。FROM句でのサブクエリの利用は非常に応用性が高く、サブクエリの主だった利用目的はこのFROM句での利用にあるといえるほどです。

 

ROUND関数&AVG関数

ROUND

四捨五入をしたい時に利用

ROUND ( numeric_expression , length [ ,function ] )

* numeric_expression: 数値

* length: 数値を丸める際の有効桁数 (-2 であれば 100 の位、-1 であれば 10 の位、 0 が 1 の位、1 が小数点第一位、2 が小数点第二位、、、のように続きます)
[ 例 ]
SELECT ROUND(1234.1234, -3); –> 1000.0000
SELECT ROUND(1234.1234, -2); –> 1200.0000
SELECT ROUND(1234.1234, -1); –> 1230.0000
SELECT ROUND(1234.1234, 0); –> 1234.0000
SELECT ROUND(1234.1234, 1); –> 1234.1000
SELECT ROUND(1234.1234, 2); –> 1234.1200
SELECT ROUND(1234.1234, 3); –> 1234.1230

 

AVG

SQLで平均を出すにはAVG関数を使用します。

構文
SELECT AVG(列名) FROM テーブル名;

 

個数(行数)をカウントする ~ COUNT ~

COUNTは、個数(行数)をカウントする集計関数です。COUNT関数の場合「レコードの行数」をカウントする関数ですので、どの列を指定してもいいので、こういう場合「*」を指定します。

[question_likes]

[question_reports]

[条件式を加えたパターン]

[実行結果]

 

複数のINNER JOIN

 

自分自身にLEFT JOIN

 

関数について

GROUP_CONCAT:statusをグループで絞った時に、statusの中身の文字をカンマ区切りで表示します。

DISTINCT:statusの中身の重複した文字を1つにまとめる。

ORDER BY:statusの中身をソートします。

 

投稿者: samancha