《SQL必知必会——第1、2课:sql基础概念及检索数据》

       现在还会有这种想法,出于对技术的敬畏,在开始真正使用某项技术之前,都会翻翻相关书籍,潜心学习一下,然后在开始,所谓出生牛犊不怕虎,在软件开发这个行业还是不提倡,一旦乱用技术,后面的坑实在难填。代码的改动就意味着调试、测试,以及对生产环境的影响,是很花团队时间和精力的。最好就是一开始把技术用正确,后面即使有改动,也是小改动,可以很快修复。还是说说这本书《SQL必知必会》(Ben Forta 著,钟鸣  刘晓霞 译),总觉得自己的sql学的不够系统,然后去年上半年买了这本书,拖拖拉拉到下半年才翻完,其实这本书是一本入门书,总共才200多页,主要还是自己被各种琐事耽搁,然后看书节奏拖沓很多,看完后一直想写点什么,最后想想sql语法相关文章太多了,即使写也写不出太深层次的东西,还是做做笔记吧,摘录一下本书的知识点,后面工作用到大家可以随时查阅,自己也可以随时查阅。本书一共分22课,我试着摘录整理成几篇博客,成一个系列。

       第1课  了解sql

       本课都是基础概念,这些概念经常被大家在工作中提及,相信这些概念早在大学时代上数据库原理课时就已经建立,但真要说一下数据库的定义,大家肯定会支支吾吾。数据库是一个以某种有组织的方式存储的数据集合。最简单的办法是将数据库想象为一个文件柜,这个文件柜是一个存放数据的物理位置,不管数据是什么,也不管数据是如何组织的,或者把数据库想象成是一个保存有组织的数据的容器。这里面有一个很容易混淆的地方,那就是人们通常用数据库这个术语来代表他们使用的数据库管理系统(DBMS)。实际数据库是通过DBMS创建和操纵的容器,而具体它究竟是什么,形式如何,各种数据库都不一样。举个例子,我们经常说mysql数据库,其实mysql是数据库管理系统,非数据库,当然也不必特别较真,mysql数据库这句话也可以理解为:使用mysql数据库管理系统创建和操纵的数据库。

  • 表:某种特定类型数据的结构化清单;
  • 列:表中的一个字段,所有表都是由一个或多个列组成;
  • 行:表中的一个记录,也就是把数据库表想象为网格,网格中垂直的列为表列,水平行为表行;
  • 主键:一列(或几列),其值能够唯一标识表中每一行,主键不允许修改和更新,不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。
  • SQL:结构化查询语言,专门用来与数据库沟通的语言。sql不是某个特定数据库供应商专有的语言,而是一种业界标准,由ANSI标准委员会管理,也叫ANSI SQL,几乎所有重要的DBMS都支持sql。这一点保证了学习sql,就几乎能与所有数据库打交道。甚至现在的spark sql,hive sql等等都长的差不多,sql已经够简洁了,实在设计不出什么新花样了。

       第2课  检索数据

       所谓检索数据,就是查询数据,也就是select,你可能写的第一条sql语句就是select。关于select查询本课开篇几节并没有讲太多,可能太简单了,不过讲了一个注意点:一般而言,除非确实需要表中的每一列,否则最好别使用*通配符,因为检索不需要的列会降低检索和应用程序的性能。这一点还真得注意,有时会图省事,直接来个select *,在测试环境这样查查就算了,但是生产环境,还是要谨慎。

       检索不同的值:也就是查询出的列每个值都不一样,可以使用distinct关键字,比如:select distinct vend_id from products,有一个注意点是该关键字作用于所有列,不仅仅是跟在其后的那一列,所以这里不要误用,如果distinct后面跟着多列的话,那distinct基本也就废了,后面几列的组合值,可能多半都是不一样的,也就起不到去重的作用了。当然,具体场景具体分析,也可能就是需要多个列值组合起来去重呢。

       限制结果:如果只想返回第一行或一定数量的行,可以使用top(SQL Server / Access)关键字或者limit(MySql / MariaDB / PostgreSQL / SQLite)关键字。不同的DBMS还不太一样,不过这个理解起来也非常简单。不过下面这个例子可以看一下:select prod_name from products limit 5 offset 5; 这里的limit 5 offset 5表示返回从第5行起的5行数据。

       使用注释:sql语句也是代码,也要有注释。我看过有把业务逻辑写进sql的,比如一些业务上的判断,也用sql实现,寄希望于强大的sql直接出最终结果,可想而知,这样的sql有多复杂,非常晦涩难懂,这样的sql不加注释,后期是非常难维护的。当然,个人觉得最好不要这么干,还是把业务梳理清楚,划分若干个环节,每个环节使用sql查询数据,然后通过程序把各个环节数据串联起来,这样sql也方便维护,业务代码也容易看懂,无论后面谁接手维护,都能很快上手。言归正传,sql注释形式比较多,可以使用--或者#进行行内注释,也可以使用/**/,像c/java代码那样进行多行注释。有复杂代码的地方,就应该写注释,当然注释要准确,不准确的注释和没有注释一样坑,甚至更坑。

 

 

猜你喜欢

转载自blog.csdn.net/u013085897/article/details/81106053