SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页参数;
3.4.2 基础查询操作
sql复制代码
-- 1. 查询指定字段
SELECT product_name, unit_price, quantity FROM sales;
-- 2. 查询所有字段
SELECT * FROM sales;
-- 3. 字段别名
SELECT
product_name AS '商品名称',
unit_price AS '单价',
quantity AS '数量'
FROM sales;
-- 简写别名
SELECT
product_name '商品名称',
unit_price '单价'
FROM sales;
-- 4. 去除重复记录
SELECT DISTINCT region FROM sales;
SELECT DISTINCT product_name FROM sales;
3.4.3 条件查询
比较运算符参考表:
运算符
描述
示例
注意事项
=
等于
age = 25
精确匹配
<> 或 !=
不等于
gender <> '男'
两种写法等效
>
大于
salary > 5000
-
>=
大于等于
age >= 18
-
<
小于
score < 60
-
<=
小于等于
price <= 100
-
BETWEEN...AND
范围匹配
age BETWEEN 20 AND 30
包含边界值
IN(...)
多值匹配
region IN ('北京','上海')
相当于多个OR
LIKE
模糊匹配
name LIKE '张%'
%匹配任意字符,_匹配单个字符
IS NULL
空值判断
email IS NULL
不能用 = NULL
IS NOT NULL
非空判断
phone IS NOT NULL
不能用 != NULL
逻辑运算符参考表:
运算符
描述
示例
优先级
AND 或 &&
逻辑与
age > 18 AND gender = '男'
高
OR 或 `
`
逻辑或
city = '北京' OR city = '上海'
中
NOT 或 !
逻辑非
NOT deleted = 1
最高
()
括号
(age < 18 OR age > 60) AND vip = 1
最高
sql复制代码
-- 比较运算符
SELECT * FROM sales WHERE quantity > 5;
SELECT * FROM sales WHERE unit_price <= 3000;
SELECT * FROM sales WHERE total_amount = 11998.00;
SELECT * FROM sales WHERE region != '北京';
-- 范围查询
SELECT * FROM sales WHERE quantity BETWEEN 3 AND 8;
SELECT * FROM sales WHERE unit_price BETWEEN 1000 AND 5000;
-- IN查询
SELECT * FROM sales WHERE region IN ('北京', '上海');
SELECT * FROM sales WHERE product_id IN (101, 103, 105);
-- 模糊查询
SELECT * FROM sales WHERE product_name LIKE '%电脑%';
SELECT * FROM sales WHERE product_name LIKE '智能%';
SELECT * FROM sales WHERE product_name LIKE '_脑%';
-- NULL值判断
SELECT * FROM sales WHERE region IS NOT NULL;
-- 逻辑运算符
SELECT * FROM sales WHERE quantity > 3 AND unit_price < 4000;
SELECT * FROM sales WHERE region = '北京' OR region = '上海';
SELECT * FROM sales WHERE NOT region = '广州';
3.4.4 聚合函数
函数
描述
示例
对NULL值的处理
COUNT()
统计行数
COUNT(*), COUNT(column)
COUNT(*)计数所有行,COUNT(column)忽略NULL
SUM()
求和
SUM(salary)
忽略NULL值
AVG()
求平均值
AVG(score)
忽略NULL值
MAX()
求最大值
MAX(age)
忽略NULL值
MIN()
求最小值
MIN(price)
忽略NULL值
GROUP_CONCAT()
连接字符串
GROUP_CONCAT(name)
忽略NULL值
sql复制代码
-- 统计记录数
SELECT COUNT(*) FROM sales;
SELECT COUNT(DISTINCT region) FROM sales;
-- 最大值最小值
SELECT MAX(total_amount) FROM sales;
SELECT MIN(unit_price) FROM sales;
-- 求和求平均
SELECT SUM(total_amount) FROM sales;
SELECT AVG(unit_price) FROM sales;
-- 综合应用
SELECT
COUNT(*) AS '总销售笔数',
SUM(total_amount) AS '销售总额',
AVG(unit_price) AS '平均单价',
MAX(quantity) AS '最大销量'
FROM sales;
3.4.5 分组查询
sql复制代码
-- 按地区分组统计
SELECT
region,
COUNT(*) AS '销售笔数',
SUM(total_amount) AS '区域销售额'
FROM sales
GROUP BY region;
-- 按商品分组统计
SELECT
product_name,
SUM(quantity) AS '总销量',
AVG(unit_price) AS '平均售价'
FROM sales
GROUP BY product_name;
-- HAVING筛选分组结果
SELECT
region,
COUNT(*) AS '销售笔数'
FROM sales
GROUP BY region
HAVING COUNT(*) >= 2;
-- 多字段分组
SELECT
region,
product_name,
SUM(quantity) AS '总销量'
FROM sales
GROUP BY region, product_name;
3.4.6 排序查询
sql复制代码
-- 单字段排序
SELECT * FROM sales ORDER BY total_amount DESC;
SELECT * FROM sales ORDER BY sale_date ASC;
-- 多字段排序
SELECT * FROM sales
ORDER BY region ASC, total_amount DESC;
-- 结合聚合函数排序
SELECT
product_name,
SUM(quantity) AS total_sold
FROM sales
GROUP BY product_name
ORDER BY total_sold DESC;
3.4.7 分页查询
sql复制代码
-- 基本分页语法
SELECT * FROM sales LIMIT 起始位置, 每页数量;
-- 查询第一页,每页3条
SELECT * FROM sales LIMIT 0, 3;
-- 查询第二页
SELECT * FROM sales LIMIT 3, 3;
-- 简写方式(第一页)
SELECT * FROM sales LIMIT 3;
3.4.8 综合查询案例
sql复制代码
-- 1. 查询单价在3000-6000之间的商品销售记录
SELECT * FROM sales
WHERE unit_price BETWEEN 3000 AND 6000;
-- 2. 查询北京或上海地区,销量超过2件的商品
SELECT * FROM sales
WHERE region IN ('北京', '上海') AND quantity > 2;
-- 3. 统计各地区的平均销售额
SELECT
region,
AVG(total_amount) AS avg_sales
FROM sales
GROUP BY region;
-- 4. 查询销售金额最高的前3笔订单
SELECT * FROM sales
ORDER BY total_amount DESC
LIMIT 3;
-- 5. 按商品分类统计,只显示总销量超过5件的商品
SELECT
product_name,
SUM(quantity) AS total_quantity
FROM sales
GROUP BY product_name
HAVING total_quantity > 5
ORDER BY total_quantity DESC;
3.4.9 SQL执行顺序
顺序
子句
描述
是否必须
1
FROM
指定数据来源表
是
2
WHERE
行级过滤条件
否
3
GROUP BY
分组字段
否
4
HAVING
组级过滤条件
否
5
SELECT
选择输出字段
是
6
ORDER BY
结果排序
否
7
LIMIT
结果分页
否
sql复制代码
-- SQL语句的实际执行顺序:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
-- 验证示例
SELECT
region AS sales_region,
COUNT(*) AS order_count
FROM sales
WHERE total_amount > 5000
GROUP BY region
HAVING order_count >= 2
ORDER BY order_count DESC
LIMIT 5;
3.5 DCL 数据控制语言
3.5.1 用户管理
sql复制代码
-- 1. 查询所有用户
SELECT * FROM mysql.user;
-- 2. 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
-- 3. 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';
-- 4. 删除用户
DROP USER '用户名'@'主机名';
-- 实际案例
-- 创建本地访问用户
CREATE USER 'shop_admin'@'localhost' IDENTIFIED BY 'Admin123!';
-- 创建远程访问用户
CREATE USER 'shop_user'@'%' IDENTIFIED BY 'User123!';
-- 修改用户密码
ALTER USER 'shop_user'@'%' IDENTIFIED BY 'NewPassword456!';
-- 删除用户
DROP USER 'shop_user'@'%';
3.5.2 权限管理
常用权限列表:
权限
描述
示例
风险等级
ALL PRIVILEGES
所有权限
GRANT ALL ON database.*
高
SELECT
查询数据
GRANT SELECT ON table
低
INSERT
插入数据
GRANT INSERT ON table
中
UPDATE
更新数据
GRANT UPDATE ON table
中
DELETE
删除数据
GRANT DELETE ON table
高
CREATE
创建表/库
GRANT CREATE ON database.*
高
DROP
删除表/库
GRANT DROP ON database.*
高
ALTER
修改表结构
GRANT ALTER ON table
高
INDEX
创建删除索引
GRANT INDEX ON table
中
sql复制代码
-- 1. 查询用户权限
SHOW GRANTS FOR '用户名'@'主机名';
-- 2. 授予权限
GRANT 权限列表 ON 数据库.表 TO '用户名'@'主机名';
-- 3. 撤销权限
REVOKE 权限列表 ON 数据库.表 FROM '用户名'@'主机名';
-- 权限管理案例
-- 查询用户权限
SHOW GRANTS FOR 'shop_admin'@'localhost';
-- 授予所有权限
GRANT ALL PRIVILEGES ON shop.* TO 'shop_admin'@'localhost';
-- 授予特定权限
GRANT SELECT, INSERT, UPDATE ON shop.customer TO 'shop_user'@'%';
-- 撤销权限
REVOKE DELETE ON shop.customer FROM 'shop_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;