MySQL的基础操作

SELECT

商品种类,

AVG(金额) AS 总金额

FROM

订单表

GROUP BY

商品种类

HAVING

总金额 > 2000

ORDER BY

总金额 DESC;

针对以上查询结果还可以通过"LIMIT m,n"子句限制输出的条数,m代表偏移量,n代表输出的条数。例如针对以上结果跳过前2条输出后续的3条数据,SQL如下:

SELECT

商品种类,

AVG(金额) AS 总金额

FROM

订单表

GROUP BY

商品种类

HAVING

总金额 > 2000

ORDER BY

总金额 DESC

LIMIT 2,3;

LIMIT 语句后面也可以只跟一个数字,代表查询开始多少行数据,例如:

SELECT

商品种类,

AVG(金额) AS 总金额

FROM

订单表

GROUP BY

商品种类

HAVING

总金额 > 2000

ORDER BY

总金额 DESC

LIMIT 2;

CASE WHEN多分支语句

CASE

WHEN 条件1 THEN 结果1

WHEN 条件2 THEN 结果2

WHEN 条件3 THEN 结果3

ELSE 结果4

END AS 别名

SELECT

订单号,日期,客户名称,商品种类,金额,

CASE

WHEN 金额 <= 500 THEN '小订单'

WHEN 金额 <= 1500 THEN '中订单'

ELSE '大订单'

END AS '订单类型'

FROM 订单表;

MySQL中编写SQL语句是有一定顺序的,书写顺序如下:

SELECT 列名

FROM 表名

WHERE 条件

GROUP BY 分组

HAVING 过滤条件

ORDER BY 排序列(ASC|DESC)

LIMIT 起始行,查询行数

而真正的SQL底层执行顺序如下:

a.FROM:指定数据来源表

b.WHERE:对查询数据第一次过滤

c.GROUP BY: 分组

d.HAVING: 对分组后的数据第二次过滤

e.SELECT: 查询各个字段的值

f.ORDER BY: 排序

g.LIMIT: 限定查询结果

JOIN关联:

在MySQL中JOIN分为INNER JOIN 、LEFT JOIN 、RIGHT JOIN 、FULL OUT JOIN

INNER JOIN:

INNER JOIN 也叫内连接,可以简写为JOIN,MySQL中可以通过JOIN 取两张表的交集,使用JOIN的时候需要通过ON指定两张表的关联字段,一般是两张表中数据相同的字段。JOIN使用方式如下:

sql 复制代码
SELECT tbl1.col1,tbl1.col2....,tbl2.col1,tbl2.col2....
FROM tbl1 
JOIN tbl2 ON tbl1.id = tbl2.id

注意:在一条SQL中可以编写多个JOIN关联更多的表,但每个JOIN一定要指定对应的ON关联字段,否则会出现笛卡尔积,即:tbl1表中的每条数据都会与tbl2中的每条数据进行关联,会导致大量的数据结果

sql 复制代码
# 关联 用户表 和 分数表,获取用户的年龄和分数信息
SELECT
	用户表.编号,
	用户表.姓名,
	用户表.年龄,
	分数表.编号,
	分数表.姓名,
	分数表.分数 
FROM 用户表
INNER JOIN 分数表 ON 用户表.编号 =分数表.编号;

LEFT JOIN:

LEFT JOIN 是左连接,两张表通过LEFT JOIN 进行关联时,LEFT JOIN 左侧表中数据都会被查询出来,如果在右侧表没有查询到关联的数据会自动使用NULL值填补。LEFT JOIN SQL用法如下:

sql 复制代码
SELECT
	用户表.编号,
	用户表.姓名,
	用户表.年龄,
	分数表.编号,
	分数表.姓名,
	分数表.分数 
FROM 用户表
LEFT JOIN 分数表 ON 用户表.编号 =分数表.编号;

RIGHT JOIN:

RIGHT JOIN 是右关联,同理,两张表通过RIGHT JOIN 进行关联时,RIGHT JOIN 右侧表中数据都会被查询出来,如果在左侧表没有查询到关联的数据会自动使用NULL值填补。RIGHT JOIN SQL用法如下:

sql 复制代码
SELECT
	用户表.编号,
	用户表.姓名,
	用户表.年龄,
	分数表.编号,
	分数表.姓名,
	分数表.分数 
FROM 用户表
RIGHT JOIN 分数表 ON 用户表.编号 =分数表.编号;

UNION关联:

sql 复制代码
SELECT
	用户表.编号,
	用户表.姓名,
	用户表.年龄,
	分数表.编号,
	分数表.姓名,
	分数表.分数 
FROM 用户表
LEFT JOIN 分数表 ON 用户表.编号 = 分数表.编号
UNION 
SELECT
	用户表.编号,
	用户表.姓名,
	用户表.年龄,
	分数表.编号,
	分数表.姓名,
	分数表.分数 
FROM 用户表
RIGHT JOIN 分数表 ON 用户表.编号 = 分数表.编号;

UNION关联:

sql 复制代码
SELECT
	用户表.编号,
	用户表.姓名,
	用户表.年龄,
	分数表.编号,
	分数表.姓名,
	分数表.分数 
FROM 用户表
LEFT JOIN 分数表 ON 用户表.编号 = 分数表.编号
UNION ALL
SELECT
	用户表.编号,
	用户表.姓名,
	用户表.年龄,
	分数表.编号,
	分数表.姓名,
	分数表.分数 
FROM 用户表
RIGHT JOIN 分数表 ON 用户表.编号 = 分数表.编号;

窗口函数

sql 复制代码
<窗口操作函数>  OVER (PARTITION BY <分组的列> ORDER BY <排序的列> ) AS 别名
sql 复制代码
SELECT DISTINCT
	公司,部门,
	SUM(费用) OVER ( PARTITION BY 公司 ) AS 公司总支出,
	MAX(费用) OVER ( PARTITION BY 部门 ) AS 部门最大支出,
	MIN(费用) OVER ( PARTITION BY 部门 ) AS 部门最小支出 
FROM
	企业支出费用表;
相关推荐
Code季风1 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul
Boilermaker19921 小时前
【Java EE】SpringIoC
前端·数据库·spring
霸王龙的小胳膊2 小时前
泛微虚拟视图-数据虚拟化集成
数据库
灵犀学长2 小时前
解锁Spring Boot多项目共享Redis:优雅Key命名结构指南
数据库·redis
轩情吖2 小时前
Qt的信号与槽(二)
数据库·c++·qt·信号·connect·信号槽·
ZeroNews内网穿透2 小时前
服装零售企业跨区域运营难题破解方案
java·大数据·运维·服务器·数据库·tcp/ip·零售
可观测性用观测云2 小时前
达梦数据库监控观测最佳实践
数据库
时序数据说2 小时前
IoTDB:专为物联网场景设计的高性能时序数据库
大数据·数据库·物联网·开源·时序数据库·iotdb
码农小站4 小时前
ClickHouse 时间范围查询:精准筛选「本月数据」
数据库
paopaokaka_luck4 小时前
基于SpringBoot+Vue的非遗文化传承管理系统(websocket即时通讯、协同过滤算法、支付宝沙盒支付、可分享链接、功能量非常大)
java·数据库·vue.js·spring boot·后端·spring·小程序