SELECT 構文

メモ:  Category:mysql

SELECT 文又は副問合せ(サブクエリ)を使用すると、1つ以上の表からデータを取り出すことができます。

SELECT [STRAIGHT_JOIN]
       [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
       [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]
       [DISTINCT | DISTINCTROW | ALL]
    select_expression,...
    [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
    [FROM table_references
      [WHERE where_definition]
      [GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
      [HAVING where_definition]
      [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
      [LIMIT [offset,] rows | rows OFFSET offset]
      [PROCEDURE procedure_name(argument_list)]
      [FOR UPDATE | LOCK IN SHARE MODE]]

非常にわかりにくいですね。 最も利用頻度が高いだけにいろいろなことができます。

SELECT 文の利用方法を紹介していきます。

単純なSELECT

単純なSELECT構文:

SELECT 列名,列名,... FROM テーブル名;

ひとつの表に入っている全てのデータを取得するには、上記SQL文を実行します。 列名は、1つでも複数でもかまいません。

もし、表の全ての列を表示したい場合は、以下のようにSQL文を記述します。

SELECT * FROM テーブル名;

テーブルを使用しない SELECT 文も存在します。

SELECT 2 + 3;

+-----+
| 2+3 |
+-----+
|  5  |
+-----+
1 row in set (0.01 sec)

WHERE 抽出条件

ある条件で表示する行を限定したい場合、WHERE 句を使用します。

WHERE 句を使った SELECT 構文:

SELECT 列名,列名,... FROM テーブル名 WHERE 条件式;

WHERE 句に指定する条件式は、列名と演算子、関数を組み合わせて設定します。

また、 AND や OR を使用して複数の条件を組み合わせて行を抽出することができます。

WHERE句で使える演算子:

演算子 意味
= WHERE 列名 = a aと等しい
!= WHERE 列名 != a aと等しくない
< WHERE 列名 < a aより小さい
> WHERE 列名 > a aより大きい
<= WHERE 列名 <= a aより小さいか等しい
>= WHERE 列名 >= a aより大きいか等しい
<> WHERE 列名 <> a aと等しくない
LIKE WHERE 列名 LIKE ‘a%’ aの値を含むパターンと等しい 「%」は、ワイルドカードです。
‘a%‘や’%a%‘や’%a’といった使い方をします。
BETWEEN a AND b WHERE 列名 BETWEEN a AND b aとbの範囲内にある
IN WHERE 列名 IN(a,b,…) a,b,…のどれかの値に一致している
IS NULL WHERE 列名 IS NULL NULLである
IS NOT NULL WHERE 列名 IS NOT NULL NULLでない
NOT WHERE 列名 NOT LIKE ‘a%’ 結果を反転する

使用例:

SELECT NAME FROM EMP WHERE NAME = 'bnote';

GROUP BY グループ化

指定した列の値を元に行をグループ化したい場合、 GROUP BY 句を使用します。 GROUP BY 句で指定した列は、必ず SELECT 句に指定します。

ORDER BY 句を使った SELECT 構文:

SELECT 列名[,列名,...],集計関数[,集計関数,...] FROM テーブル名 GROUP BY 列名[,列名,...];

GROUP BYで使用する集計関数:

関数 意味 意味
COUNT 選択された行数を返します。 NULLは数えません。
AVG 平均値を返します。 NULLは含みません。
MIN 最小値を返します。 NULLは対象にしません。
MAX 最大値を返します。 NULLは対象にしません。
SUM 合計を返します。 NULLは含みません。
VARIANCE 標準偏差を返します。 NULLは含みません。4.1以降
GROUP_CONCAT グループ内の値を連結した結果の文字列を返す。

使用例:

SELECT count(*) FROM EMP;
又は
SELECT department,count(*) FROM EMP GROUP BY department;

HAVING 抽出条件

グループ化( GROUP BY 句)した結果に対して抽出を行いたい場合、 HAVING 句を使用します。

HAVING句を使ったSELECT構文:

SELECT 列名[,列名,...],集計関数[,集計関数,...] FROM テーブル名 [GROUP BY 列名[,列名,...]] 
       HAVING グループ処理の結果に対する条件;

HAVING 句の条件は、 GROUP BY 句で指定した項目か集計関数を指定することができます。

WHERE 句で対象行を絞った後に集計し、 HAVING 句で選択するといった使い方もできます。

HAVINGの例:

SELECT department,count(*) AS cnt FROM EMP GROUP BY department HAVING cnt > 10;

ORDER BY 並べ替え

指定した列の値を元に行を並べ替えたい場合、 ORDER BY 句を使用します。

ORDER BY 句を使った SELECT 構文:

SELECT 列名[,列名,...] FROM テーブル名 ORDER BY 列名[,列名,...];

ORDER BY 句には、複数の項目を指定することができます。また、 SELECT 句で指定していない列も指定できます。

昇順や降順を指定するには、列名の後に ASC (昇順)、 DESC (降順)を付けることで並び順を指定できます。 デフォルトは、 ASC (昇順)です。

SELECT * FROM テーブル名 ORDER BY 列名 DESC;

bluenote by BBB