- 一般条件查询
-
Select * from user where table_user_id = ? Select*from user where table_user_id in(id1,id2) 关键字 in
-
注意:如果是varchar需要单引号
-
- Select* from table_user where name like (‘%王%’) 关键字like
该图是mybatis中参数是list 通过foreach写法
- 一般分组查询结合聚合函数的使用
- Select count(*),age from table_user group by age
按照年龄分组 统计每个年龄段的学生 关键字group by count
-
- Select Sum(count) user from table_subject group by user
根据不同学生统计所有科目成绩之和 关键字 sum
-
- Select max(count) user from table_subject group by user
获取不同学生最高科目的成绩 关键字 max()
- Having 使用
- Select * from table_subject having count >60
统计成绩大于60的所有科目及学生信息关键字 having最基本
-
- Select Sum(count) counts user from table_subject group by user
having counts > 300 关键字 group by having sum
按照学生统计所有科目总和大于300的(having结合聚合函数使用)
- 连接查询的使用 主要left join 和join 使用
-
Select * from table_student a Left join table_subject b on a.id = b.student_id Select * from table_student a join table_subject b on a.id = b.student_id
-
A和B中的例子left join 和join 的意思主要是a中的left join 指的是即使a和b不会关联到也会查询a表中所有数据而join则是只查询和a和b能关联的数据
第三个例子是工作中一个用了较多关键字的一个sql
Ifnull sum join left join between…and … where group by having order by
这个sql的意思是统计sys_user(用户表中)需要报工时的所有人,如果未填工时的也需要显示所有采用ifnull如果为空则工时数为0 还有就是附表采用的是left join 查询关联的t(虚拟表)即使虚拟表中不存在该用户也需要显示 因为查询的数据分别有用户 部门sum(t.workhours)所以分组
Group by s.login_name,s.user_name,d.dept_name
Havinvg #{weekday} > workingHours即(sum(t.workhours))
weekdays表示的是应该报的工时数 workingHours 指的是已报的工时数
所有此处的having表示的是未报全工时的用户信息
having作用过滤数据
left join (select …)这块指的是先去working_hours(工时表)根据查询条件获取数据然后命名为t虚拟临时表 然后再去关联