Navicat
时间
- create_time 创建时间
- update_time 更新时间
查询日期范围
select * from file where upload_time BETWEEN '2022-01-01' AND '2023-01-01'
// upload_time 的类型是 date
// java 中 upload_time 的类型可以是String
默认值
logic_delete 逻辑删除
- 1(true)逻辑删除
- 0(false)未删除
MySQL
13种联合查询图
1、inner join(内连接):只返回两个表中都有匹配值的记录。
2、left join(左连接):返回所有来自左表(left table)的记录,以及右表(right table)匹配的记录。即使右表中没有匹配的记录,左表中的所有记录也会都返回。
3、right join(右连接):返回所有来自右表的记录,以及左表匹配的记录。即使左表中没有匹配的记录,右表中的所有记录也会都返回。
4、full join(全连接):返回来自左表和右表的所有记录,即使左表和右表中没有相互匹配的记录。
having
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
where 和having之后都是筛选条件,但是有区别的:
1.where在group by前, having在group by 之后
2.聚合函数(avg、sum、max、min、count),不能作为条件放在where之后,但可以放在having之后
三表联查
user
role
user_role 两张表之间的连接表
查出用户为学生的所有信息
技巧:from处写两张表之间的连接表,便于与两表操作
SELECT u.*
FROM user_role ur
LEFT JOIN role r ON r.id = ur.role_id
LEFT JOIN user u ON u.id = ur.user_id
WHERE ur.role_id = 4
拆分
- 1.先连接 role 和 user_role
SELECT *
FROM user_role ur
LEFT JOIN role r ON r.id = ur.role_id
下表数据全部存入 user_role(可以把它看作为中间表)
- 2.再连接 user_role 和 user
SELECT *
FROM user_role ur
LEFT JOIN role r ON r.id = ur.role_id
LEFT JOIN user u ON u.id = ur.user_id
下表数据全部存入 user_role(可以把它看作为中间表)
- 3.最后加上where条件
SELECT *
FROM user_role ur
LEFT JOIN role r ON r.id = ur.role_id
LEFT JOIN user u ON u.id = ur.user_id
WHERE ur.role_id = 4
下表数据全部存入 user_role(可以把它看作为中间表)
- 4.取出user表字段 SELECT u*