MS SQL Server 中的 DISTINCT 子句

dbmsdatabaseprogramming

DISTINCT 子句用于从表中删除重复条目。此子句只能与 select 语句一起使用。有时,列包含一些重复值,因此要删除它,我们使用 DISTINCT 子句,因为它将仅返回列中存在的不同值。当提供一个或多个表达式时,DISTINCT 子句将返回唯一值或唯一值的组合。如果为空,DISTINCT 子句不会忽略它并返回 null 作为值。

语法

SELECT DISTINCT expressions
FROM table
[WHERE conditions];

这里,

表达式是从中提取数据的列。

table 是要对其执行操作的表名。

conditions 是可选的,用于选择特定数据。

conditions 1:当不存在空值时

示例

CREATE TABLE Customer(ID INT PRIMARY KEY, Name VARCHAR(50), Country VARCHAR(50), Age int(2)); #Table created
INSERT INTO Customer (ID,  Name,  Country,  Age)
VALUES (1,  'Monu',  'India', 23),  (2,  'Aman ',  'Australia', 25),  (3,  'Naman',  'Sri lanka', 24), 
(4,  'Aditya',  'Australia', 26), (5,  'Raman ,  'Spain', 22); #data inserted
 Select * from Customer;#To show table

输出

Customer

ID 	Name	Country 	Age
1	Monu	India	    23
2	Aman	Australia	25
3	Naman	Sri Lanka	24
4	Aditya	Australia	26
5	Raman	Spain	    22

示例 1

删除重复的国家/地区。

SELECT DISTINCT Country FROM Customer;

输出

Country
India 
Australia
Sri Lanka
Spain

表中存在重复项(Australia),此处将其删除。

示例 2

当不存在重复项时

SELECT DISTINCT name FROM Customer;

输出

Name
Monu
Aman
Naman
Aditya
Raman

此处,name 列中没有重复项,因此返回相同的行。

条件 2:当存在空值时

示例

CREATE TABLE Customer(ID INT PRIMARY KEY, Name VARCHAR(50), Country VARCHAR(50), Age int(2)); #Table created
INSERT INTO Customer (ID,  Name,  Country,  Age)
VALUES (1,  'Monu',  'India', 23),  (2,  'Aman ',  'Australia', null),  (3,  'Naman',  'null', 24), 
(4,  'Aditya',  'null', null) #data inserted
 Select * from Customer;#To show table

输出

Customer

ID 	Name	 Country 	  Age
1	Monu	 India	          23
2	Aman	 Australia	
3	Naman		          24
4	Aditya		

示例:出现 null 值时的不同子句

示例

SELECT DISTINCT Name, Country, Age FROM Customer;

输出

Name	Country 	Age
Monu	India	        23
Aman	Australia	
Naman		        24
Aditya		

条件 3:Distinct 与 group by

示例

CREATE TABLE customer (
  id INT, 
  name VARCHAR(50), 
  age INT, 
  country VARCHAR(50), 
  email id VARCHAR(100)
);

INSERT INTO customer (id,  name,  age,  country,  email id)
VALUES
  (1,  'monu',  23,  'india',  'monu@gmail. com'), 
  (2,  'aman',  20,   NULL,    'aman@gmail. com'), 
  (3,  'monu',  23,  'canada',  NULL), 
  (4,  'raman', NULL, NULL,     NULL);

输出

id	name	age	 city	     email id
1	monu	23	 India	     monu@gmail.com
2	aman	20		     aman@gmail.com
3	monu	23	 Canada	
4	raman			

在 DISTINCT 的情形下

示例

SELECT DISTINCT name, city FROM customer;

输出

name	  city
monu	  India
aman	
monu	  Canada
raman	

在 groups by 的情形下

示例

SELECT name, age FROM customer GROUP BY name, age;

输出

name	 age
monu	 23
aman	 20
raman	

结论

本文包含一个 distinct 子句,用于从表中删除重复数据。有三个条件来解释它。首先,当不存在空值时,如果有重复值,则删除重复项,否则返回相同的值。其次,当存在空值时,Distinct 子句会删除其他空值,并且只显示一个。第三是 group by 与 distinct,除了查询语法外,两者几乎相同。


相关文章