SQL基础常用函数合集

AVG

avg()函数是一个聚合函数(聚合函数:对一组值执行计算并返回单一的值的函数,常见的有sum、max、min、count等),用于计算从select语句中返回的数值数据集的平均值。

牛客.SQL17计算男生人数以及平均GPA

select 
count(gender) as male_num,
round(avg(gpa),1) as avg_gpa
from user_profile 
where gender='male'

COUNT

计算个数或项目数,聚合函数。

基本语句格式:统计公司员工数量。
select count( ) from Company --包括空值
select count(*) from Company --不包括空值

SUBSTRING

substing(str,x,y),str字符串,x是从第x位开始截取,y是截取位数。

substring('dasfdgd',3,2)
->sf

SUBSTRING_INDEX

substring_index(“待截取有用部分的字符串”,“截取数据依据的字符”,截取字符的位置N)。

牛客. SQL32截取出年龄

substing_index('dsf,fd,sd,gf',',',1)
->dsf
substing_index('dsf,fd,sd,gf',',',-1)
->gf
substing_index('dsf,fd,sd,gf',',',2)
->dsf,fd

CAST

CAST <expression> AS <data_type>

expression:任何有效的SQServer表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。

IFNULL和IF

IFNULL(expr1,expr2)          
解析:如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。  
select IFNULL(1,0);      
 -> 1         
select IFNULL(1/0,10);      
-> 10      

IF(expr1,expr2,expr3)          
解析:如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF返回expr2,否则它返回expr3。IF返回一个数字或字符串值,取决于它被使用的上下文。
SELECT IF(TRUE,1+1,1+2);
-> 2
SELECT IF(FALSE,1+1,1+2);
-> 3
SELECT IF(STRCMP("111","222"),"不相等","相等");
-> 不相等

UPPER

upper(字段),字段要求是字符串类型,将字段内容转成大写。

upper('dssfd')
->'DSSFD'

ROUND

SELECT ROUND(column_name,decimals) FROM table_name;decimals规定要返回的小数位数。

timestampdiff

timestampdiff(interval, time_start, time_end)用于计算时间差,单位以指定的interval为准,常用的有:second秒,minute分组,hour小时,day天数,month月数,year年数。

牛客. SQL6删除记录一

group by和order by

order by 用于排序,默认升序。

升序排列: order by [列名] asc
降序排列: order by [列名] desc

group by 用于分类汇总,对于select查询出来的结果按照某个字段或者表达式分组,获得以组分好的集合,然后从每组中取出一个指定字段或者表达式的值。

group by [列名]

order by用于group by之后。

where和having

where:在初始表中筛选查询,用于约束数据,在返回结果集之前作用。
having:不能单独使用,必须和group by联合使用。用于对where和group by查询出来的分组进行过滤,查出满足条件的分组结果。

当语句中同时出现where、having、group by、聚集函数时,执行顺序是:
1、where子句,寻找符合条件的数据;
2、group by 子句,分组;
3、对group by 子句形成的组运行聚集函数计算每一组的值;
3、having 子句,去掉不符合条件的组。

牛客. SQL确定最佳顾客的另一种方式(二)

注意使用having:
1、having只能用于group by
2、where 是用于在初始表中筛选查询,having用于在where和group by 结果分组中查询
3、having 子句中的每一个元素也必须出现在select列表中
4、having语句可以使用聚合函数,而where不使用

inner join、left join、right join

一、inner join

select * from A inner join B on A.[列名1]=B.[列名1]

牛客. SQL检索每个顾客的名称和所有的订单号一
题目:两个表Customer和Orders。要求检索每个顾客的名称(Customers表中的 cust_name)和所有的订单号(Orders 表中的 order_num),最后根据顾客姓名cust_name升序返回。
在这里插入图片描述
在这里插入图片描述
要求输出:
在这里插入图片描述

分析:
使用两张表的公共字段,正常内连接即可。

select c.cust_name as cust_name,
    o.order_num as order_num
from Orders as o

inner join Customers as c
on c.cust_id=o.cust_id

order by c.cust_name

二、left join

select * from A left join B on A.[列名1]=B.[列名1]

1、返回A表中的所有记录和B表中联结字段相等的记录;
2、走B表索引,不走A表索引;
3、查询A表索引,B表没有的显示为null。

牛客. SQL43 检索每个顾客的名称和所有的订单号(二)
题目:检索每个顾客的名称(Customers表中的 cust_name)和所有的订单号(Orders 表中的 order_num),列出所有的顾客,即使他们没有下过订单。最后根据顾客姓名cust_name升序返回。
要求输出:
在这里插入图片描述
分析:就算顾客没有下单也需要输出,left join以左边的列表为主,取两列的交集,对于不在右边列表的字段取null。

select c.cust_name as cust_name,
    o.order_num as order_num
from Customers as c

left join Orders as o
on c.cust_id=o.cust_id

order by c.cust_name

三、right join

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录。

select * from A right join B on A.[列名1]=B.[列名1]

select的选择问题

select语句之后的排序是对结果集的操作,必须使用同一种排序规则,所以可以选择不同的区间,最后使用同一排序规则。

牛客. SQL纠错

SELECT cust_name, cust_contact, cust_email 
FROM Customers 
WHERE cust_state = 'MI' 
UNION 
SELECT cust_name, cust_contact, cust_email 
FROM Customers 
WHERE cust_state = 'IL'
ORDER BY cust_name;
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值