查询语句–单表查询核心语句
1 | 语法: select [选项] 列名 from 表名 [where 条件][ group by 分组] [order by 排序] [having 条件] [limit 限制] |
单表查询本节内容:
字段表达式
from子句
dual伪表
where 子句 (条件)
in | not in
between…and | not between…and
Is null | is not null
聚合函数
通配符
模糊查询( like )
group by(分组查询)
having 条件
order by 排序
limit
查询语句中的“选项”
1、字段表达式
- as 可以作列名
- as 可以省略
2、from子句
- from后面跟的是数据源(表)
- 数据源可以有多个,返回笛卡尔积。——排列组合。 笛卡尔:我思故我在!
3、dual伪表
- dual表是一个伪表。在有些特定情况下,没有具体的表参与,但是为了保证select语句的完整又必须要一个表名,使用dual。
1 | select 10*10 as result from dual ; |
4、where子句 (条件)
where后面跟的是条件,在数据源中进行筛选。条件为真,返回条件为真的记录。
- ** and 与**
- ** or 或**
- ** not 非**
1 | select * from stu where stuSex='男'; |
1 | select * from stu where 1; # 返回为真的所有数据 |
5、in | not in
- 对where查询条件的简写
1 | select * from stu where stuAddress='上海' or stuAddress='北京' or stuAddress='山东'; # 原始SQL语句 |
1 | select * from stu where stuAddress in ('上海','北京','山东'); # in简化写法 |
6、between…and | not between…and
- 查找某个范围的记录
1 | select * from stu where stuAge>=18 and stuAge<=20; #原始SQL语句 |
1 | select * from stu where stuAge between 18 and 20; #使用between…and |
1 | select * from stu where stuAge<18 or stuAge>20; |
1 | select * from stu where stuAge not between 18 and 20; |
7、is null | is not null
- 判断是否为null,不能用等于。
- “=null” ❌
- Is null
1 | select * from stu where ch is null or match is null; # 查找判断null,使用 is null。 |
1 | select * from stu where ch is not null or match is not null; # 不能为空。 |
8、聚合函数
- sum() 求和
- avg() 求平均值
- max() 求最大值
- min() 求最小值
- count() 求记录数
1 | select sum(ch)'语文最高分',avg(ch)'语文平均分',max(ch)'语文最高分',min(ch)'语文最低分',count(*)'总人数' from stu; |
9、通配符
- “_” 表示任意一个字符
- “%” 表示任意字符————0个字符也是任意字符
10、模糊查询( like )
- like配合通配符使用
1 | select * from stu where stuName like '张%'; |
1 | select * from stu where stuName like 'T_m'; |
1 | show variables like 'character_set_%'; |
11、order by 排序
- order by XXXX asc
- 升序【默认】 ——由小到大
- order by XXXX desc
- 降序。 ——由大到小
- 多列排序。 ———少用
1 | select * from stu order by ch desc; #语文成绩降序排列 |
1 | select * from stud order by math asc; #数学成绩升序排列 |
1 | select *,(ch+math) as '总分' from stu order by stuAge asc,(ch+match) desc; #多列排序 |
1 | select * from stu order by stuAge asc,ch desc;//# 年龄升序,语文降序 |
1 | select * from stu order by stuAge,ch desc; #升序可以省略,年龄升序,语文降序 |
1 | select * from stu order by stuAge,ch; #默认全部升序排序 |
12、group by 分组查询
- 将查询的结果分组,分组查询目的在于统计数据。 ——需要搭配聚合函数来使用!
- 分组查询,查询字段必须是聚合函数和分组字段。
- 通过group_contat()函数,将同一组的值连接起来显示。
- 分组以后,默认按照升序排列显示。
- 可以是desc实现分组后的降序显示。
- 多列分组
- *
1 | select avg(stuAge) as '年龄', stuSex from stu group by stuSex; #按性别分组,显示每组的平均年龄。 聚合函数+分组字段 |
1 | select avg(stuAge) as '年龄', stuAddress from stu group by stuAddress; #按地区分组,显示每组的平均年龄。 |
1 | select group_concat(stuName),stuSex from stu group by stuSex; #通过性别分组,利用聚合函数(group_contat)将同一组的值连接起来。 ----不用group_contat,普通字段的话,只会取到分组查询的第一个值 |
1 | select * from stu group by stuAge desc; #将分组后的结果数据进行降序排列。 |
1 | select stuAddress,stuSex,avg(stuAge) from stu group by stuAddress,stuSex;#多列分组,上海/北京的男生/女生 平均分 |
13、having 条件
- where条件和having条件的区别?
- where是对原始数据进行筛选。 —在数据库里筛选
- having是对记录集进行筛选。 ——对结果集进行筛选
1 | select * from stu where stuSex='男'; # 一条条查询,将stuSex='男'的实体组成一张表。 在数据库中查找。 |
1 | select * from stu having stuSex='男'; # 将表全部查询出来,然后筛选出条件为stuSex='男'的,筛检后的一张表。 在结果集中查找。 |
1 | select stuName from stu having stuSex='男'; # 无法查处内容,报错!!! |
1 | select stuSex,count(*) total from stu group by stuSex; |
1 | select stuSex,count(*) total from stu gruop by stuSex having total>=5; #total字段--数据库中没有,需要使用结果集中的total字段,使用having。 |
14、limit 限制
- limit 起始位置,显示长度
- 起始位置默认从索引[0]开始,可以省略。
- 分页查询中,经常使用
- limit 在 update和delete中也可以使用。
1 | select * from stu limit 0,20; # 从[0]数据开始,取出20条数据。 |
1 | select * from stu limit 20,20; # 从[20]数据开始,取出20条数据。 |
1 | select *,(ch+math) total from stu order by total desc limit 0,3; # 取出班级中的前三名 |
1 | update stu set stuAddress='上海' where ch is not null limit 0,3; # update 表名 set 字段 where 条件 [limit], delete from 表名 where 条件[limit] |
15、查询语句中的选项
- all:显示所有数据【默认】
- distinct : 去除结果集中重复的
1 | select [all] stuAddress from stu; # 默认为all 显示全部数据 |
1 | select distinct stuAddress from stu; # distinct 可以把结果集中相同的选项去掉 |
****
****
- 本文作者: 梁俊可
- 本文链接: http://ljk3d.com/2021/10/19/mySqlNote/05_MySQL_第四课_数据库查询01_单表查询/
- 版权声明: 梁俊可工作室