今天在做SQL题的时候,碰到一个连接查询的题
我很自然的开始写代码:
select
xxx
from
表1
left join 表2 on 表1.xxx=表2.xxx
然后乏味的提交结果,这时候我觉得可能我的SQL速度会不会有点慢,我像打开题解看一下
然后我发现了一个我没见过的东邪,又或者已经还给老师了!
using
当时的代码大概是这样的:
select
xxx
from
表1
left join 表2
using(列名)
然后我也好奇的去尝试了一下,很显然的成功了,然后我试图了解了一下它
关于using 它是一个关键字,一般用于简化连接查询,但是我们平常使用的on和它有什么区别呢?
using:在使用using的时候我发现他和on的区别大概是:
1.它大概只可以判断等值,也就是说只有在判断两个值相等的时候的连接才可以用
2.在比较的两个表的数据时,列名相同,数据类型相同,然后从表1中取出的值去和表2比较,相等才会保留结果
但是on:
可以在连接后根据不同的状态需求来构建自己所需的sql,他可以把两个不同列表名的数据进行比较,但是有可能会碰到重复的列名的时候需要加上表名
然后就是接着下一道sql,依旧开始入手
我们看一下题:
看到这个题的时候我开始入手,写出来我自己的SQL语句
select
p.project_id,avg(experience_years ) as average_years
from
Project p
left join employee e
using(employee_id )
group by project_id
依旧觉得这道题很简单,然后我信誓旦旦的点了提交
我看到测试用例的时候我还在嘴硬多两个零算错吗,结果看到第三个才发现我的数据根本不是0的问题,预期结果中出现的是四舍五入的值
我脑子里关于SQL中四舍五入空空的
根据查询我发现了round
round
它的使用方式大概是这样的
round(数据,数字)
这里的数据指的是你本身需要的数据值,需要你写出来
这里的数字大概分三种
正数:
这里的数字如果是正数,就会将你的数据按照你的数字进行处理,来保留小数点后的几位
0:
这里如果是0,则会将你的数据去掉小数点进行四舍五入保留
负数:
这里如果是负数的话,则表示你不需要小数点,会把小数点前面的对应数量位进行四舍五入变成0
这个文字比较难理解我《举个栗子》
round(1234.56,-1)
如果这里是-1 它最后的值是 1230
round(1234.56,-2)
如果这里是-2 它最后的值是 1200
这都是不进位的情况
但是通过我的测试
select round(1245,-1);
#这个结果是1250
我继续测试了round(1245,,-2)
我理所应当的决定答案应该是1300
但是:
round(1245,-2);
#这个结果其实并不是1300 而是1200
所以在这个round中它的四舍五入并不是把后面的每一位都计算,而是直接从当前所需要的位置下一位,向上四舍五入而已
好啦今天这就是我的分享
我是范,一个在努力的人,下次再见!