1.更新语句
Update tableName set columnName = ColumnName+x [ and columnName1 = number];
如果是并列的筛选条件,使用and关键字
修改表中 username 为 wangwu 且年龄为23的人张薪资2000;
update tb1 set salary = salary+2000
where username = 'wangwu' and age = 23;
2.查询语句
select * (columnName,columnName)from tableName,tableName
where 筛选条件:【
- 在多个范围内指定
- or 或者A条件或者B条件,满足一个即可
- and A条件和B条件必须同时满足
- between and 区间范围】
group by 分组 (根据列,把每一种情况分组出来)
having 分组筛选(一般情况下该语句与聚合函数连用)
order by 排序(根据字段排序 asc正序(默认) desc倒序)
limit 分页 MySQL分页
查询tb1表中薪资大于4000的
select *
from tb1
where salary>4000;
查询tb1表中薪资大于4000小于10000的
select *
from tb1
where salary between 4000 and 10000;
查询名字是lisi的薪水
select salary
from tb1
where username = 'lisi';
注意:
- 在group by中,如果要对针对某一个字段进行分组,该字段必须要出现在查询列select中,尤其是要与having连用时。
- 如果在使用聚合函数的时候 select Username,Avg(salary) from tableName 这种情况会使用在分组时子查询的方式来解决
2.1聚合函数
函数最终会返回一个结果的函数。Max() 最大值, Min() 最小值 ,Avg() 平均值 ,Sum() 求和 ,Count() 计数
查询最大工资
select max(salary)
from tb1;
group by 后面如果跟数字 1,2 ,代表分别指的是第一列和第二列,以次类推
查询各个部门人数总数大于1 个人
select *
from tb1
group by 5
having count(*)>1;
2.2别名
字段均可以有别名,表也可以
使用as关键字来决定别名 (as 关键字也可以省略)
查询tb1表中的员工的 月薪
select username,salary*12 as '月薪'
from tb1;
什么时候使用别名?
- 使用多表查询中,两表中有相同的字段名称,可以用来区分表中的字段
- 表中具有相同字段,为表取别名,区分表
- 查询业务中需要的条件在表中不存在,为新查询到的字段命名
//根据部门进行分组
select * from tb1 group by depart;
//根据部门分组 且中年龄大于30的
select * from tb1 where age<30 group by depart;
查询tb1 表中信息,并按薪资高低(正序)进行输出
select *
from tb1
order by salary asc;
查询tb1 表中信息,并按薪资高低(倒序)进行输出
select *
from tb1
order by salary desc;
2.3limit
用于强制select语句但会指定的记录数
接受一个或两个参数,但其参数必须是一个整数常量
检索记录行3-6
select *
from tb1
limit 3,6;
检索从一个偏移量到记录集的结束所有的记录行,可指定第二个参数为-1
select *
from tb1
limit 3,-1;
如果只给定一个参数,他表示返回最大的记录行数
检索前五行
【换句话说,limit n 等价于limit 0,n】
select *
from tb1
limit 5;
3.多表查询(重点)
概念:查询多张数据表,from表和表之间用“,”间隔
分类:
- 内连接:inner join(可省略)
笛卡尔积:相当于是两个集合的全交叉记录- 外连接:left join (左连接),right join(右连接)
- 等值连接:带有等值条件筛选的
- 全连接:union 和 unionall
3.1 内连接
inner join 关键字可以忽略
3.2 外连接
left join :左连接
select * from a left join b on a.id=b.id;
以左(a)表为主表,右(b)表作为副表
如果a表记录数多于b表,以a表作为主要显示的表
若a表有,而b表没有,则b表记录数用null补充
若a表没有,而b表有,则不进行显示
right join:右连接
select * from a right join b on a.id=b.id;
以右(b)表为主表,左(a)表作为副表
如果b表记录数多于a表,以b表作为主要显示的表
若b表有,而a表没有,则a表记录数用null补充
若b表没有,而a表有,则不进行显示
3.3 等值连接
带有等值条件的筛选
等效于
3.4 全连接
full join 关键字是Oracle中的,MySQL中的全连接功能是有union 和unionall 实现的
注意:
- 通过union连接的SQL他们分别单独取出的列数必须相同
- 不要求合并的表列名称完全相同时,以第一个SQL表列名为准
- 使用union时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用union进行合并,而是使用union all进行合并
- 被union连接的SQL子句,单个句子中不用写order by ,因为不会有排序效果
4.子查询
概念:就是指在一个完整的查询语句中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的编写方式。
where 子查询: select * from tableName where username=(select)
in 子查询 :select * from tableName in (select)
from 子查询:select * from (select * from tableName) as a;
子查询中顺序:
- from
- where
- group by
- having
- select
- order by