sql如何去重查询

1. 简介

在处理大量数据的时候,经常会遇到需要去重查询的场景,SQL中提供了多种去重查询的方式,可以根据具体的业务需求选择合适的方式进行查询。

2. DISTINCT关键词去重查询

2.1 语法

SELECT DISTINCT column_name(s)

FROM table_name;

DISTINCT关键词用于在查询的时候去除重复的记录,只返回唯一的记录。

在上述语法中,column_name是要去重的列名,table_name是要查询的表名。

2.2 示例

假设我们有一张员工表employees,包含了每个员工的姓名和所在部门,如下所示:

姓名 部门
张三 销售部
李四 人力资源部
王五 研发部
张三 销售部
赵六 财务部
王五 研发部

如果要查询所有员工所在的部门,但是不想出现重复的部门名称,可以使用DISTINCT关键词:

SELECT DISTINCT 部门

FROM employees;

查询结果如下:

部门
销售部
人力资源部
研发部
财务部

3. GROUP BY关键词去重查询

3.1 语法

SELECT column_name(s)

FROM table_name

GROUP BY column_name(s);

GROUP BY关键词用于在查询的时候按照指定的列对记录进行分组,并且可以对每组记录进行聚合计算。

在上述语法中,column_name是要分组的列名,table_name是要查询的表名。

3.2 示例

继续使用上面的员工表employees,如果想要查询每个部门的员工数量,可以使用GROUP BY关键词:

SELECT 部门, COUNT(*) AS 员工数量

FROM employees

GROUP BY 部门;

查询结果如下:

部门 员工数量
销售部 2
人力资源部 1
研发部 2
财务部 1

4. HAVING子句去重查询

4.1 语法

SELECT column_name(s)

FROM table_name

GROUP BY column_name(s)

HAVING condition;

HAVING子句用于在分组之后过滤掉不符合条件的记录。

在上述语法中,column_name是要分组的列名,table_name是要查询的表名,condition是筛选条件。

4.2 示例

继续使用上面的员工表employees,如果想要查询每个部门员工数量大于等于2的部门,可以使用GROUP BY关键词和HAVING子句:

SELECT 部门, COUNT(*) AS 员工数量

FROM employees

GROUP BY 部门

HAVING COUNT(*) >= 2;

查询结果如下:

部门 员工数量
销售部 2
研发部 2

5. UNION关键词去重查询

5.1 语法

SELECT column_name(s)

FROM table_name1

UNION

SELECT column_name(s)

FROM table_name2;

UNION关键词用于将两个或多个SELECT语句的结果集合并到一起,并且去掉重复的记录。

在上述语法中,column_name是要查询的列名,table_name1和table_name2是要查询的表名。

5.2 示例

假设我们有两张学生表:student_1和student_2,每张表包含了学生的姓名和成绩,如下所示:

表名 姓名 成绩
student_1 张三 90
student_1 李四 80
student_1 王五 85
student_2 张三 90
student_2 赵六 75
student_2 钱七 95

如果想要查询所有学生的姓名和成绩,可以使用UNION关键词:

SELECT 姓名, 成绩

FROM student_1

UNION

SELECT 姓名, 成绩

FROM student_2;

查询结果如下:

姓名 成绩
张三 90
李四 80
王五 85
赵六 75
钱七 95

6. 结论

以上就是常见的SQL去重查询方式,根据实际情况选择合适的方式可以大大提高SQL的执行效率。

数据库标签