SQL Server 常用查询命令

SQL Server 查询核心仍以 SELECT 为基础,语法与 MySQL 有少量差异(如分页、函数),以下是高频场景命令,直接复制即可适配使用。

一、基础查询(数据提取)

1. 查询所有字段(不推荐生产环境)

sql

-- 语法:SELECT * FROM 表名;(* 效率低,易受表结构变更影响)
SELECT * FROM dbo.Student; -- dbo是默认架构,可省略,提议显式写

2. 查询指定字段 + 别名

sql

-- 语法:SELECT 字段1 [AS] 别名1, 字段2 别名2 FROM 表名;([]内为可选)
SELECT 
    Id AS 学生ID,
    Name 姓名,
    Age 年龄,
    CreateTime 注册时间
FROM dbo.Student;

3. 去重查询(消除重复记录)

sql

-- 语法:SELECT DISTINCT 字段 FROM 表名;
SELECT DISTINCT ClassId 班级ID FROM dbo.Student; -- 查询所有不重复的班级ID

4. 常量字段(新增固定值列)

sql

-- 场景:报表中添加固定标识,如“数据来源”
SELECT 
    Name 姓名,
    Age 年龄,
    'XX小学' AS 数据来源 -- 常量字段,所有行值均为“XX小学”
FROM dbo.Student;

二、条件查询(数据筛选)

核心用 WHERE 子句,支持多条件组合,SQL Server 特有:TOP 取前 N 条、IIF 简单判断,运算符与通用 SQL 一致。

1. 单条件 + 范围查询

sql

-- 常用运算符:=、<>、>、<、BETWEEN...AND...、IN、LIKE、IS NULL
SELECT Name 姓名, Age 年龄 FROM dbo.Student 
WHERE Age BETWEEN 8 AND 12; -- 年龄8-12岁(包含边界)

SELECT Name 姓名 FROM dbo.Student 
WHERE ClassId IN (1, 3, 5); -- 班级ID为1、3、5的学生

2. 多条件组合(AND/OR/NOT)

sql

SELECT Name 姓名, Score 成绩 FROM dbo.Exam 
WHERE Subject = '数学' AND Score >= 85 
AND NOT Score = 100; -- 数学成绩≥85且不等于100的学生

3. 模糊查询(LIKE)

sql

-- %:匹配任意0-N个字符;_:匹配1个任意字符;[]:匹配指定范围/集合
SELECT Name 姓名 FROM dbo.Student 
WHERE Name LIKE '李%'; -- 姓张的所有学生

SELECT Name 姓名 FROM dbo.Student 
WHERE Name LIKE '李[小大]%'; -- 名字以“李小”或“李大”开头的学生(如“李小华”“李大壮”)

4. 空值查询(IS NULL/IS NOT NULL)

sql

-- 注意:不能用 = NULL 或 != NULL,必须用 IS 关键字
SELECT Name 姓名 FROM dbo.Student 
WHERE Phone IS NULL; -- 查询无手机号的学生

SELECT Name 姓名 FROM dbo.Student 
WHERE Phone IS NOT NULL; -- 查询有手机号的学生

三、排序 + 取前 N 条(数据整理)

1. 排序查询(ORDER BY)

sql

-- 语法:ORDER BY 字段1 [ASC/DESC], 字段2 [ASC/DESC];(ASC升序默认,DESC降序)
SELECT Name 姓名, Age 年龄, Score 成绩 FROM dbo.Exam 
ORDER BY Score DESC, Age ASC; -- 先按成绩降序,同成绩按年龄升序

2. 取前 N 条数据(TOP,SQL Server 特有)

sql

-- 语法:SELECT TOP N 字段 FROM 表名;(N为数字,可搭配ORDER BY)
SELECT TOP 10 Name 姓名, Score 成绩 FROM dbo.Exam 
ORDER BY Score DESC; -- 查询成绩前10的学生

3. 取百分比数据(TOP + PERCENT)

sql

-- 场景:取成绩前20%的学生
SELECT TOP 20 PERCENT Name 姓名, Score 成绩 FROM dbo.Exam 
ORDER BY Score DESC;

四、聚合查询(数据统计)

常用聚合函数:COUNT()(计数)、SUM()(求和)、AVG()(平均)、MAX()(最大)、MIN()(最小),支持 DISTINCT 去重统计。

sql

-- 1. 计数(统计总人数、非空字段数)
SELECT 
    COUNT(*) AS 总学生数, -- 统计所有行(包含空值字段)
    COUNT(DISTINCT ClassId) AS 班级数, -- 统计不重复的班级数
    COUNT(Phone) AS 有手机号人数 -- 统计非空手机号的人数
FROM dbo.Student;

-- 2. 求和、平均、最大最小
SELECT 
    SUM(Score) AS 数学总分,
    AVG(Score) AS 数学平均分,
    MAX(Score) AS 最高分,
    MIN(Score) AS 最低分
FROM dbo.Exam 
WHERE Subject = '数学';

五、分组查询(按类别统计)

用 GROUP BY 分组,搭配聚合函数;HAVING 过滤分组结果(区别:WHERE 过滤行,HAVING 过滤分组,支持聚合函数)。

sql

-- 1. 按班级分组,统计每个班级的人数和平均年龄
SELECT 
    ClassId 班级ID,
    COUNT(*) 人数,
    AVG(Age) 平均年龄
FROM dbo.Student 
GROUP BY ClassId; -- 分组字段必须出目前SELECT中(聚合函数除外)

-- 2. 过滤分组:只显示人数≥30的班级
SELECT 
    ClassId 班级ID,
    COUNT(*) 人数
FROM dbo.Student 
GROUP BY ClassId 
HAVING COUNT(*) >= 30; -- HAVING后可直接用聚合函数

六、关联查询(多表联合)

支持 INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)、FULL JOIN(全连接),SQL Server 表别名提议用 AS(可选)。

示例表结构

  • 学生表(Student):Id、Name、ClassId
  • 班级表(Class):Id、ClassName、Teacher

1. 内连接(只显示匹配数据)

sql

-- 语法:表1 INNER JOIN 表2 ON 关联条件
SELECT 
    s.Name 学生姓名,
    c.ClassName 班级名称,
    c.Teacher 班主任
FROM dbo.Student s -- s是Student表别名
INNER JOIN dbo.Class c -- c是Class表别名
ON s.ClassId = c.Id; -- 关联条件:学生表的ClassId = 班级表的Id

2. 左连接(左表全显,右表匹配不到为 NULL)

sql

-- 场景:查询所有学生,无班级的学生显示“未分班”
SELECT 
    s.Name 学生姓名,
    IIF(c.ClassName IS NULL, '未分班', c.ClassName) 班级名称 -- IIF是SQL Server特有判断函数
FROM dbo.Student s
LEFT JOIN dbo.Class c
ON s.ClassId = c.Id;

七、分页查询(SQL Server 2012+ 推荐)

SQL Server 分页有两种方式:OFFSET FETCH(2012 及以上版本,推荐)、ROW_NUMBER()(兼容旧版本),以下是主流用法。

1. OFFSET FETCH 分页(简洁高效)

sql

-- 语法:OFFSET 起始索引 ROWS FETCH NEXT 每页条数 ROWS ONLY;(起始索引从0开始)
-- 场景:第2页,每页10条数据(起始索引=10)
SELECT Id, Name, Age FROM dbo.Student 
ORDER BY Id ASC -- 分页必须搭配ORDER BY,否则报错
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;

2. ROW_NUMBER () 分页(兼容旧版本)

sql

-- 先给数据加行号,再筛选行号范围
SELECT * FROM (
    SELECT 
        Id, Name, Age,
        ROW_NUMBER() OVER (ORDER BY Id ASC) AS RowNum -- 按Id升序加行号
    FROM dbo.Student
) AS Temp -- 子查询必须加别名
WHERE Temp.RowNum BETWEEN 11 AND 20; -- 第2页,每页10条(11-20行)

八、常用辅助查询(实用场景)

1. 查询表结构(字段、类型、约束)

sql

-- 方式1:系统视图(推荐,详情完整)
SELECT 
    COLUMN_NAME 字段名,
    DATA_TYPE 数据类型,
    IS_NULLABLE 是否允许空,
    COLUMN_DEFAULT 默认值
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Student'; -- 表名区分大小写(部分环境)

-- 方式2:存储过程(简洁)
EXEC sp_help 'dbo.Student'; -- 快速查看表的所有信息(字段、索引、约束等)

2. 模糊查询表名(找目标表)

sql

-- 场景:查找包含“Student”关键字的所有表
SELECT NAME 表名 FROM sys.tables 
WHERE NAME LIKE '%Student%';
© 版权声明

相关文章

暂无评论

none
暂无评论...