SQL(入门篇)刷题记录及总结

SQL(入门篇)刷题遇到的问题和记录

这里记录了在刷牛客网sql期间的一些注意事项,无奈没怎么学过sql。所以从入门开始学起
ps 题目地址:https://www.nowcoder.com/exam/oj?tab=SQL%E7%AF%87&topicId=199
有所参考的地方会在文中随附贴上。

1、SQL组合表格

SQL组合表格分为了内连接和左右链接

内连接(join)会舍弃两个表不同的表格数据

左右链接(left/right join)会匹配两个表相匹配的数据,还会显示不匹配的数据

   low, high = 0, len(nums)-1

    while low <= high:
        middle = (high + low) // 2
        if nums[middle] == target:
            return middle
        elif nums[middle] < target:
            return low == middle + 1
        else:
            return high == middle-1
    return -1

图片来自菜鸟教程

连接查询可以参考下各个其他人的blog或是菜鸟教程:https://www.runoob.com/sql/sql-join.html

要记得运用左右连接时,可以快速筛选掉两表的数据,并进行合并

SELECT *
From1 as a left join2 as b
on a.xxx = b.xxx;

什么时候用表连接查询?

需要多个表查询的时候,可以利用连接查询,看清楚用什么链接,并且不会影响原表的内容。

2、Union 和 Union all 用法

union会默认去重复,union all 不去重

查询多次,可以用union或者or连接

牛客网原题:https://www.nowcoder.com/exam/oj?tab=SQL%E7%AF%87&topicId=199

SELECT device_id, gender, age, gpa FROM user_profile
WHERE university = '山东大学'
UNION ALL
SELECT device_id, gender, age, gpa FROM user_profile
WHERE gender = 'male'

3、CASE用法

SQL中IF语句也有相同的用法。

其中,if主要是一个三元表达式IF(expr, expr_true, expr_false)

expr为判定。为true是则定位expr_ture,为false时则定为expr_false.

if 语句主要是用来判断真假,即01变量。

case可以看作是一个if语句,但也要注意用法。主要是用来判断分支,

SELECT*
CASE 
WHEN [condition] then [return value]
[else] # 这里else可以有也可以不用
end # 这里必须要有end结束句

4、有关于时间的相关用法

DAY,MONTH,YEAR

Day: Day(date),这里面会去除date里面的年月,只保留日。

剩下的month,year 同理

同时,可以选取Day(date)=2,指定筛选固定的日。

剩下的month,year 同理

SELECT DAY(date) as day, count(question_id) as question_cnt
FROM question_practice_detail
WHERE MONTH(date)=8 and year(date)=2021
GROUP BY day

DATEDIFF()

DATEDIFF() 函数返回两个日期之间的时间。

# DATEDIFF(*datepart*,*startdate*,*enddate*)

SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate

# result = 1

5、on, where, having 三种条件筛选用法

这里在记录问题的时候,看到了一位老师的blog,写的非常详细清楚,这里再贴上链接:https://tonydong.blog.csdn.net/article/details/105380420?spm=1001.2014.3001.5502

WHERE 与 HAVING

WHEREHAVING的根本区别在于:

  • WHERE子句在GROUP BY分组和聚合函数之前对数据行进行过滤;
  • HAVING子句对GROUP BY分组和聚合函数之后的数据行进行过滤。

因此,WHERE子句中不能使用聚合函数。

WHERE 与 ON

当查询涉及多个表的关联时,我们既可以使用WHERE子句也可以使用ON子句指定连接条件和过滤条件。这两者之间的主要区别在于:

  • 对于内连接(inner join)查询,WHEREON中的过滤条件等效;
  • 对于外连接(outer join)查询,ON中的过滤条件在连接操作之前执行,WHERE中的过滤条件(逻辑上)在连接操作之后执行。

6、如何提取每列中的字符

利用substring_index(column, ‘什么分隔符’, 第几个)

#注意:只有中间的需要引号。并且可以无限套娃使用该函数。

substring_index(substring_index(xxx, ',', 3), ',', 1)

# 这段意思就是先提取xxx里的第3个字符,再提取从第3个字符开始后的第1个字符

7、窗口函数

通俗易懂的学会:SQL窗口函数

这里太多了,后面再细细总结,因为这里几乎是sql必考的一个考点了

8、count()和sum()区别

sum()函数和count()函数的区别:

  • sum()对符合条件的记录的数值列求和;count()对符合条件的结果个数(或者记录)求和。
  • 求和用累加sum(),求行的个数用累计count()
  • 数据库中对空值的处理:sum()不计算,count()认为没有此项;

【和python一样,结果我还查了一遍!!!还是记下来吧。。】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pigou_

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值