SQL语法基础
SQL(Structured Query Language)是用于管理关系数据库的标准语言。MySQL遵循SQL标准,并提供了自己的扩展。
SQL语句分类
- DDL(数据定义语言) - 定义和管理数据库对象
- DML(数据操作语言) - 操作数据库中的数据
- DQL(数据查询语言) - 查询数据库中的数据
- DCL(数据控制语言) - 控制数据库访问权限
- TCL(事务控制语言) - 管理数据库事务
SQL基本语法规则
语句结束符
SQL语句以分号(;)结束,但在某些客户端工具中分号是可选的。
SQL示例
SELECT * FROM users;
大小写敏感性
- SQL关键字不区分大小写:
SELECT与select是相同的 - 数据库名、表名和列名在Windows上不区分大小写,在Linux/Unix上区分大小写
SQL示例
-- 以下语句是等效的
SELECT username FROM users;
select username from users;
Select Username From Users;
注释
MySQL支持三种注释方式:
SQL示例
-- 单行注释(标准SQL)
# 单行注释(MySQL扩展)
/*
多行注释
可以跨越多行
*/
SELECT * FROM users; -- 这是行尾注释
标识符命名规则
合法标识符
- 可以包含字母、数字、下划线和美元符号
- 必须以字母或下划线开头
- 最大长度为64个字符
- 不能是MySQL保留字
SQL示例
-- 合法的标识符
user_name
user123
_user
$user
-- 不合法的标识符
123user -- 以数字开头
user-name -- 包含连字符
select -- 保留字
引用标识符
如果标识符包含特殊字符或是保留字,可以使用反引号(`)引用:
SQL示例
-- 引用包含特殊字符的标识符
CREATE TABLE `user-table` (
`select` VARCHAR(50)
);
-- 在查询中使用引用的标识符
SELECT `select` FROM `user-table`;
SQL语句结构
基本SELECT语句
SQL语法
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column1 ASC|DESC
LIMIT number;
INSERT语句
SQL语法
-- 插入指定列
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
-- 插入所有列
INSERT INTO table_name
VALUES (value1, value2, ...);
UPDATE语句
SQL语法
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
DELETE语句
SQL语法
DELETE FROM table_name
WHERE condition;
运算符
比较运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| = | 等于 | age = 18 |
| <> 或 != | 不等于 | age <> 18 |
| > | 大于 | age > 18 |
| < | 小于 | age < 18 |
| >= | 大于等于 | age >= 18 |
| <= | 小于等于 | age <= 18 |
| BETWEEN | 在某个范围内 | age BETWEEN 18 AND 25 |
| LIKE | 搜索模式 | name LIKE 'J%' |
| IN | 指定多个可能的值 | age IN (18, 21, 25) |
逻辑运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| AND | 逻辑与 | age > 18 AND status = 'active' |
| OR | 逻辑或 | age < 18 OR age > 65 |
| NOT | 逻辑非 | NOT status = 'inactive' |
算术运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 加法 | price + tax |
| - | 减法 | price - discount |
| * | 乘法 | price * quantity |
| / | 除法 | total / items |
| % 或 MOD | 取模 | age % 2 |
常用SQL函数
字符串函数
SQL示例
SELECT
CONCAT(first_name, ' ', last_name) AS full_name,
UPPER(username) AS upper_username,
LENGTH(email) AS email_length,
SUBSTRING(description, 1, 100) AS short_desc
FROM users;
数值函数
SQL示例
SELECT
ROUND(price, 2) AS rounded_price,
CEIL(rating) AS ceiling_rating,
FLOOR(rating) AS floor_rating,
ABS(balance) AS absolute_balance
FROM products;
日期函数
SQL示例
SELECT
NOW() AS current_datetime,
CURDATE() AS current_date,
CURTIME() AS current_time,
DATE_ADD(created_at, INTERVAL 7 DAY) AS next_week,
DATEDIFF(NOW(), birth_date) AS days_old
FROM users;
SQL语句执行顺序
了解SQL语句的执行顺序对于编写高效的查询非常重要:
- FROM - 确定要查询的表
- WHERE - 过滤行
- GROUP BY - 分组行
- HAVING - 过滤分组
- SELECT - 选择列
- ORDER BY - 排序结果
- LIMIT - 限制结果数量
SQL最佳实践
- 使用有意义的表名和列名
- 避免使用SELECT *,明确指定需要的列
- 使用适当的索引提高查询性能
- 避免在WHERE子句中使用函数,这会使索引失效
- 使用参数化查询防止SQL注入
- 适当使用事务确保数据一致性
学习建议:熟练掌握SQL语法是数据库开发的基础,建议多练习各种SQL语句,理解每个关键字的作用。
下一步学习
掌握了SQL基本语法后,您可以继续学习:
- 数据定义语言(DDL) - 学习创建和管理数据库对象
- 数据操作语言(DML) - 学习插入、更新和删除数据
- 数据查询语言(DQL) - 深入学习SELECT查询