一、 数据操作语言 (DML - CRUD)
数据操作是开发中最频繁的部分。在执行删除或修改操作时,务必先通过查询确认 WHERE 条件的准确性。
1. 新增数据 (INSERT)
-- 标准插入
INSERT INTO [test].[dbo].[users] (id, username, password)
VALUES (1, 'zhangsan', 'pw123'), (2, 'lisi', 'pw456');
-- 将查询结果存入新表 (常用于数据备份)
SELECT * INTO users_backup FROM users;
2. 修改数据 (UPDATE)
安全提醒:严禁省略
WHERE子句,否则会更新全表数据!
UPDATE users
SET username = 'wangwu', password = 'newpassword'
WHERE id = 1;
3. 删除数据 (DELETE)
DELETE FROM users WHERE id = 1;
-- 如果要清空全表并重置自增 ID,推荐使用 TRUNCATE
TRUNCATE TABLE users;
二、 表与架构操作 (DDL)
1. 创建表 (CREATE)
建议在创建表时明确指定主键、不为空以及默认值。
CREATE TABLE teacher (
id INT PRIMARY KEY IDENTITY(1,1), -- 自增主键
name NVARCHAR(50) NOT NULL, -- 支持多语言字符
age INT CHECK (age > 0), -- 检查约束
create_time DATETIME DEFAULT GETDATE() -- 默认当前时间
);
2. 修改表结构 (ALTER)
- 添加/删除字段:
ALTER TABLE teacher ADD email VARCHAR(100);
ALTER TABLE teacher DROP COLUMN email;
- 重命名(SQL Server 特有存储过程):
-- 重命名列名
EXEC sp_rename 'teacher.name', 'real_name', 'COLUMN';
-- 重命名表名
EXEC sp_rename 'teacher', 'instructor';
三、 进阶查询技巧 (DQL)
1. 模糊与范围查询
- 通配符查询:
%代表任意字符,_代表单个字符。
SELECT * FROM users WHERE username LIKE 'li%'; -- 以 li 开头
- 数值范围:
SELECT * FROM users WHERE id BETWEEN 1 AND 10;
2. 排序与分页
在 SQL Server 中,TOP 用于限制返回行数,而在 2012 版本后支持标准的 OFFSET-FETCH 进行分页。
-- 获取前 5 条
SELECT TOP 5 * FROM users ORDER BY create_time DESC;
-- 分页查询(跳过 10 行,取 5 行)
SELECT * FROM users
ORDER BY id
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;
3. 聚合与分组 (GROUP BY)
用于报表统计的必备语句:
SELECT
department,
COUNT(*) AS total_staff,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000; -- 对分组后的结果进行过滤
4. 多表联接 (JOIN)
这是关系型数据库的灵魂:
SELECT a.username, b.order_no
FROM users a
INNER JOIN orders b ON a.id = b.user_id
WHERE b.status = 'paid';
四、 常用内置函数速查
| 类别 | 函数 | 说明 |
|---|---|---|
| 字符串 | LEN(str) / SUBSTRING() | 获取长度 / 截取字符串 |
| 数值 | ROUND() / ABS() | 四舍五入 / 绝对值 |
| 日期 | GETDATE() / DATEDIFF() | 当前时间 / 计算时间差 |
| 判空 | ISNULL(val, default) | 如果 val 为空则返回默认值 |
总结
熟练使用 SQL Server 语句不仅仅是背诵语法,更在于理解数据之间的逻辑关系。建议在开发环境中使用 BEGIN TRANSACTION 和 ROLLBACK 来测试你的更新和删除语句,确保安全后再正式提交。