SQL中distinct的用法

1. SQL中distinct的基本用法

在SQL中,DISTINCT是用于删除重复数据的关键字。它通常与SELECT语句一起使用,用于从表格中选取不同的值。DISTINCT关键字可以用来过滤掉重复的行,只获取唯一的行。例如:

SELECT DISTINCT column1, column2, ... columnN

FROM table_name

WHERE [condition];

上面的SQL语句将从指定的表格中选择不同的值。需要注意的是,DISTINCT关键字作用于SELECT中的所有列,而不是仅仅作用于第一个列。

1.1 DISTINCT用于查询单个列

可以将DISTINCT用于单个列的查询,例如:

SELECT DISTINCT column_name

FROM table_name

WHERE [condition];

上面的SQL语句将从指定的表格中选择不同的值,只选取column_name这一列的值,忽略其他列。这样可以更容易地查看表格中的值,找到需要的数据。

1.2 DISTINCT用于查询多个列

可以将DISTINCT关键字用于查询多个列,例如:

SELECT DISTINCT column_name1, column_name2, ...

FROM table_name

WHERE [condition];

这样可以选择多个列,并过滤掉重复的行,只获取唯一的行。例如,查询名字和出生日期相同的人:

SELECT DISTINCT first_name, last_name, birth_date

FROM employee

WHERE first_name='John' AND last_name='Doe' AND birth_date='1980-01-01';

上面的SQL语句将从employee表格中选择名字和出生日期相同的人,忽略其他信息。

1.3 DISTINCT用于复杂查询

DISTINCT关键字也可以用于复杂的查询,例如使用聚合函数(SUM、MIN、MAX、AVG等):

SELECT DISTINCT department_id, AVG(salary) AS average_salary

FROM employees

GROUP BY department_id;

上面的SQL语句将从employees表格中选择每个部门的平均工资,并且过滤掉重复的部门。

2. DISTINCT的注意点

在使用DISTINCT关键字时需要注意以下几点:

2.1 DISTINCT关键字只作用于SELECT语句中的所有列

DISTINCT关键字作用于SELECT语句中的所有列,而不是仅仅作用于第一个列。例如:

SELECT DISTINCT column1, column2, column3, ...

FROM table_name

WHERE [condition];

上面的SQL语句将对所有列进行去重,而不仅仅是column1这一列。

2.2 DISTINCT会影响查询的性能

在某些情况下,DISTINCT关键字会影响查询的性能。如果数据库中包含大量的数据,使用DISTINCT可能会导致查询变慢。

2.3 DISTINCT关键字不能与所有的数据库引擎兼容

虽然大多数SQL数据库都支持DISTINCT关键字,但是有些数据库可能不支持它。在使用DISTINCT关键字时,需要确保所使用的数据库支持它。

3. 示例

以下示例展示了如何在SQL中使用DISTINCT关键字:

3.1 示例1

假设有一个students表格,其中包含以下数据:

id   name       age

1 John 18

2 Mary 18

3 John 21

4 Peter 20

5 John 21

6 Mary 18

从表格中查询不同的名字:

SELECT DISTINCT name

FROM students;

执行以上SQL语句,将得到以下结果:

name

John

Mary

Peter

可以看到,查询到的结果中只包含了不同的名字。

3.2 示例2

假设有一个employees表格,其中包含以下数据:

employee_id  first_name  last_name   department_id  salary

1 John Doe 1 50000

2 Jane Smith 2 60000

3 John Smith 1 55000

4 Jane Doe 3 65000

5 John Smith 2 70000

6 Jane Smith 3 80000

查询每个部门的平均工资,并过滤掉重复的部门:

SELECT DISTINCT department_id, AVG(salary) AS average_salary

FROM employees

GROUP BY department_id;

执行以上SQL语句,将得到以下结果:

department_id   average_salary

1 52500

2 65000

3 72500

可以看到,查询到的结果中只包含了不同的部门和每个部门的平均工资。

4. 总结

DISTINCT关键字是SQL中非常有用的工具,可以用于从表格中选择不同的值,过滤掉重复的行。在SQL中,DISTINCT关键字通常与SELECT语句一起使用,用于选取不同的值。需要注意的是,DISTINCT关键字会影响查询的性能,所以在使用时需要谨慎。

数据库标签