备注:该博客内容根据技术教学视频整理与总结而成,原视频来自于尚硅谷MySQL教程。
一、基础查询 select from
语法: SELECT 要查询的东西【FROM 表名】;
特点: ①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数
要点:
- 去重 select distinct 字段名 from 表名;
- 运算符”+“做加法运算
select 数值+数值:直接运算
select 字符+数值:先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值:结果都为null (★)
二、条件查询 where
语法: select 要查询的字段|表达式|常量值|函数 from 表 where 条件 ;
条件分类: 条件表达式、逻辑表达式、模糊查询
- 条件表达式:示例:salary>10000
条件运算符:> < >= <= = !=(不等于) <>(不等于) - 逻辑表达式:示例:salary>10000 && salary<20000
逻辑运算符:and(&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true - 模糊查询:like 特点:一般和通配符搭配使用
between and 特点: a.使用between and 可以提高语句的简洁度
b.包含临界值
c.两个临界值不要调换顺序
in 含义:判断某字段的值是否属于in列表中的某一项
特点:a.使用in提高语句简洁度
b.in列表的值类型必须一致或兼容
c.不支持通配符的使用
is null|is not null 注意:=或<>不能用于判断null值
is null或is not null可以判断null值
通配符:% 任意多个字符,包含0个字符
_ 任意单个字符
三、排序查询 order by
语法: select 查询列表 from 表 where 筛选条件 order by 排序列表 【asc|desc】
特点: 1、asc :升序,如果不写默认升序 desc:降序
2、排序列表 支持 单个字段、多个字段、函数、表达式、别名
3、order by的位置一般放在查询语句的最后(除limit语句之外)
四、分组查询 group by、having
语法: select 查询的字段,分组函数 from 表 group by 分组的字段
特点: 1、可以按单个字段分组;可以按多个字段分组,字段之间用逗号隔开;
2、可以支持排序;having后可以支持别名
3、和分组函数一同查询的字段最好是分组后的字段
4、分组筛选
| 针对的表 | 位置 | 关键字 | |
|---|---|---|---|
| 分组前筛选: | 原始表 | group by的前面 | where |
| 分组后筛选: | 分组后的结果集 | group by的后面 | have |
五、连接查询 join
笛卡尔乘积:如果连接条件省略或无效则会出现,即表1 有m行,表2 有n行,结果=m*n行
解决办法:添加上连接条件
- SQL92语法:
分类:内连接(等值连接、非等值连接、自连接),也支持一部分外连接(用于Oracle、SQL server,但MySQL不支持
语法:select 查询列表
from 表 别名1,表 别名2
where 等值的连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
特点:① 等值连接的结果 = 多个表的交集
② n表连接,至少需要n-1个连接条件
③ 多个表不分主次,没有顺序要求
④一般为表起别名,提高阅读性和性能 - SQL99语法:通过join关键字实现连接
分类:内连接(等值连接、非等值连接、自连接)、外连接(左外、右外)、交叉连接
语法:select 字段,...
from 表1
【inner|left outer|right outer|cross】join 表2 on 连接条件
【inner|left outer|right outer|cross】join 表3 on 连接条件
【where 筛选条件】
【group by 分组字段】
【having 分组后的筛选条件】
【order by 排序的字段或表达式】
特点:①表的顺序可以调换
②n表连接至少需要n-1个连接条件内连接的结果=多表的交集
③内连接的结果=多表的交集
④外连接查询的结果=主表中所有的行,如果从表和它匹配的将显示匹配行,如果从表没有匹配的则显示null
⑤left join 左边的就是主表,right join 右边的就是主表,full join 两边都是主表
⑥外连接一般用于查询除了交集部分的剩余的不匹配的行
⑦交叉连接类似于笛卡尔乘积 - 自连接典型案例:查询员工名和直接上级的名称
SQL99写法:SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m ON e.`manager_id`=m.`employee_id`;
SQL92写法: SELECT e.last_name,m.last_name
FROM employees e,employees m
WHERE e.`manager_id`=m.`employee_id`; - 以下图示来自于尚硅谷MySQL教程课件,红色部分为连接查询后的结果:


六、子查询
含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询。在外面的查询语句,称为主查询或外查询
特点:1、子查询都放在小括号内
2、子查询可以放在from、select、where、having、exists后面,但一般放在条件的右侧
3、子查询优先于主查询执行,主查询使用了子查询的执行结果
4、子查询根据查询结果的行数不同分为以下两类:
① 单行子查询:结果集只有一行,一般搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:a、子查询的结果为一组值b、子查询的结果为空
② 多行子查询:结果集有多行,一般搭配多行操作符使用:any、all、in、not in
IN 可用 =ANY替代; NOT IN 可用<>ALL替代
| 操作符 | 含义 |
| IN/NOT IN | 等于/不等于列表中的任意一个 |
| ANY|SOME | 和子查询返回的某一个值比较,大于最小值,小于最大值即可 |
| ALL | 和子查询返回的所有值比较,大于最大值,小于最小值即可 |
七、分页查询 limit
语法: select 字段|表达式,...
from 表
【where 条件】
【group by 分组字段】
【having 条件】
【order by 排序的字段】
limit 【offset 起始的条目索引,】size 条目数;
特点:1.起始条目索引从0开始
2.limit子句放在查询语句的最后
3.公式:select * from 表 limit (page-1)*sizePerPage,sizePerPage,其中:每页显示条目数sizePerPage,要显示的页数 page
公式来源:首先假设条件为每页显示10条数据,那么可得下表规律:
| 页数 | 起始条目索引 |
|---|---|
| 1 | 0 |
| 2 | 10 |
| 3 | 20 |
总结规律可得:10 = ( 2 - 1 ) × 10
20 = ( 3 - 1 ) × 10
offset =(page-1)*sizePerPage
八、联合查询 union
语法:select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】
.....
select 字段|常量|表达式|函数 【from 表】 【where 条件】;
特点:1、多条查询语句的查询的列数必须是一致的
2、多条查询语句的查询的列的类型几乎相同
3、union代表去重,union all代表不去重
九、查询总结
| 查询优先级 | |
|---|---|
| select 查询列表 | ⑦ |
| from 表1 别名 | ① |
| 连接类型 join 表2 | ② |
| on 连接条件 | ③ |
| where 筛选 | ④ |
| group by 分组列表 | ⑤ |
| having 筛选 | ⑥ |
| order by排序列表 | ⑧ |
| limit 起始条目索引,条目数; | ⑨ |
本文详细讲解了MySQL的基础查询、条件查询、排序与分组、连接查询、子查询、分页、联合查询等技巧,包括去重、运算符、逻辑表达式、模糊查询、连接类型及条件筛选等,并介绍了如何使用limit进行分页和union进行数据整合。
3364

被折叠的 条评论
为什么被折叠?



