page contents

自学SQL掌握这五点,让你少走许多弯路

刚学SQL的同学肯定和我一样有过这样的疑问:为什么要先写select,再写from,再写where,再写......

attachments-2021-04-7wclHRNW606ffc4ce17ff.png

SQL逻辑


刚学SQL的同学肯定和我一样有过这样的疑问:为什么要先写select,再写from,再写where,再写......


对于这个问题我没法从工程师的角度去回答你,但我有一个技巧可以帮你绕开这个疑问,在写SQL的时候心理不那么别扭。读完本文觉得有帮助,点击:自学SQL 更多相关精彩内容等你来发现。


记SQL语句的执行顺序。


MySQL的执行顺序如下,当然各种类SQL语言的执行顺序可能会有一两点差异,比如Hive SQL、Teradata SQL等等。


attachments-2021-04-2hc10lv3606ffb4451cb3.png


不管你写哪种SQL,首先搞清楚执行顺序,接下来你就可以按照这个执行顺序来写了。


FORM and JOIN


首先我们进行查询的时候,肯定是先获得一份数据集的,From语句和JOIN被先执行的,就是为了获得数据集的。


WHERE


一旦数据集给拿到了,WHERE限制条件会被用到某些行上,并把不满足的行给抛弃掉。并且,这能够用到各种数据类型中


GROUP BY


WHERE条件限定之后,接下来就是GROUP BY语句了,这一语句会根据某一字段进行分组,并对各个组进行求聚合。


想想看,我们先进行的是FROM,紧接着是WHERE,然后才是GROUP BY。所以上面的语句就是错在了WHERE 语句在执行的时候,GROUP BY语句还没有开始,那时聚合值sum()还是未知的。


HAVING


having语句在SQL中的主要作用与Where语句作用是相同的,但是having是过滤聚合值,其实上面的正确写法是这样的


SELECT


在经过上面的执行之后,终于到了select语句,但是别慌,下面还有呢。


DISTINCT


对于剩下的行,Distinct用来去除重复行,只保留唯一的。


ORDER BY


此语句用来对select后的结果进行排序,升序或者是降序。


LIMIT


用来限定返回的行数


按照这个逻辑,把每一个子句写出来,最后再按照SQL的书写顺序排个序,一条逻辑清晰、完整的SQL语句就写好啦!

# SQL书写顺序

SELECT DISTINCT<Select_list>
FROM <left_table>  <left/inner/right> JOIN <right_table>
ON<join_condition>
WHERE<where_condition>
GROUP BY<group_by_list>
WITH {CUBE|ROLLUP}
HAVING<having_condtion>
ORDER BY<order_by_list>
LIMIT<limit_number>



有必要的规范习惯


  1. SQL语句的最后不要忘记加分号 ;
  2. 如果用中文作为别名,使用双引号“”
  3. 查询日期或字符串的时候,使用单引号 ''
  4. 不等于用<>,这个写法适用于所有RDBMS,所以也有必要养成书写习惯
  5. order by 默认为升序,降序的写法是 order by desc
  6. order by 是在select之后执行,所以可以使用在select中定义的别名,而其他地方不能使用别名,特别是新手容易在where中使用别名
  7. 字符串是按照字典顺序排序的,字典顺序的意思是相同字符开头的字符串比不同字符开头的字符串更接近,例如下面是一个升序:


‘1’

‘12’

‘123’

‘2’

‘23’

‘3’



常用函数


算术函数:


  1. 绝对值 ABS()

  2. 求余 MOD()

  3. 四舍五入 ROUND(m, n) #对m保留n位小数


字符串函数:


  1. 拼接 CONCAT(str1, str2, str3, ...)

  2. 求长度 LENGTH()

  3. 全部大写 UPPER()

  4. 全部小写 LOWER()

  5. 替换 REPLACE(str,str1,str2) #将str中的str1替换成str2

  6. 截取 SUBSTRING(str FROM k FOR n) #从str的第k个字符开始取长度为n的子字符串

注意,SQL是从1开始计数,和一般编程语言不同,它们都是从0开始计数

日期函数:


  1. 当前日期 CURRENT_DATE

  2. 当前时间 CURRENT_TIME

  3. 当前日期和时间(时间戳) CURRENT_TIMESTAMP

  4. 截取时间元素EXTRACT (时间元素(year,month,day等) FROM 时间)

  5. 只取日期 DATE(TIMESTAMP)


转换函数:


  1. 类型转换 CAST ( s AS 想转换的类型)  #将s转换成指定数据类型

  2. 返回参数中左侧开始第一个不是NULL的值 COALESCE(数据1,数据2,数据3,...)

COALESCE是一个在实际工作环境中非常常用的函数,可以用来将NULL转换为其他值,也可以用来构造新的字段。


谓词


LIKE


  • LIKE '%xxx%' 中间一致

  • LIKE 'xxx%' 前方一致

  • LIKE '%xxx' 后方一致

  • LIKE 'xxx_' 查询xxx + 任意1个字符

  • LIKE 'xxx__' 查询ddd+任意2个字符


BETWEEN …… AND


  • BETWEEN a AND b 等于 [a, b]

  • 如果不想要临界值,就只能使用 < 和 >


IS NULL、IS NOT NULL


  • 判断是否为NULL


IN


  • IN(数据1,数据2,数据3,...) ;OR 和 = 一起使用的简单用法

  • NOT IN(数据1,数据2,数据3,...) ;AND 和 <> 一起使用的简单用法

  • NULL不能作为IN的参数,否则无法返回任何记录

  • 子查询可以作为IN的参数


学习小建议


保持专注


时间有限,不要把时间花费在网上盲目检索资料、群里聊天、互相吐槽上。


要适当投入资源


如花钱买一些课程、项目数据、书籍等。


  • 对于新手还没有完整的知识框架前,自学是个痛苦的过程,会浪费大量的时间,走一些弯路,并且更容易使人困惑不知该从何处下手,最后不了了之。

  • 前辈带着你梳理知识框架就显得很有效率,并且能大幅提升学习效率,何乐而不为?

  • 适当的花点小钱就能节约大量的时间和精力。


要学会自己解决问题的能力


  • 部分问题都能在网上找到解决方法或思路,特别是一些国内外技术网站、博客等。

  • 一定要能自己解决问题,这是个很重要的能力,实际工作中会碰到比学习过程中更麻烦的问题(自学能力)。

  • 对于自己解决不了的问题,再去求助他人。清晰的问题表述能够更快、更准确的帮助你解答疑惑。可以将【当前故障界面】、你做过的【排故工作】,描述清楚再去求助别人。不然尽管人家愿意解答,但不知道具体怎帮你。如果觉得意犹未尽,欢迎前往并关注:六星社区了解更多相关资讯。

    如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验

    关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

    attachments-2022-06-JGlFt0u862abe437c6094.jpeg

  • 发表于 2021-04-09 15:09
  • 阅读 ( 454 )
  • 分类:数据库

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1320 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章