1. 使用DISTINCT关键字
MSSQL取出唯一数据的方法之一是使用DISTINCT关键字。
DISTINCT关键字可以用于SELECT语句中,过滤掉重复的行:
SELECT DISTINCT column1, column2, ...
FROM table_name;
1.1 示例
假设有一张名为student的表格,其中有重复的名字列:
| student_id | name | age | gender |
|------------|-------|-----|--------|
| 1 | Alice | 18 | F |
| 2 | Bob | 20 | M |
| 3 | Alice | 19 | F |
| 4 | Cindy | 22 | F |
| 5 | Bob | 21 | M |
使用DISTINCT关键字查询时,结果集中将过滤掉重复的name列:
SELECT DISTINCT name
FROM student;
执行以上SQL语句,结果将是:
| name |
|-------|
| Alice |
| Bob |
| Cindy |
2. 使用GROUP BY和HAVING语句
在MSSQL中,我们还可以使用GROUP BY和HAVING语句来取出唯一数据。
2.1 GROUP BY语句
GROUP BY语句可按照一列或多列对结果集进行分组:
SELECT column_name(s)
FROM table_name
GROUP BY column_name(s);
2.2 HAVING语句
HAVING语句可对分组后的结果集进行过滤,仅显示满足条件的分组:
SELECT column_name(s)
FROM table_name
GROUP BY column_name(s)
HAVING condition;
2.3 示例
继续以上面的student表格举例,我们想要取出每个名字最大年龄的学生:
SELECT name, MAX(age) AS max_age
FROM student
GROUP BY name;
执行以上SQL语句,我们将得到:
| name | max_age |
|-------|---------|
| Alice | 19 |
| Bob | 21 |
| Cindy | 22 |
接下来我们想要取出最大年龄大于等于20岁的学生:
SELECT name, MAX(age) AS max_age
FROM student
GROUP BY name
HAVING MAX(age) >= 20;
执行以上语句,结果将是:
| name | max_age |
|-------|---------|
| Bob | 21 |
| Cindy | 22 |
3. 使用子查询
除上述两种方法外,我们还可以使用子查询来取出唯一数据。
子查询即指在某个SQL语句的WHERE或HAVING子句中嵌入另一个SELECT语句,实现更复杂的查询功能。
3.1 示例
继续以上面的student表格举例,我们想要取出最大年龄大于等于20岁的学生名字(当然这里我们已经知道Bob和Cindy的名字了):
SELECT name
FROM student
WHERE age IN (
SELECT MAX(age)
FROM student
WHERE age >= 20
);
执行以上SQL语句,结果将是:
| name |
|-------|
| Bob |
| Cindy |
总结
MSSQL取出唯一数据的方法有多种,其中DISTINCT关键字、GROUP BY和HAVING语句以及子查询是较为常见且使用方便的方法。在实际应用中,开发人员可以根据具体需求选择适合的方法。