SQL里查询语句的格式及作用(select+from+where+join on+and+group by+having+order by+limit+union)

查询语句的格式及作用:

select distinct… as… (去重)选择哪些字段(名字改为…)
from … 从哪些表中查询
join … on … 多表连接。on后面跟连接条件
where … ①and / or… 进行筛选,and跟再一个条件 / or再包含一种情况 ②in (‘’, ‘’, ‘’) ③(not)like ‘%北京%’ 通配符↓
group by … 按照字段分组
having … 在分组后进行筛选
order by … asc/desc 结果中的行按照某个字段值的升序/降序排序
limit n 限制被select语句返回的行数为n
union 将前后两个select语句的结果组合到一个结果集中
select… … … . … …

通配符
_:匹配任意一个字符;
%:匹配0个或多个字符;
[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
[^ ]:不匹配[ ]中的任意一个字符。***

聚合函数:
count() 总的数量
avg() 平均值
round( , 1) 保留一位小数

易错点:

where语句过滤完之后才进行group by分组,
分组之后才进行聚合函数的运算。
所以若需要将聚合函数的结果作为筛选条件——也就是说,这个筛选条件在分组之后——那么就需要使用having在分组之后筛选条件。

join …on…联表查询时,select后面要注明是哪个表的。嵌套查询时不用。

易错点:用除法求了平均值,就不要再用avg了

去重求总数:count(distinct qpd.device_id)

分别查看&结果不去重:所以直接使用两个条件的or是不行的,直接用union也不行,要用union all,分别去查满足条件1的和满足条件2的,然后合在一起不去重

union和union all的区别:
union:
1.对两个结果集进行并集操作, 不包括重复行,相当于distinct,
2.会对获取的结果进行排序操作
union all:
1.对两个结果集进行并集操作, 包括重复行。即所有的结果全部显示, 不管是不是重复;
2.不会对获取的结果进行排序操作
引用自:https://blog.csdn.net/a200822146085/article/details/119545374

case
when 表达式 then ‘…’
when 表达式 then ‘…’
end as xx 的用法:

select 
    device_id,
    gender,
    case 
    when age < 20 then '20岁以下'
    when age between 20 and 24 then '20-24岁'
    when age >= 25 then '25岁及以上'
    when age is null then '其他'
    end as age_cut
from user_profile

day=‘2021-08-12’
year(day)=‘12’
month(day)=‘8’
day(day)=‘12’

在使用GROUP BY子句时,SELECT列表中的列必须要么被聚合函数处理,要么包含在GROUP BY子句中。
解决办法:

select 
    device_id,university,gpa
from user_profile
where (university,gpa) in 
    (select university,min(gpa) as gpa
    from user_profile 
    group by university)
order by university
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值