MySQL データベース - MySQL は DISTINCT を使用して重複データをフィルタリングします

SELECT ステートメントを使用して MySQL で単純なデータ クエリを実行すると、一致するすべてのレコードが返されます。テーブル内の一部のフィールドに一意の制約がない場合、これらのフィールドには重複する値が含まれる可能性があります。

重複しないデータのクエリを実現するために、MySQL は DISTINCT キーワードを提供します。

DISTINCT キーワードの主な機能は、データ テーブル内の 1 つ以上のフィールドの繰り返しデータをフィルター処理し、1 つのデータのみをユーザーに返すことです。

DISTINCT キーワードの構文は次のとおりです。

SELECT DISTINCT <字段名> FROM <表名>;

このうち、「フィールド名」は重複レコードを排除する必要があるフィールドの名前で、複数のフィールドはコンマで区切ります。

DISTINCT キーワードを使用する場合は、次の点に注意してください。

  • DISTINCT キーワードは、SELECT ステートメントでのみ使用できます。
  • 1 つ以上のフィールドを重複排除する場合、DISTINCT キーワードはすべてのフィールドの先頭にある必要があります。
  • DISTINCT キーワードの後に​​複数のフィールドがある場合、複数のフィールドが組み合わせて重複排除されます。つまり、複数のフィールドの組み合わせがまったく同じ場合にのみ重複排除されます。

例 1

以下では、特定の例を使用して、重複データなしでクエリを実装する方法を示します。

test データベースの student テーブルのテーブル構造とデータは次のとおりです。

mysql> SELECT * FROM test.student;
+----+----------+------+-------+
| id | name     | age  | stuno |
+----+----------+------+-------+
|  1 | zhangsan |   18 |    23 |
|  2 | lisi     |   19 |    24 |
|  3 | wangwu   |   18 |    25 |
|  4 | zhaoliu  |   18 |    26 |
|  5 | zhangsan |   18 |    27 |
|  6 | wangwu   |   20 |    28 |
+----+----------+------+-------+
6 rows in set (0.00 sec)

結果は、student テーブルに 6 つのレコードがあることを示しています。

次に、student テーブルの age フィールドが重複排除され、SQL ステートメントと実行結果は次のようになります。

mysql> SELECT DISTINCT age FROM student;
+------+
| age  |
+------+
|   18 |
|   19 |
|   20 |
+------+
3 rows in set (0.00 sec)

Student テーブルの name および age フィールドを重複排除するための SQL ステートメントと実行結果は次のとおりです。

mysql> SELECT DISTINCT name,age FROM student;
+----------+------+
| name     | age  |
+----------+------+
| zhangsan |   18 |
| lisi     |   19 |
| wangwu   |   18 |
| zhaoliu  |   18 |
| wangwu   |   20 |
+----------+------+
5 rows in set (0.00 sec)

学生テーブルのすべてのフィールドを重複排除するための SQL ステートメントと実行結果は次のとおりです。

mysql> SELECT DISTINCT * FROM student;
+----+----------+------+-------+
| id | name     | age  | stuno |
+----+----------+------+-------+
|  1 | zhangsan |   18 |    23 |
|  2 | lisi     |   19 |    24 |
|  3 | wangwu   |   18 |    25 |
|  4 | zhaoliu  |   18 |    26 |
|  5 | zhangsan |   18 |    27 |
|  6 | wangwu   |   20 |    28 |
+----+----------+------+-------+
6 rows in set (0.00 sec)

DISTINCT はそのターゲット フィールドのみを返すことができ、他のフィールドは返せないため、実際には DISTINCT キーワードを使用して一意のフィールドの数を返すことがよくあります。

name フィールドと age フィールドが重複排除された後、student テーブル内のレコード数をクエリします。SQL ステートメントと実行結果は次のとおりです。

mysql> SELECT COUNT(DISTINCT name,age) FROM student;
+--------------------------+
| COUNT(DISTINCT name,age) |
+--------------------------+
|                        5 |
+--------------------------+
1 row in set (0.01 sec)

結果は、name フィールドと age フィールドの重複除去後に、student テーブルに 5 つのレコードがあることを示しています。

ダーク ホース プログラマー MySQL データベース エントリから習熟まで、mysql のインストールから高度な mysql まで、mysql の最適化をすべて網羅

おすすめ

転載: blog.csdn.net/Itmastergo/article/details/130282966
おすすめ