【数据库】MySQL数据库的数据查询及操作命令汇总(超详细)

【数据库】MySQL数据库的数据查询及操作命令汇总(超详细)

MySQL作为最受欢迎的开源关系型数据库之一,在现代软件开发中扮演着至关重要的角色。

(关注不迷路哈!!!)

文章目录


一、数据准备阶段

在开始任何数据库操作之前,首先需要建立正确的表结构并填充初始数据。

1.1 表结构设计要点

sql 复制代码
/* 示例:学生信息表 */
create table student
(
sno varchar(20) not null primary key,/*学生编号*/
sname varchar(20) not null,/* 学生姓名*/
ssex varchar(20) not null,/* 学生性别*/
sbirthday datetime,/* 学生生日*/
class varchar(20)/* 班级*/
);

关键要素包括:

  • 合理设置字段类型和长度
  • 正确使用约束(主键、非空等)
  • 清晰添加注释说明各字段含义

1.2 数据初始化技巧

sql 复制代码
/* 插入单条记录 */
insert into student values('108','曾华','男','1977-09-01','95033');

/* 批量插入多条记录 */
insert into student values
('105','匡明','男','1975-10-02','95031'),
('107','王丽','女','1976-01-23','95033');

数据定义与管理

操作类别 关键词 功能描述
表结构定义 CREATE TABLE 创建新表
数据插入 INSERT INTO 插入数据记录
数据更新 UPDATE ... SET 修改现有数据
数据删除 DELETE FROM 删除符合条件的数据
表结构变更 ALTER TABLE 修改已存在的表结构
表移除 DROP TABLE 删除整个表

二、基础查询操作精要

2.1 字段与表的别名运用

sql 复制代码
-- 字段别名提升可读性
select sname as 姓名, ssex as 性别, class as 班级 from student;

-- 表别名简化复杂查询
select * from student st where st.sname = '王芳';

2.2 去重与限定查询

sql 复制代码
-- 消除重复值
select distinct depart from teacher;

-- 范围查询
select * from score where degree between 60 and 80;

查询基本结构

条件查询操作符

类型 操作符 示例
比较运算 =, <, >, <=, >=, !=<> age > 25
逻辑运算 AND, OR, NOT age > 20 AND sex = '女'
模糊匹配 LIKE + %(多字符)/_(单字符) name LIKE '张%'
范围匹配 BETWEEN ... AND ... age BETWEEN 20 AND 30
集合匹配 IN (...) city IN ('北京', '上海')
空值判断 IS NULL, IS NOT NULL email IS NOT NULL

三、高级查询策略

3.1 多表联接查询

三种核心联接方式:

  1. 内连接(INNER JOIN):返回两表匹配的记录

    sql 复制代码
    SELECT * from student s INNER JOIN score sc on s.sno = sc.sno;
  2. 左连接(LEFT JOIN):保留左表全部记录

    sql 复制代码
    SELECT * from student s LEFT JOIN score sc on s.sno = sc.sno;
  3. 右连接(RIGHT JOIN):保留右表全部记录

    sql 复制代码
    SELECT * from student s RIGHT JOIN score sc on s.sno = sc.sno;

连接查询表格对比

类型 语法结构 特点说明
内连接 INNER JOIN ON 返回两表共有的记录
左外连接 LEFT JOIN ON 返回左表所有记录,右表无对应则填充 NULL
右外连接 RIGHT JOIN ON 返回右表所有记录,左表无对应则填充 NULL
全外连接 MySQL 不支持原生 FULL OUTER JOIN,可用 UNION 模拟 返回左右两表的所有记录
自连接 一张表与自身连接 适用于树状结构或层级关系查询

3.2 子查询的强大功能

标量子查询示例:

sql 复制代码
-- 查询高于平均分的成绩记录
select * from score where degree > (select avg(degree) from score);

列子查询示例:

sql 复制代码
-- 查询特定条件下的学生及其成绩
select * from (SELECT * from student where class = '95031') stu
INNER JOIN score sc on stu.sno = sc.sno;

四、数据筛选与排序艺术

4.1 条件筛选的多种手段

sql 复制代码
-- 比较运算符
select * from student where sbirthday > '1976-01-01';

-- 逻辑组合
select * from student where class='95031' or ssex='女';

-- 模糊匹配
select * from student where sname like '王%';

-- 空值判断
select * from student where sbirthday is null;

4.2 精准排序控制

sql 复制代码
-- 单字段排序
select * from student order by sbirthday desc;

-- 多字段排序
select * from score order by cno, degree desc;

排序机制

五、聚合分析利器

五大核心聚合函数:

函数 功能 示例
count() 统计记录数(行数) select count(*) from student
max() 获取最大值 select max(degree) from score
min() 获取最小值 select min(sbirthday) from student
sum() 数值求和 select sum(degree) from score
avg() 计算平均值 select avg(degree) from score

六、分组统计进阶

6.1 GROUP BY深度应用

sql 复制代码
-- 按班级统计学生人数
select class, count(*) from student group by class;

-- 复杂分组统计
select class, count(*), avg(year(now()) - year(sbirthday)) as 平均年龄 
from student group by class;

6.2 HAVING子句精准筛选

sql 复制代码
-- 筛选平均成绩超过80分的课程
select cno, avg(degree) from score 
group by cno having avg(degree) > 80;

聚合函数与分组配合使用规则总结

函数名 功能 可用于 WHERE 可用于 HAVING 可配合 GROUP BY
COUNT() 计数(行数) ✅(当分组时)
MAX() 最大值 ✅(当分组时)
MIN() 最小值 ✅(当分组时)
SUM() 求和 ✅(当分组时)
AVG() 平均值 ✅(当分组时)

七、高效数据管理技巧

7.1 数据更新策略

sql 复制代码
-- 单一记录更新
update student set sname='王美丽' where sname='王丽';

-- 批量更新
update score set degree = degree * 1.1 where degree < 60;

7.2 数据删除注意事项

sql 复制代码
-- 条件删除(推荐)
delete from teacher where tno='861';

-- 清空表(谨慎使用)
truncate table score;

-- 删除表(极其谨慎)
drop table if exists score;

八、分页查询优化

sql 复制代码
-- 分页公式:limit (页码-1)*每页数量, 每页数量
-- 查询第3页,每页5条记录,即计算偏移量:(3-1)*5 = 10,显示第11到第15条记录。
select * from student limit 10, 5;

结果集控制策略

方法 目标 实现方式
分页显示 控制输出量 LIMIT offset,count
去重显示 消除冗余项 DISTINCT 字段列表
别名设置 提高可读性 字段 AS 别名

九、SQL编写三步法(黄金法则)

  1. 搭框架:构建基本SELECT语句和JOIN结构
  2. 看条件:确定WHERE子句的具体条件
  3. 显字段:明确SELECT后要展示的字段

实践示例:

sql 复制代码
-- 查询所有学生的'计算机导论'课程成绩,显示姓名、成绩、课程名
-- 第一步:搭框架
SELECT * from student INNER JOIN score ON student.sno = score.sno
INNER JOIN course ON score.cno = course.cno;
-- 第二步:看条件
-- where course.cname = '计算机导论';
-- 第三步:返回字段名
SELECT sname, degree, cname from student INNER JOIN score ON student.sno = score.sno
INNER JOIN course ON score.cno = course.cno
where course.cname = '计算机导论';

通过系统掌握以上内容,可以游刃有余地应对大部分MySQL数据库操作需求。

相关推荐
百***81272 小时前
【HTML+CSS】使用HTML与后端技术连接数据库
css·数据库·html
6***3493 小时前
MySQL项目
数据库·mysql
木井巳3 小时前
【MySQL数据库】数据库基础
数据库·mysql
Wang's Blog3 小时前
MySQL: 查询全流程深度解析与性能优化实践指南
数据库·mysql·性能优化
lqj_本人3 小时前
鸿蒙原生与Qt混合开发:性能优化与资源管理
qt·harmonyos
一 乐3 小时前
宠物管理|宠物共享|基于Java+vue的宠物共享管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·springboot·宠物
Wang's Blog3 小时前
MongoDB小课堂: 高级查询操作符与游标管理综合指南之深度整合逻辑操作符、字段处理、数组查询与游标控制的最佳实践
数据库·mongodb
垂金烟柳3 小时前
MongoDB GridFS 历史数据自动化清理实践
数据库·mongodb·自动化
lqj_本人3 小时前
鸿蒙Qt字体实战:消灭“豆腐块“乱码与自定义字体加载
qt·华为·harmonyos
大牙Adela3 小时前
在Mac上通过Multipass虚拟机中的Ubuntu系统使用Graphviz工具
c语言·qt·ubuntu·macos·multipass·graphviz