当前位置: 首页 > 面试题库 >

SQL的DISTINCT子句如何工作?

锺离昂然
2023-03-14
问题内容

我正在寻找关于在包含多个表的查询中DISTINCT子句如何在SQL(SQL Server 2008,如果有所作为)中工作的答案?

我的意思是SQL引擎如何使用DISTINCT子句处理查询?

我问的原因是,我经验丰富的同事告诉我SQL将DISTINCT应用于每个表的每个字段。对我来说似乎不太可能,但我想确保…。

例如,有两个表:

CREATE TABLE users
(
u_id INT PRIMARY KEY,
u_name VARCHAR(30),
u_password VARCHAR(30)
)

CREATE TABLE roles
(
r_id INT PRIMARY KEY,
r_name VARCHAR(30)
)

CREATE TABLE users_l_roles
(
u_id INT FOREIGN KEY REFERENCES users(u_id) ,
r_id INT FOREIGN KEY REFERENCES roles(r_id) 
)

然后有这个查询:

SELECT          u_name
FROM            users 
INNER JOIN      users_l_roles ON users.u_id = users_l_roles.u_id
INNER JOIN      roles ON users_l_roles.r_id = roles.r_id

假设有两个角色的用户,则上面的查询将返回两个具有相同用户名的记录。

但是此查询具有不同之处:

SELECT DISTINCT u_name
FROM            users 
INNER JOIN      users_l_roles ON users.u_id = users_l_roles.u_id
INNER JOIN      roles ON users_l_roles.r_id = roles.r_id

将仅返回一个用户名。

问题是SQL是比较所有联接表(u_id,u_name,u_password,r_id,r_name)中的所有字段,还是只比较查询中的命名字段(u_name)并区分结果?


问题答案:

DISTINCT过滤掉您 返回的 字段的重复值。

一种真正简化的查看方式是:

  • 它根据FROMWHERE子句构建您的整体结果集(包括重复项)
  • 它根据您要返回的字段对该结果集进行排序
  • 它将删除这些字段中的所有重复值

它在语义上等效于GROUP BY所有返回的字段都在GROUP BY子句中的。



 类似资料:
  • MariaDB 子句用于在语句中从结果中删除重复项。 语法: 注意:当在子句中仅使用表达式时,查询将返回该表达式的唯一值。当您使用多个表达式在子句时,查询将返回多个表达式的唯一组合。 子句不会忽略值。因此,在SQL语句中使用子句时,结果集将包含作为不同的值。 1. 使用单一表达式示例 有一个名称为的表,有一些重复的条目。例如,就有两个学生的名字叫:。可以先来看看表的中的全部数据记录。 现在,使用子

  • 主要内容:Oracle SELECT DISTINCT语句简介,Oracle DISTINCT示例在本教程中将学习如何使用Oracle 语句从表中查询不同(过滤相同值)的数据。 Oracle SELECT DISTINCT语句简介 在SELECT语句中使用子句来过滤结果集中的重复行。它确保在子句中返回指定的一列或多列的值是唯一的。 以下说明了语句的语法: 在上面语法中,表的列中的值将进行比较以过滤重复项。 要根据多列检索唯一数据,只需要在子句中指定列的列表,如下所示: 在此语法中,,和中的值的

  • SELECT DISTINCT 语句用于返回唯一不同的值。 SQL SELECT DISTINCT 语句 在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。 DISTINCT 关键词用于返回唯一不同的值。 SQL SELECT DISTINCT 语法SELECT DISTINCT column_name,column_name FROM table_name;

  • 问题内容: SQL Server是否支持SQL:1999标准的声明?例如查询 可以使用重写 问题答案: 也有一个针对此问题的Uservoice条目,您可以在其中投票将其包含在下一个版本中: 添加对ISO <独特谓词>的语言和优化程序支持

  • 问题内容: 我在ASP.NET中做一个非常简单的查询,但是在插入该子句后它停止工作。 例子: 如果我删除了LIKE,它将起作用。因此,我认为这与’‘引号有关? 问题答案: sql语句应如下所示: 我不确定我是否完全理解您的评论,但是您似乎想在查询中使用文本框中的值-也许这就是您要尝试执行的操作: “ text_box”将是您的textBox控件的实际ID。

  • 本文向大家介绍我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?,包括了我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?的使用技巧和注意事项,需要的朋友参考一下 通过在MySQL查询中将WHERE子句与DISTINCT子句一起使用,我们将基于一个条件,即MySQL返回结果集的唯一行。通过在MySQL查询中使用LIMIT子句和DISTIN