一·基础查询
语法
SELECT * | {[DISTINCT] column | expression [alias],...}
FROM table;
select
查询列表 from
表名;
注意:
SELECT
:标识选择哪些列FROM
:标识从哪个表中选择
特点
- 查询列表可以是:表中的字段、常量值、表达式、函数。
- 查询的结果是一个虚拟的表格。
二·条件查询
语法
SELECT * | {[DISTINCT] column | expression [alias],...}
FROM table
[WHERE condition(s)];
select
查询列表(3)
from
表名 (1)
where
筛选条件 (2);
注:此处的(1),(2),(3)为执行顺序
筛选条件分类:
- 按条件表达式筛选
- 简单条件运算符:
>
、<
、=
、!=
(<>
)、>=
、<=
- 简单条件运算符:
- 按逻辑表达式筛选
- 逻辑运算符:
&&
(and)、||
(or)、!
(not)&&
(and):两个条件都为true,结果为true,反之为false||
(or):只要有一个条件为true,结果为true,反之为false!
(not):如果连接的条件本身为false,结果为true,反之为false
- 逻辑运算符:
- 模糊查询
like
、between and
、in
、is null
like
- 特点:一般和通配符搭配使用。
- 通配符:
%
任意多个字符,包含0个字符_
任意单个字符
- 通配符:
- 特点:一般和通配符搭配使用。
between and
- 使用
between and
可以提高语句的简洁度 - 包含临界值
- 两个临界值不要调换顺序
- 使用
in
判断某个字段的值是否属于in
列表中的某一项- 使用
in
提高语句简洁度 in
列表的值类型必须一致或兼容
- 使用
is null
=
或者<>
不能用于判断null值is null
或is not null
可以判断null值
三·排序查询
语法
select 查询列表 (3)
from 表名 (1)
[where 筛选条件] (2)
order by 排序列表 [asc | desc] (4)
特点:
asc
代表的是升序,desc
代表的是降序,如果不写,默认是升序。order by
子句中可以支持单个字段、多个字段、表达式、函数、别名。order by
子句一般是放在查询语句的最后面,limit
子句除外。
四·常见函数
概念
- 将一组逻辑语句封装在方法提中,对外暴露方法名。类似于python中的方法。
- 好处:
- 隐藏了实现细节
- 提高代码的重用性
- 调用:
select
函数名(实参列表)[ from 表名];
特点:
- 叫什么(函数名称)
- 干什么(函数功能)
分类:
- 单行函数
- 如:
concat
、ifnull
、length
- 包含:字符函数、数学函数、日期函数、其他函数、流程控制函数-
if
函数、流程控制函数-case
结构
- 如:
- 分组函数
- 功能:做统计使用又称统计函数(聚合函数、组函数)。
五·分组函数
概念
- 功能:用作统计使用,又称为聚合函数或统计函数或组函数。
分类:
sum
求和avg
平均值max
最大值min
最小值count
计算个数
特点:
sum
、avg
一般用于处理数值型,max
、min
、count
可以处理任何类型- 以上分组函数都忽略null值
- 可以和
distinct
搭配实现去重的运算 - 一般使用
count(*)
做统计函数 - 和分组函数一同查询的字段要求是
group by
后的字段
六·分组查询
概念
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
特点:
- 分组查询中的筛选条件分为两类
- 数据源:原始表
- 位置:
group by
子句的前面 - 关键字:
where
- 分组后筛选
- 数据源:分组后的结果集
- 位置:
group by
子句的后面 - 关键字:
having
- 分组函数做条件肯定是放在
having
子句中 group by
子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数(用的较少)- 也可以添加排序(排序放在整个分组查询的最后)
七·链接查询
概念
- 又称多表查询,当查询的字段来自多个表时,就会用到连接查询。
分类:
- 按年代分类:
- SQL92标准:仅仅支持内连接
- SQL99标准(推荐):支持内连接+外连接(左外、右外)+交叉连接
- 按功能分类:
- 内连接:
- 等值连接
- 非等值连接
- 自连接
- 外连接:
- 左外连接
- 右外连接
- 全外连接
- 交叉连接
- 内连接:
八·子查询
1、概念
- 含义:出现在其他语句中的
select
语句,称为子查询或内查询;外部的查询语句,称为主查询或外查询。
分类:
-
按子查询出现的位置:
select
后面- 仅仅支持标量子查询
where
或having
后面- 标量子查询 (单行)
- 列子查询 (多行)
- 行子查询
exists
后面(相关子查询)- 表子查询
-
按结果集的行列数不同:
- 标量子查询(结果集只有一行一列)
- 列子查询(结果集只有一列多行)
- 行子查询(结果集有一行多列)
- 表子查询(结果集一般为多行多列)
九·分页查询
概念
- 应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求。
语法:
select 查询列表 (7)
from 表名 (1)
[
join type join 表2 (2)
on 连接条件。(3)
where 筛选条件 (4)
group by 分组字段 (5)
having 分组后的筛选 (6)
order by 排序的字段 (8)
]
limit [offset] ,size; (9)
- 其中:
offset
要显示条目的起始索引(起始索引从0开始)size
要显示的条目个数
十·union联合查询
概念
union
联合(合并):将多条查询语句的结果合并成一个结果。
语法:
查询语句1
union
查询语句2
union
...
应用场景:
- 要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时。
特点:
- 要求多条查询语句的查询列数是一致的。
- 要求多条查询语句的查询的每一列的类型和顺序最好一致。
union
关键字默认去重,如果使用union all
可以包含重复项。
各位学完知识点后,可以去百度搜索力扣[https://leetcode.cn/search/?q=sql]进行MySQL的强化训练,也可以找私信森森要对应知识点的例题和练习,我会不定期的去更新相关知识点,觉得有用的给个关注叭