【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 <限制行数>;
相关推荐
wu85877345715 分钟前
向量数据库不是银弹:从枚举漏检到 ReACT 多轮召回的实践路径
前端·数据库·react.js
hsg771 小时前
简述:Jensen Huang‘s Footsteps网站全内容分析
前端·javascript·数据库
yuezhilangniao1 小时前
MySQL 8.0.32 二进制安装脚本 和初始化 操作系统版本rocky86
数据库·mysql·adb
Trouvaille ~1 小时前
【Redis篇】Redis 主从复制:数据同步的原理与实现
数据库·redis·缓存·中间件·高可用·主从复制·后端开发
hjhcos1 小时前
【PGSQL】无法修改表结构
sql
真实的菜1 小时前
Redis 从入门到精通(五):哨兵模式(Sentinel)—— 自动故障转移的完整原理与实战
数据库·redis·sentinel
唔662 小时前
(二)补充完整的数据库、中间件、MQTT、JAR后台和Web前端的部署脚本,全部一键自动化。
数据库·中间件·jar
六月雨滴2 小时前
Oracle 内存优化
数据库·oracle
学代码的真由酱2 小时前
MySQL数据库进阶-数据库设计实践-Java
数据库·mysql·数据库设计
遇事不決洛必達2 小时前
【数据库系列】本地映射云服务器Mysql的方法
服务器·数据库·mysql·定时任务