MySQL之联表查询、常用函数、聚合函数

mysql之联表查询、常用函数、聚合函数

1.连表查询

注意事项:
1.联表查询是因为需要得到的数据在两个表中,一个表无法满足我们的需求

例:一个员工表,里面有员工姓名和员工id两个字段,另一张表是工资表里面有员工id和与员工工资现在我的要求是得到改公司每个员工的姓名和对应的工资,这时候我们就需要用到联表查询–>

2.联表查询就是将两个表通过一定的关系连接起来,如果没有有效的连接,将会发生–>

笛卡尔乘积现象–>

表a 有m行数据,表b 有n行–>

select * from a , b where 1=1–>

1=1就是没有效果的连接因为1是恒等于1的所有这就是无效连接–>

缺点:(没有优点)–>

1.可能造成卡顿,–>

如果表a有10000条数据,表b也有10000条数据那么这时候我们又定义了无效连接条件的话将会查询显示1千万条数据–>

2.需求数据查找麻烦–>

就比如上面我举得员工姓名和工资问题,如果不建立有效连接那么,一个员工对应多个工资那么就无法拿我们想要的数据–>

连接分类:

内连接:
等值连接:
非等值连接
自连接
外连接:
左外连接
右外连接
全外连接

交叉连接

有很多连接我就挑几个常用的讲一下

等值连接

① 多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③ 多表的顺序没有要求
④一般需要为表起别名
⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选

例:查询各个员工对应的工资

select name,money from yuangong , gomgzi where yuangong.id=gomgzi.id

这里我们可以用取别名的方式让代码看起来简洁一点

select name,money from yuangong y , gomgzi g where y.id=g.id

外连接

1、外连接的查询结果为主表中的所有记录如果从表中有和它匹配的,则显示匹配的值如果从表中没有和它匹配的,则显示null外连接查询结果=内连接结果+主表中有而从表没有的记录
2、左外连接,left join左边的是主表 右外连接,right join右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的

select * from 主表 a left outer join 从表 b on a.id=b.id where a.id is not null

select a.*,b.* from usera a left outer join grade b on a.id=b.uid where a.id is not null
在这里插入图片描述

常见函数

字符函数
作用函数结果
转小写LOWER(‘SQL Course’)sql course
转大写UPPER(‘SQL Course’)SQL COURSE
拼接CONCAT(‘Hello’, ‘World’)HelloWorld
截取SUBSTR(‘HelloWorld’,1,5)Hello
长度LENGTH(‘HelloWorld’)10
字符出现索引值INSTR(‘HelloWorld’, ‘W’)6
字符截取后半段TRIM(‘H’ FROM ‘HelloWorld’)elloWorld
字符替换REPLACE(‘abcd’,‘b’,‘m’)amcd
数字函数
作用函数结果
四舍五入ROUND(45.926, 2)45.93
截断TRUNC(45.926, 2)45.92
求余MOD(1600, 300)100
日期函数
作用函数结果
获取当前日期now()当前日期时间
将日期格式的字符转换成指定格式的日期STR_TO_DATE(‘9-13-1999’,’%m-%d-%Y’)1999-09-13
将日期转换成字符DATE_FORMAT(‘2018/6/6’,‘%Y年%m月%d日’)2018年06月06日
聚合函数

1、 SUM():求和。

2、 AVG():求平均值。

3、MAX():求最大值。

4、 MIN():求最小值。(1、2、3、4、常与GROUP BY一起使用,也可单独使用)

5、 COUNT():统计记录的条数。常与GROUP BY一起使用,也可单独使用 如果有筛选的条件加关键字having

合并

1、UNION:将所有的查询结果合并到一起,然后去除掉相同的记录

2、UNION ALL:将所有的查询结果合并到一起,不会去除掉相同的记录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值