【MySQL】基本查询

MySQL 基本查询详解

在数据库应用开发中,增删改查(CRUD)是最常见的操作。掌握 MySQL 的基本查询语法,不仅能提升数据管理效率,还能为后续的复杂查询打下基础。本文将结合示例,从 Create、Retrieve、Update、Delete 四个方面详细介绍 MySQL 的基本查询。


一、Create(创建数据)

1.1 单行数据 + 全列插入

sql 复制代码
INSERT INTO students VALUES (101, 10001, '孙悟空', '11111');

要求插入的值与表中列的数量和顺序完全一致。


1.2 多行数据 + 指定列插入

sql 复制代码
INSERT INTO students (id, sn, name) VALUES 
(102, 20001, '曹孟德'), 
(103, 20002, '孙仲谋');

指定列时,可以让自增列自动赋值。


1.3 插入否则更新(ON DUPLICATE KEY UPDATE)

当主键或唯一键冲突时,可以选择更新:

sql 复制代码
INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师')
ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';

1.4 替换(REPLACE)

若存在冲突记录,则先删除再插入:

sql 复制代码
REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');

二、Retrieve(查询数据)

2.1 SELECT 查询列

全列查询
sql 复制代码
SELECT * FROM exam_result;
指定列查询
sql 复制代码
SELECT id, name, english FROM exam_result;
查询字段为表达式
sql 复制代码
SELECT id, name, chinese + math + english 总分 FROM exam_result;
去重查询
sql 复制代码
SELECT DISTINCT math FROM exam_result;

2.2 WHERE 条件过滤

英语不及格的同学
sql 复制代码
SELECT name, english FROM exam_result WHERE english < 60;
语文成绩在 [80, 90] 分之间
sql 复制代码
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
模糊匹配(姓孙)
sql 复制代码
SELECT name FROM exam_result WHERE name LIKE '孙%';
NULL 查询
sql 复制代码
SELECT name, qq FROM students WHERE qq IS NOT NULL;

2.3 ORDER BY 排序

按数学成绩升序
sql 复制代码
SELECT name, math FROM exam_result ORDER BY math;
按总分降序
sql 复制代码
SELECT name, chinese + math + english 总分 FROM exam_result ORDER BY 总分 DESC;

2.4 LIMIT 分页

每页 3 条记录,第 1 页:

sql 复制代码
SELECT id, name, math, english, chinese 
FROM exam_result ORDER BY id LIMIT 3 OFFSET 0;

三、Update(更新数据)

3.1 更新单列

sql 复制代码
UPDATE exam_result SET math = 80 WHERE name = '孙悟空';

3.2 更新多列

sql 复制代码
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';

3.3 基于原值更新

sql 复制代码
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT 3;

3.4 更新全表

sql 复制代码
UPDATE exam_result SET chinese = chinese * 2;

四、Delete(删除数据)

4.1 删除指定行

sql 复制代码
DELETE FROM exam_result WHERE name = '孙悟空';

4.2 删除整表数据

sql 复制代码
DELETE FROM for_delete;

4.3 截断表(清空并重置自增)

sql 复制代码
TRUNCATE TABLE for_truncate;

五、插入查询结果

可将查询结果插入新表:

sql 复制代码
INSERT INTO no_duplicate_table 
SELECT DISTINCT * FROM duplicate_table;

六、聚合函数

  • 统计人数:
sql 复制代码
SELECT COUNT(*) FROM students;
  • 平均分:
sql 复制代码
SELECT AVG(chinese + math + english) 平均总分 FROM exam_result;
  • 最高/最低分:
sql 复制代码
SELECT MAX(english), MIN(math) FROM exam_result;

七、Group By 分组查询

统计每个部门的平均工资和最高工资:

sql 复制代码
SELECT deptno, AVG(sal), MAX(sal) FROM EMP GROUP BY deptno;

总结

  • Create:插入单条、多条数据,支持冲突更新与替换。
  • Retrieve :利用 SELECT 搭配 WHEREORDER BYLIMIT 实现各种查询。
  • Update:可更新单列、多列,支持表达式运算。
  • Delete :可删除部分或全部数据,TRUNCATE 更高效但不可回滚。
  • 聚合与分组 :结合 COUNTSUMAVGMAXMINGROUP BY 实现统计分析。

熟练掌握这些基本操作,就能为复杂的 SQL 开发打下坚实基础。

相关推荐
IvorySQL5 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·6 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德6 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫6 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i6 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.6 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn7 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露7 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星7 小时前
sql语言之分组语句group by
java·数据库·sql
符哥20087 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql