MySQL查询语句从入门到精通 🐬
📖 查库宝典 欢迎来到SQL魔法学院!在这里你将学会:
- 基础查询:像查户口一样精准定位数据 👮
- 条件过滤:给你的数据加上智能筛子 🕵️
- 排序分组:让杂乱数据秒变整齐队列 🪂
- 聚合统计:变身数据炼金术师 ✨
- 表间穿梭:开启数据宇宙的任意门 🚪
1. 基础SELECT三连击 🥊
🎯 查户口三部曲
sql
/* 🌰 栗子1:查班级花名册 */
-- 只要姓名和学号(精准狙击)
SELECT 姓名, 学号 FROM 学生表;
-- 查看全部信息(班主任视角)
SELECT * FROM 学生表;
-- 给列起外号(保护隐私)
SELECT 姓名 AS 昵称, 年龄+1 AS 虚拟年龄 FROM 学生表;🔍 小白指南:
SELECT后跟想看的列,就像点菜*是通配符,代表"我全都要"AS可以给列起别名,就像给朋友起外号
2. 条件过滤(WHERE) 🔍
🕵️ 特工级过滤技巧
sql
-- 年龄刺客:专抓25+的小哥哥小姐姐
SELECT * FROM users WHERE age > 25;
-- 价格雷达:锁定10-50元的宝藏商品
SELECT * FROM products WHERE price BETWEEN 10 AND 50;
-- 部门追踪:直击市场部最新动态
SELECT * FROM employees WHERE department = 'Marketing';新增小白常见问题解答:
sql
-- 🚨 新手易错点:
-- 错误:WHERE 年龄 > 18岁 (不能带单位!)
-- 正确:WHERE 年龄 > 18
-- 错误:WHERE 姓名 = 张三 (文本要加引号!)
-- 正确:WHERE 姓名 = '张三'特工装备库 🧰
🚨 特工须知
- 精确打击:
=, >, <(例:price > 100) - 排除法:
<>或!=(例:status != '已注销') - 范围锁定:
BETWEEN...AND(含边界!) - 模糊搜索:
LIKE(%代表任意字符,_是单字符) - 黑名单:
IN(例:category IN ('A', 'B')) - 幽灵探测:
IS NULL(专门查找失踪数据)
sql
-- 用户名精确匹配(注意不是双等号!)
SELECT * FROM users WHERE username = 'admin';
-- 价格区间锁定(含100和500)
SELECT * FROM products WHERE price BETWEEN 100 AND 500;sql
-- % 是万能通配符,_ 是单字符占位
SELECT * FROM customers WHERE name LIKE '张%'; -- 张氏家族大集合
SELECT * FROM products WHERE model LIKE '手机_'; -- 查找手机1/手机A等sql
-- 黑名单排查
SELECT * FROM products WHERE category IN ('电子产品', '电脑', '手机');
-- 寻找失联用户
SELECT * FROM customers WHERE phone IS NULL;特工装备库新增生活案例:
sql
-- 找10-20元的饮料(闭区间包含10和20)
SELECT * FROM 商品
WHERE 价格 BETWEEN 10 AND 20
AND 分类 = '饮料';
-- 找姓王且手机尾号8的会员
SELECT * FROM 会员
WHERE 姓名 LIKE '王%'
AND 手机号 LIKE '%8';3. 排序艺术(ORDER BY) 🎨
🧙 排序法则
- 默认升序(
ASC),降序要加DESC - 中文排序按拼音(a-z顺序)
- NULL值就像幽灵,总排在最前面
- 多列排序就像先按年级排,再按分数排
sql
-- 价格从低到高(适合比价)
SELECT * FROM products ORDER BY price;
-- 价格从高到低(土豪专属)
SELECT * FROM products ORDER BY price DESC;sql
-- 先按部门排,同部门再按工资降序
SELECT * FROM employees ORDER BY department, salary DESC;新增步骤分解:
sql
/* 🧭 排序三步走:
1. 先写基本查询:SELECT * FROM 学生表
2. 确定排序依据:按成绩排序
3. 添加排序方式:ORDER BY 成绩 DESC
*/
-- 最终效果:
SELECT 姓名, 成绩
FROM 学生表
ORDER BY 成绩 DESC;4. 分页秘籍(LIMIT) 🍰
📑 吃数据蛋糕的正确姿势
sql
-- 第一口:前10条
SELECT * FROM products LIMIT 10;
-- 第二口:10-20条(两种吃法)
SELECT * FROM products LIMIT 10 OFFSET 10;
SELECT * FROM products LIMIT 10, 10; -- 简写更美味🍰 把数据表想象成蛋糕:
- LIMIT 5 → 切前5厘米的蛋糕
- LIMIT 3, 5 → 从第3厘米开始切5厘米
- 每页20条数据:LIMIT 20 OFFSET (页码-1)*20
5. 分组魔法(GROUP BY) ✨
🧪 数据炼金术
sql
-- 部门人口普查
SELECT 部门, COUNT(*) AS 人数 FROM 员工表 GROUP BY 部门;
-- 商品价格探秘
SELECT 类别, AVG(价格) AS 均价 FROM 商品表 GROUP BY 类别;
-- 多条件炼金
SELECT 性别, COUNT(*) AS 数量
FROM 员工表
WHERE 地址 = '杭州' AND 年龄 < 30
GROUP BY 性别;聚合函数全家福 👨👩👧👦
🔢 数值变形术
COUNT():数量统计专家MAX()/MIN():极值追踪者AVG():平均数魔法师SUM():求和狂人
⚠️ COUNT的玄机
sql
-- 统计所有行(包括NULL)
SELECT COUNT(*) FROM users WHERE age > 18;
-- 只统计有年龄的用户
SELECT COUNT(age) FROM users WHERE age > 18;6. HAVING结界 🛡️
🧙 WHERE vs HAVING
- WHERE:数据进入炼金炉前的筛选
- HAVING:炼金完成后的成品质检
sql
-- 找出均价超100的贵族品类
SELECT 品类, AVG(价格) AS 均价
FROM 商品表
GROUP BY 品类
HAVING 均价 > 100;sql
-- 高薪部门人才库
SELECT 部门, COUNT(*) AS 人数
FROM 员工表
WHERE 工资 > 20000
GROUP BY 部门
HAVING 人数 > 10;7. 表间穿梭术(JOIN) 🚪
🌌 数据宇宙任意门
sql
-- 内连接:寻找共同秘密
SELECT 订单.*, 客户.姓名
FROM 订单
INNER JOIN 客户 ON 订单.客户ID = 客户.ID;
-- 左连接:保留所有左表记录
SELECT 员工.姓名, 部门.名称
FROM 员工
LEFT JOIN 部门 ON 员工.部门ID = 部门.ID;
-- 右连接:保留所有右表记录
SELECT 学生.姓名, 班级.名称
FROM 学生
RIGHT JOIN 班级 ON 学生.班级ID = 班级.ID;新增友情比喻:
sql
/* 👫 表连接就像朋友牵手:
内连接 → 只显示有共同朋友的人
左连接 → 左边的人全部显示,右边没朋友的显示NULL
全连接 → 不管有没有朋友都显示(可惜MySQL不支持)
*/
-- 举个栗子:学生表和社团表牵手
SELECT 学生.姓名, 社团.名称
FROM 学生
LEFT JOIN 社团 ON 学生.社团ID = 社团.ID;8. 综合训练营 🏋️
sql
/* 🎯 实战:电商数据分析 */
-- 找出北京地区月销量超过1000的零食类商品
SELECT 商品名称, 月销量
FROM 商品表
WHERE 类别 = '零食'
AND 仓库地区 = '北京'
AND 月销量 > 1000
ORDER BY 月销量 DESC
LIMIT 10;
/* 🎮 实战:游戏玩家分析 */
-- 统计每个服务器战斗力前10的玩家(要求等级>50)
SELECT 服务器, 玩家名, 战斗力
FROM 玩家数据
WHERE 等级 > 50
ORDER BY 服务器, 战斗力 DESC
LIMIT 10;