【SQL语句大全(MySQL)】

SQL语法

添加

sql 复制代码
INSERT INTO 表名 
VALUES (每个属性对应的值);

删除

sql 复制代码
DELETE FROM 表名 
WHERE 条件    //如果不写条件,那么该表的内容会被全部删除

修改

sql 复制代码
UPDATE 表名 
SET 字段名=字段值,字段名=字段值... 
WHERE 条件    //与删除一样,如果不写where条件,那么所有记录都会被修改

查询

基本查询

sql 复制代码
SELECT * FROM 表名    //查询所有

SELECT 字段名,字段名...
FROM 表名    //查询指定字段

SELECT DISTINCT 字段名,字段名...
FROM 表名    //查询指定字段,返回唯一不同的值

条件查询

sql 复制代码
-- 单条件查询
SELECT * FROM 表名 WHERE condition

-- 多条件查询
SELECT * FROM 表名 WHERE condition1 and condition2	//得到两个条件都满足的记录
SELECT * FROM 表名 WHERE condition1 or condition2	//得到两个条件至少满足一个的记录

-- 指定字段查询范围
SELECT * FROM 表名 WHERE name in ('张三','李四')	//查询括号中每个name对应的记录
SELECT * FROM 表名 WHERE age between (10,20)	//查询age在 [10,20) 区间的记录

更多运算符如下:

分组函数/聚合函数

sql 复制代码
sum    求和
avg    取平均
max    取最大值
min    取最小值
count    取得记录数    //count(*)表示取得当前查询表所有记录; count(字段名称),不会统计为null的记录

分组查询

sql 复制代码
-- 按照字段值进行分组,查找组内的平均年龄
SELECT AVG(age) FROM 表名 GROUP BY 字段名    

排序

sql 复制代码
SELECT * FROM 表名 ORDER BY 字段名 (ASC)   //按照字段值进行排序,默认正序
SELECT * FROM 表名 ORDER BY 字段名 DESC    //倒序排序
sql 复制代码
-- 先按照字段1的值进行倒序排序,再将字段1的值相同的记录按照字段2正序排序
SELECT * FROM 表名 
ORDER BY 字段名1 DESC,字段名2    
sql 复制代码
-- 先按照字段1的值进行倒序排序,再将字段1的值相同的记录按照字段2倒序排序
SELECT * FROM 表名 
ORDER BY 字段名1 DESC,字段名2 DESC   

分页查询(限制查询)

sql 复制代码
SELECT * FROM 表名 LIMIT A OFFSET B;

第一种解释(分页):
A = pageSize// 页面大小,即每个页面的记录数
B = pageSize * (pageIndex - 1) // pageIndex是第几页,SQL的页数从0开始,pageIndex从1开始,所以要 - 1, B必须为A的整数倍

另一种解释:从第B+1条记录开始,查询A条记录(记录从第一条开始);B可以不是A的整数倍

例如:select * from user limit 3 offset 5 //查询出第六条到第八条记录

多表查询

sql 复制代码
SELECT s.name,c.class_name 
FROM student s,class c    //如果没有连接条件,那么查询结果为俩张表的指定字段的所有记录

连接查询根据年代分类

1、SQL92写法 缺点:表连接条件与查询条件放在一起,没有分离

格式:select xxx from A 表名,B表名 where 表连接条件 and 数据查询条件

sql 复制代码
SELECT s.name,c.class_name 
FROM student s,class c 
WHERE s.class_num = c.class_num    //用where写连接条件

2、SQL99写法 优点:表连接独立,结构清晰,如果结果数据不满足要求,可再追加where条件进行过滤;

格式:select xxx from A 表名 join B 表名 on 表的连接条件

sql 复制代码
select student.name,class.class_name FROM student
JOIN class ON student.class_num = class.class_num

连接查询根据连接方式分类

1、内连接
sql 复制代码
SELECT student.name,class.class_name FROM student 
INNER JOIN class ON student.class_num = class.class_num
2、左外连接

包含左边表的全部行(不管右边的表中是否存在与他们匹配的行),以及右边表中全部匹配的行

sql 复制代码
SELECT student.name,class.class_name  from student 
LEFT JOIN class on student.class_num = class.class_num
3、右外连接

包含右边表的全部行(不管右边的表中是否存在与他们匹配的行),以及左边表中全部匹配的行

sql 复制代码
SELECT student.name,class.class_name FROM student 
RIGHT JOIN class ON student.class_num = class.class_num

多张表连接的语法格式

sql 复制代码
select xxx from A表
join B表 on 连接条件1
join C表 on 连接条件2

嵌套查询

一般在子查询中,程序先运行在嵌套在最内层的语句,再运行外层。

因此在写子查询语句时,可以先测试下内层的子查询语句是否输出了想要的内容,

再一层层往外测试,增加子查询正确率。否则多层的嵌套使语句可读性很低。

sql 复制代码
select t1.name FROM
(SELECT student.name,relationship.cno FROM student 
INNER JOIN relationship on student.sno = relationship.sno) t1    //t1是内层子查询的结果的别名/简称
WHERE t1.cno = '1001';

SQL语句书写顺序

sql 复制代码
SELECT DISTINCT <字段名>
FROM <表名>
JOIN <表名> 
ON <连接条件>
WHERE <筛选条件>
GROUP BY <字段名>
HAVING <筛选条件>
UNION
ORDER BY <字段名>
LIMIT <限制行数>;
相关推荐
Always_away16 分钟前
数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记6
数据库·笔记·sql·学习
oioihoii41 分钟前
C++23文本编码革新:迈向更现代的字符处理
java·数据库·c++23
九鼎科技-Leo43 分钟前
写windows服务日志-.net4.5.2-定时修改数据库中某些参数
数据库·windows·.net
小可爱的大笨蛋1 小时前
Spring AI Alibaba - MCP连接 MySQL
人工智能·mysql·spring·mcp
柳如烟@1 小时前
Hadoop伪分布式模式搭建全攻略:从环境配置到实战测试
大数据·hadoop·分布式·mysql
hkfkn1 小时前
Sql刷题日志(day6)
数据库·sql
游王子1 小时前
Milvus(9):字符串字段、数字字段
数据库·milvus
猫咪-95271 小时前
Mysql之存储过程(下)
数据库
小白教程2 小时前
解读和分析mysql性能数据时,如何确定性能瓶颈的具体位置?
数据库·mysql·mysql教程·mysql优化教程
LaughingZhu2 小时前
PH热榜 | 2025-04-26
前端·数据库·人工智能·mysql·开源