MySQL:更新语句,查询语句,多表查询,子查询

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 筛选条件:【

  1. 在多个范围内指定
  2. or 或者A条件或者B条件,满足一个即可
  3. and A条件和B条件必须同时满足
  4. 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';

注意:

  1. 在group by中,如果要对针对某一个字段进行分组,该字段必须要出现在查询列select中,尤其是要与having连用时。
  2. 如果在使用聚合函数的时候 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;
什么时候使用别名?
  1. 使用多表查询中,两表中有相同的字段名称,可以用来区分表中的字段
  2. 表中具有相同字段,为表取别名,区分表
  3. 查询业务中需要的条件在表中不存在,为新查询到的字段命名
//根据部门进行分组
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表和表之间用“,”间隔
分类:

  1. 内连接:inner join(可省略)
    笛卡尔积:相当于是两个集合的全交叉记录
  2. 外连接:left join (左连接),right join(右连接)
  3. 等值连接:带有等值条件筛选的
  4. 全连接: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 实现的
在这里插入图片描述

注意:

  1. 通过union连接的SQL他们分别单独取出的列数必须相同
  2. 不要求合并的表列名称完全相同时,以第一个SQL表列名为准
  3. 使用union时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用union进行合并,而是使用union all进行合并
  4. 被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;

子查询中顺序:

  1. from
  2. where
  3. group by
  4. having
  5. select
  6. order by
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值