Skip to content

MySQL查询语句从入门到精通 🐬

📖 查库宝典 欢迎来到SQL魔法学院!在这里你将学会:

  • 基础查询:像查户口一样精准定位数据 👮
  • 条件过滤:给你的数据加上智能筛子 🕵️
  • 排序分组:让杂乱数据秒变整齐队列 🪂
  • 聚合统计:变身数据炼金术师 ✨
  • 表间穿梭:开启数据宇宙的任意门 🚪

1. 基础SELECT三连击 🥊

🎯 查户口三部曲

sql
/* 🌰 栗子1:查班级花名册 */
-- 只要姓名和学号(精准狙击)
SELECT 姓名, 学号 FROM 学生表;

-- 查看全部信息(班主任视角)
SELECT * FROM 学生表;

-- 给列起外号(保护隐私)
SELECT 姓名 AS 昵称, 年龄+1 AS 虚拟年龄 FROM 学生表;

🔍 小白指南:

  1. SELECT 后跟想看的列,就像点菜
  2. * 是通配符,代表"我全都要"
  3. 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;