MySQL入门:一篇搞定 SQL 基础操作


MySQL入门:一篇搞定 SQL 基础操作


一、先建个数据库玩玩

学 SQL 嘛,第一步肯定是先有个数据库。来,跟着我敲:

CREATE DATABASE test01;
USE test01;

这就相当于创建了一个"文件夹",然后进入这个文件夹。接下来咱们在里面建张表,用来存学生信息:

CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT 'Id',
    name VARCHAR(50) NOT NULL COMMENT '学生名',
    gender VARCHAR(10) NOT NULL COMMENT '性别',
    age INT NOT NULL COMMENT '年龄',
    class VARCHAR(50) NOT NULL COMMENT '班级名',
    score INT NOT NULL COMMENT '分数'
) CHARSET=utf8mb4;

小贴士:

  • AUTO_INCREMENT 让 id 自动增长,不用手动填
  • NOT NULL 表示这个字段不能为空
  • COMMENT 是给字段加注释,方便以后维护
  • CHARSET=utf8mb4 支持中文和 emoji,强烈建议用这个

二、CRUD 四大基础操作

CRUD 就是 增删改查,这是数据库操作的核心,必须掌握!

1. 查(Select)

SELECT * FROM student;

* 表示查询所有列,相当于"我全都要"。

2. 增(Insert)

INSERT INTO student (name, gender, age, class, score)
VALUES 
    ('张三', '男', 18, '一班', 90),
    ('李四', '女', 19, '二班', 85),
    ('王五', '男', 20, '三班', 70);

可以一次性插入多条数据,效率更高哦!

3. 改(Update)

UPDATE student SET name='Sullivan' WHERE id = 2;

⚠️ 注意: 一定要加 WHERE 条件!不然整张表的数据都会被更新,那可就惨了...

4. 删(Delete)

DELETE FROM student WHERE id=3;

同样,WHERE 条件不能少!还有更狠的:

DROP TABLE student;  -- 直接删表,慎用!

三、查询进阶:让数据听话

1. 指定列查询

SELECT name, age FROM student;

只查需要的列,效率更高。

2. 给列起别名

SELECT name AS 名字, age AS 年龄, score AS 分数 FROM student;

AS 可以让结果更友好,前端展示也更方便。

3. 条件查询(WHERE)

-- 分数大于80的
SELECT * FROM student WHERE score > 80;

-- 分数大于90的女性
SELECT * FROM student WHERE score > 90 AND gender = '女';

常用操作符:><=!=ANDOR

4. 模糊查询(LIKE)

-- 名字中包含"十"的
SELECT * FROM student WHERE name LIKE '%十%';
  • % 表示任意字符
  • _ 表示单个字符
  • 比如 LIKE '张%' 匹配姓张的,LIKE '_四' 匹配两个字且第二个字是四的

5. 集合查询(IN / NOT IN)

-- 查询二班和三班的
SELECT * FROM student WHERE class IN ('三班', '二班');

-- 查询除了二班和三班的
SELECT * FROM student WHERE class NOT IN ('三班', '二班');

比写一堆 OR 简洁多了!


四、分页和排序

1. 分页查询(LIMIT)

-- 查前5条
SELECT * FROM student LIMIT 5;

-- 从第0条开始,查5条(第一页)
SELECT * FROM student LIMIT 0, 5;

-- 从第5条开始,查5条(第二页)
SELECT * FROM student LIMIT 5, 5;

分页公式: 起始位置 = (页码 - 1) × 每页数量

2. 排序(ORDER BY)

-- 按分数升序,分数相同再按年龄降序
SELECT * FROM student ORDER BY score ASC, age DESC;
  • ASC 升序(从小到大)
  • DESC 降序(从大到小)

五、分组统计(GROUP BY)

这个功能超级实用,比如要统计每个班的平均成绩:

SELECT class AS 班级, AVG(score) AS 平均成绩
FROM student
GROUP BY class
ORDER BY 平均成绩 DESC;

完整语法结构:

SELECT 列名, 聚合函数(列)
FROM 表名
WHERE 条件           -- 分组前过滤
GROUP BY 分组列
HAVING 分组条件      -- 分组后过滤
ORDER BY 排序列
LIMIT 数量;

常用聚合函数

函数作用例子
COUNT()统计数量COUNT(*)
AVG()平均值AVG(score)
SUM()求和SUM(score)
MAX()最大值MAX(score)
MIN()最小值MIN(score)

综合示例:

SELECT 
    AVG(score) AS 平均成绩, 
    COUNT(*) AS 人数, 
    SUM(score) AS 总成绩, 
    MIN(score) AS 最低分, 
    MAX(score) AS 最高分 
FROM student;

HAVING vs WHERE

  • WHERE:分组过滤
  • HAVING:分组过滤
-- 查询平均成绩大于80的班级
SELECT class, AVG(score) AS avg_score
FROM student
GROUP BY class
HAVING avg_score > 80;

去重(DISTINCT)

-- 查看所有有哪些班级
SELECT DISTINCT class FROM student;

六、内置函数大全

1. 字符串函数

SELECT 
    CONCAT(name, '-') AS 拼接,      -- 字符串拼接
    SUBSTR(name, 1, 1) AS 首字,     -- 截取字符串
    LENGTH(name) AS 长度,           -- 字符串长度
    UPPER('aaa') AS 大写,           -- 转大写
    LOWER('BBB') AS 小写            -- 转小写
FROM student;

2. 数值函数

SELECT 
    ROUND(2.5),      -- 四舍五入 → 3
    CEIL(3.9),       -- 向上取整 → 4
    FLOOR(4.1),      -- 向下取整 → 4
    ABS(-5),         -- 绝对值 → 5
    MOD(6, 5);       -- 取模 → 1

3. 日期函数

SELECT 
    YEAR('2023-06-01 22:06:03'),   -- 年 → 2023
    MONTH('2023-06-01 22:06:03'),  -- 月 → 6
    DAY('2023-06-01 22:06:03'),    -- 日 → 1
    DATE('2023-06-01 22:06:03'),   -- 日期部分
    TIME('2023-06-01 22:06:03');   -- 时间部分

4. 条件函数

IF 函数(适合单条件):

SELECT name, IF(score >= 60, '及格', '不及格') FROM student;

CASE 函数(适合多条件):

SELECT 
    name, score, 
    CASE 
        WHEN score >= 90 THEN '优秀' 
        WHEN score >= 60 THEN '良好'
        ELSE '差' 
    END AS '档次' 
FROM student;

这个跟 JavaScript 里的 if-elseswitch 很像,很好理解!

5. 系统函数

SELECT VERSION(), DATABASE(), USER();
  • VERSION():MySQL 版本
  • DATABASE():当前数据库名
  • USER():当前用户

6. 其他实用函数

-- NULLIF:相等返回NULL,不等返回第一个值
SELECT NULLIF(1, 1), NULLIF(1, 2);

-- COALESCE:返回第一个非NULL的值
SELECT COALESCE(NULL, 1), COALESCE(NULL, NULL, 2);

-- GREATEST/LEAST:返回最大/最小值
SELECT GREATEST(1, 2, 3), LEAST(1, 2, 3, 4);

7. 类型转换

-- 字符串转数字再比较
SELECT GREATEST(1, CONVERT('123', SIGNED), 3);
SELECT GREATEST(1, CAST('123' AS SIGNED), 3);

可转换的类型:

  • SIGNED:整型
  • UNSIGNED:无符号整型
  • DECIMAL:浮点型
  • CHAR:字符类型
  • DATE/TIME/DATETIME:日期时间类型

七、引号使用小贴士

这个容易踩坑,记一下:

用途使用方式例子
字符串值单引号 ' 或双引号 "'张三'
表名/列名反引号 ` 或不加 `student` student

总结一下

今天咱们覆盖了 MySQL 的核心知识点:

✅ 数据库和表的创建
✅ CRUD 基础操作
✅ 条件查询(WHERE、LIKE、IN)
✅ 分页和排序(LIMIT、ORDER BY)
✅ 分组统计(GROUP BY、HAVING、聚合函数)
✅ 各类内置函数(字符串、数值、日期、条件等)

学习建议:

  1. 多动手敲代码,光看不练假把式
  2. 理解每个语句的执行顺序
  3. 注意 WHEREHAVING 的区别
  4. 删除和更新操作一定要加条件!

声明:麋鹿与鲸鱼|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - MySQL入门:一篇搞定 SQL 基础操作


Carpe Diem and Do what I like