【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 <限制行数>;
相关推荐
笃行35011 小时前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行35011 小时前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行35012 小时前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库
元Y亨H12 小时前
技术笔记:MySQL 字符集排序规则与大小写敏感性问题解决方案
mysql
SelectDB1 天前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶1 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵2 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils2 天前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
SamDeepThinking2 天前
一条UPDATE语句在MySQL 8.0中到底加了几把锁?
后端·mysql·程序员