目录
- 一、SQL的"普通话"——标准SQL
- 1.1 为什么需要标准SQL?
- 二、SQL三大语句类型(附记忆口诀)
- 2.1 DDL(数据定义语言)——"盖房子"
- 2.2 DML(数据操作语言)——"搬家具"
- 2.3 DCL(数据控制语言)——"配钥匙"
- 三、SQL书写规范(避免被同事吐槽)
- 3.1 基础排版规范
- 3.2 注释规范
- 四、新手必看避坑指南
- 4.1 常见错误
- 4.2 安全操作建议
- 五、实战训练(含答案解析)
- 5.1 创建商品表
- 5.2 数据验证
- 六、学习资源推荐
一、SQL的"普通话"——标准SQL
1.1 为什么需要标准SQL?
场景 | 标准SQL写法 | MySQL方言 | Oracle方言 |
---|---|---|---|
获取当前时间 | CURRENT_TIMESTAMP | NOW() | SYSDATE |
限制查询结果数 | FETCH FIRST 5 ROWS | LIMIT 5 | WHERE ROWNUM <=5 |
字符串连接 | CONCAT('A', 'B') | 'A' || 'B' | CONCAT('A', 'B') |
重要建议:
- 优先学习标准SQL语法(占80%使用场景)
- 各数据库特有语法用时查阅文档即可
二、SQL三大语句类型(附记忆口诀)
2.1 DDL(数据定义语言)——“盖房子”
-- 创建用户表(带注释规范)
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
username VARCHAR(20) NOT NULL COMMENT '用户名',
reg_date DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 修改表结构(新增字段)
ALTER TABLE users ADD COLUMN phone VARCHAR(15) COMMENT '联系电话';
2.2 DML(数据操作语言)——“搬家具”
-- 插入数据(明确指定字段)
INSERT INTO users (username, phone)
VALUES ('张三', '13800138000');
-- 更新数据(必须带WHERE!)
UPDATE users SET phone='13912345678'
WHERE user_id = 1; -- 指定条件
-- 删除数据(危险操作示范)
DELETE FROM users WHERE user_id = 1; -- 生产环境慎用
2.3 DCL(数据控制语言)——“配钥匙”
-- 创建只读账号(权限控制示例)
CREATE USER 'read_user'@'%' IDENTIFIED BY 'Read@123';
GRANT SELECT ON mydb.* TO 'read_user'@'%';
记忆口诀:
- DDL:Create(建)、Alter(改)、Drop(删)
- DML:Insert(增)、Update(改)、Delete(删)
- DCL:Grant(授权)、Revoke(收权)
三、SQL书写规范(避免被同事吐槽)
3.1 基础排版规范
-- 好的写法(清晰易读)
SELECT
u.user_id,
u.username,
COUNT(o.order_id) AS order_count
FROM users AS u
LEFT JOIN orders AS o
ON u.user_id = o.user_id
WHERE u.reg_date >= '2024-01-01'
GROUP BY u.user_id
HAVING order_count > 3
ORDER BY order_count DESC;
-- 坏的写法(难以维护)
SELECT u.user_id,u.username,COUNT(o.order_id) AS order_count FROM users u LEFT JOIN orders o ON u.user_id=o.user_id WHERE u.reg_date>='2024-01-01' GROUP BY u.user_id HAVING order_count>3 ORDER BY order_count DESC;
3.2 注释规范
/*
订单统计查询
创建人:张三
日期:2025-02-21
*/
SELECT
product_id,
SUM(quantity) AS total_qty -- 总销售数量
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31'
GROUP BY product_id;
四、新手必看避坑指南
4.1 常见错误
错误类型 | 错误示例 | 正确写法 | 原因说明 |
---|---|---|---|
忘记WHERE条件 | UPDATE users SET status=0 | 添加WHERE user_id=1001 | 避免全表更新 |
混淆引号使用 | WHERE name = "张三" | WHERE name = '张三' | 字符串必须用单引号 |
NULL值判断错误 | WHERE age = NULL | WHERE age IS NULL | NULL需要特殊运算符 |
错误使用保留字 | CREATE TABLE (group INT) | 改用group_name | group 是SQL保留字 |
4.2 安全操作建议
- 数据修改前先查询
-- 先确认要影响的数据 SELECT * FROM users WHERE age > 30; -- 再执行删除 DELETE FROM users WHERE age > 30;
- 使用事务保护重要操作
START TRANSACTION; UPDATE account SET balance = balance - 100 WHERE user_id = 1; UPDATE account SET balance = balance + 100 WHERE user_id = 2; COMMIT; -- 确认无误后提交
五、实战训练(含答案解析)
5.1 创建商品表
需求:
- 表名:products
- 字段:
- 商品ID(主键,自增长)
- 商品名称(最长50字符,必填)
- 价格(正数,保留两位小数)
- 库存量(默认0)
- 上架时间(自动记录)
参考答案:
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(50) NOT NULL,
price DECIMAL(10,2) CHECK (price > 0),
stock INT DEFAULT 0,
list_time DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
5.2 数据验证
-- 插入测试数据
INSERT INTO products (product_name, price, stock)
VALUES ('无线键盘', 199.99, 50);
-- 查询结果
SELECT * FROM products;
/* 预期输出:
product_id | product_name | price | stock | list_time
----------------------------------------------------
1 | 无线键盘 |199.99 | 50 |2025-02-21 19:30:00
*/
六、学习资源推荐
-
在线练习平台
-
推荐书籍
- 《SQL必知必会》——快速入门首选
- 《MySQL是怎样运行的》——深入理解原理
-
开发工具
- DBeaver(免费多功能数据库工具)
- MySQL Workbench(官方管理工具)
下期预告:《表的创建、更新及删除》
互动话题:你在学习SQL时遇到过哪些坑?欢迎评论区留言讨论!
温馨提示:点击【关注】不迷路,每天持续输出