JavaWeb开发学习笔记--MySQL
MySQL-DQL
基本语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件列表
order by
排序字段列表
limit
分页参数
基本查询
关键字:SELECT
- 查询多个字段:select 字段1,字段2,字段3 from 表名;
- 查询所有字段(通配符):select * from 表名;
- 设置别名:select 字段1 [as 别名1],字段2 [as 别名2] from 表名;
其中as关键字可去掉,注意别名中如果有特殊符号或者空格,需要用引号引起来
- 去除重复记录:select distinct 字段列表 from 表名;
条件查询
select 字段列表 from 表名 where 条件列表;
比较运算符 | 功能 |
---|---|
> | 大于等于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<>或!= | 不等于 |
between...and... | 在某个范围之内(含最小、最大值) |
in(...) | 在in之后的列表中的值,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
in null | 是null |
逻辑运算符 | 功能 |
---|---|
and或&& | 并且(多个条件同时成立) |
or 或 || | 或者(多个条件任意一个成立) |
not 或 | | 非,不是 |
分组查询
聚合函数
将一列数据作为一个整体,进行纵向计算
select 聚合函数(字段列表) from 表名;
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
注意:null值不参与所有聚合函数运算,
统计数据可以使用:count(*) count(字段) count (常量),推荐使用count(*)
select 字段列表 from 表名 [where 条件] group by 分组族字段名 [having 分组后过滤条件];
select gender,count(*) from tb_emp group by gender;
where与having的区别
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤,
- 判断条件不同:where不能对聚合函数进行判断,having可以。
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
执行顺序:where>聚合函数>having
排序查询
select 字段列表 from 表名 [where 条件列表][group by 分组字段]order by 字段1 排序方式1,字段2 排序方式2...
ASC:升序 (默认值)
DESC:降序
-- 根据入职时间对员工进行升序排序-asc
select * from tb_emp order by ertrydate asc;-- 根据入职时间对员工进行降序排序-desc
select * from tb_emp order by ertrydate desc;-- 根据入职时间对员工进行升序排序,入职时间相同,再按照更新时间进行降序排序
select * from tb_emp order by ertrydate , update_time desc;
分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;
-- 从起始索引0开始查询员工数据,每页展示5条记录
select * from tb_emp limit 0,5;-- 查询第1页员工数据,每页展示5条记录
select * from tb_emp limit 0,5;-- 查询第2页员工数据,每页展示5条记录
select * from tb_emp limit 5,5;-- 查询第3页员工数据,每页展示5条记录
select * from tb_emp limit 10,5;
起始索引的计算公式:(页码-1) * 每页展示记录数
注意:分页查询是数据库的方言,不同数据库有不同表现,MySQL是LIMIT;
如果查询的是第一页的数据,起始索引可以省略,直接简写为limit 10;