選別
読み取ったデータを並べ替える必要がある場合は、MySQLの ORDER BY 句を使用して、並べ替えるフィールドをどの方法で並べ替えるかを設定し、検索結果を返すことができます。
文法
# SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再返回数据:
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
- 任意のフィールドを並べ替え条件として使用して、並べ替えられたクエリ結果を返すことができます。
- 複数のフィールドを設定して並べ替えることができます。
- ASCまたはDESCキーワードを使用して、クエリ結果を昇順または降順でソートするように設定できます。デフォルトでは、昇順です。
- WHERE...LIKE句を追加して条件を設定できます。
コマンドプロンプトでORDERBY句を使用する
例
# 以下将在 SQL SELECT 语句中使用 ORDER BY 子句来读取MySQL 数据表 hanscal_tb 中的数据:
# 结果将按降序排列
mysql> use hanscal;
mysql> SELECT * from hanscal_tb ORDER BY submission_date ASC;
# 读取 hanscal_tb 表中所有数据并按 submission_date 字段的升序排列。
mysql> SELECT * from hanscal_tb ORDER BY submission_date DESC;
グループ化
GROUP BYステートメントは、1つ以上の列に基づいて結果セットをグループ化します。グループ化された列でCOUNT、SUM、AVGなどの関数を使用できます。
GROUPBY構文
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
例
この章の例では、次のテーブル構造とデータを使用しています。使用する前に、データベースのデータを確認してください。
mysql> set names utf8; mysql> SELECT * FROM employee_tbl; + ---- + -------- + ---------------------- ----------- + -------- + |id|名前|日付|サインイン| +---- + -------- + ----- ------------ ---- + ------- + | 1 | Xiao Ming | 2016-04-22 15:25:33 | 1 | | 2 | Xiao Wang | 2016-04-20 15:25:47 | 3 | | 3 | Xiao Li | 2016-04-19 15:26:02 | 2 | | 4 | Xiao Wang | 2016-04-07 15:26:14 | 4 | | 5 | Xiao Ming |:26:40 | 4 | | 6 | Xiao Ming | 2016-04-04 15:26:54 | 2 | + ---- + -------- +- -------- ------------- + -------- + 6行セット(0.00秒)
GROUP BYステートメントを使用して、データテーブルを名前でグループ化し、デフォルトで昇順で各人が持っているレコードの数をカウントします。
mysql> SELECT name、COUNT(*)FROM employee_tbl GROUP BY name; + -------- + ---------- + | name | COUNT(*)| + ----- --- + ------------ + | Xiao Li | 1 | | Xiao Ming | 3 | | Xiao Wang | 2 | + -------- + ----- ----+ セット内の3行(0.01秒)
WITHROLLUP構文
WITH ROLLUPは、グループ化された統計に基づいて同じ統計(SUM、AVG、COUNT ...)を実装できます。
例
上記のデータテーブルを名前でグループ化し、各人がログインした回数を数えます。
mysql> SELECT name、SUM(signin)as signin_count FROM employee_tbl GROUP BY name WITH ROLLUP; + -------- + -------------- + | 名前| signin_count | + -------- + -------------- + | 小丽| 2 | | 小明| 7 | | 小王| 7 | | NULL | 16 | + -------- + -------------- + 4行セット(0.00秒)
レコードNULLは、全員のログイン数を表します。
合体構文
合体を使用して、NULLを置き換えることができる名前を設定できます。合体構文は次のとおりです。
select coalesce(a,b,c);
パラメータの説明:a == nullの場合はbを選択し、b == nullの場合はcを選択し、a!= nullの場合はaを選択し、abcがnullの場合はnullを返します(意味がありません)。
次の例では、名前が空の場合、代わりに合計を使用します。
mysql> SELECT Coalesce(name、'total')、SUM(signin)as signin_count FROM employee_tbl GROUP BY name WITH ROLLUP; + ------------- --- + ------ -------- + | colesce(name、'total')| signin_count | + ------------------ -------- +- ------------ + | Xiao Li | 2 | | Xiao Ming | 7 | | Xiao Wang | 7|| 合計|16| + --- ---------- --- + -------------- + 4行セット(0.01秒)
NULL値の処理
MySQLはSQLSELECTコマンドとWHERE句を使用してデータテーブルのデータを読み取りますが、指定されたクエリ条件フィールドがNULLの場合、コマンドが正しく機能しない可能性があります。
この状況を処理するために、MySQLは3つの主要な演算子を提供します。
- IS NULL: この演算子は、列の値がNULLの場合にtrueを返します。
- IS NOT NULL: 列の値がNULLでない場合、演算子はtrueを返します。
- <=>: 比較演算子(=演算子とは異なります)は、比較される2つの値が等しいか、両方がNULLの場合にtrueを返します。
NULLの条件付き比較操作は特別です。= NULLまたは!= NULLを使用して、列内のNULL値を検索することはできません。MySQLでは、NULL値を他の値(NULLであっても)と比較すると、常にNULLが返されます。つまり、NULL=NULLはNULLを返します。NULLは、 ISNULLおよびISNOTNULL演算子を使用してMySQLで処理されます。
例
# 查找数据表hanscal_tb中hanscal_count列是否为NULL,必须使用 IS NULL 和 IS NOT NULL:
mysql> SELECT * FROM hanscal_tb WHERE hanscal_count IS NULL;
ifnull関数
# columnName1,columnName2 为 int 型,
# 当 columnName2 中有值为 null 时,columnName1+columnName2=null,
# ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。
select * , columnName1+ifnull(columnName2,0) from tableName;