基础查询
#格式 select 字段 from 表名;
#例:
select id,`name`,age,dept from person;
条件查询
#格式 select 字段 from 表名 where条件;
#例:
select id,`name`,age,dept from person where age>20;
模糊查询
#格式 select 字段 from 表名 where 查询字段 like '%/_';
#例:
#模糊查询小开头的人名
select id,`name`,age,dept from person where `name` like '小%';
#模糊查询七结尾的人名
select id,`name`,age,dept from person where `name` like '%七';
#模糊查询包含七的人名
select id,`name`,age,dept from person where `name` like '%七%';
#模糊查询第二个字为七的人名,一个_表示一个字
select id,`name`,age,dept from person where `name` like '_七';
select id,`name`,age,dept from person where `name` like '_七_';
分页查询
#格式 select 字段 from 表名 limit 起始索引,个数;
#起始索引:分页查询第n页 每页展示m条数据 (n-1)*m
#例:
select id,`name`,age,dept from person limit 0,8;
select id,`name`,age,dept from person limit 8,8;
排序
排序(order by)默认为升序(asc升序,desc降序)
#格式 select 字段 from 表名 order by asc/desc;
#例:
select id,`name`,age,dept from person order by age;
select id,`name`,age,dept from person order by age desc;
聚合函数
除了count其他的只能计算数字
#count() 查询有多少条数据 ()中可以写0/*意思一样也可以加where条件
select COUNT(0) from person;
#sum() 总数
select sum(age) from person;
#avg() 平均数 可以通过cast(avg(age)as decimal(10,0))将小数变成整数
select avg(age) from person;
select CAST(avg(age) as decimal(10,0)) from person;
#max() 最大值
select max(age) from person;
#min() 最小值
select min(age) from person;
分组查询
#格式 select 字段 from 表名 group by 分组字段;
#例:select id,`name`,age,dept from person group by dept;
#查不出来可以使用以下代码后在试试
show variables like '%sql_mode%'
set global sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
set session sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
#在5.5mysql版本前只可以用以下方式查询 select后面只可以跟分组字段与聚合函数
select dept,count(0) from person group by dept;
having条件查询
where是分组前,having是分组后的条件
#格式 select 字段 from 表名 group by 分组字段 having条件;
select dept,count(0) from person GROUP BY dept having avg(age)>20;
select dept,count(0) from person where age>8 group by dept;
子查询
通过一个查询语句的结果来查询
#格式 select 字段 from 表名 where 与通过查询的结果相关的字段 in(select查询语句);
#例:
select id,`name`,age,dept from person where dept in(select id from dept where name='财务部');
内连接
#显式内连接 inner可以省略
#格式:select 字段 from 表1 inner join 表2 on 表1字段=表2字段;
#例:
select p.id,p.`name`,p.age,d.`name` '部门' from person p inner join dept d on p.dept=d.id;
#隐式内连接(通过where连接)
#格式:select 字段 from 表1,表2 where 表1字段=表2字段;
select p.id,p.`name`,p.age,d.`name` from person p,dept d where p.dept=d.id;
外连接
#左外连接(left outer join)左外是以左边的表为主表,查询的结果只关注左表,不在乎右边
#格式:select 字段 from 表1 left outer join 表2 on 表1字段=表2字段;
select p.id,p.`name`,p.age,d.`name` from person p left outer join dept d on p.dept=d.id;
#右外连接(right outer join)右外与左外一致一样的,查询结果只关注右表不在乎左表
#格式:select 字段 from 表1 right outer join 表2 on 表1字段=表2字段;
select p.id,p.`name`,p.age,d.`name` from person p right outer join dept d on p.dept=d.id;