“SQL 被低估了!”

640?wx_fmt=gif

【CSDN编者按】一直以来,结构化查询语言 SQL 凭借着快速、无需编码、可移植性、明确界定标准等特性深受开发者喜爱。且自从被加入 TIOBE 编程语言排行榜以来,SQL 就一直保持在 Top 10 的范围内。

在本文中,作者 Craig Kerstiens 发布了一则名为《SQL: One of the Most Valuable Skills》的博文,引起无数网友共鸣,其纷纷表示,SQL 确实是一门被低估的语言。

对此,你怎么看?

640?wx_fmt=jpeg

作者 | Craig Kerstiens,云技术工程师@citusdata

译者 | 弯月

责编 | 屠敏

出品 | CSDN(ID:CSDNNews)

以下为译文:

在我的职业生涯中我学习了很多技术,但是我觉得最实用的技术当属 SQL。对我来说,SQL 是最有价值的技术,原因有以下几个方面:

  1. SQL 在不同的职责和学科中都很有价值。

  2. 只需学习一次,一劳永逸。

  3. 你可以成为超级英雄。掌握这门技术,会让你变得非常强大,因为很多人都没能熟练掌握这门技术。

640?wx_fmt=png

SQL 是一个可以随处使用的工具


无论你的职责是什么,你都可以通过 SQL 让你工作变得更轻松。目前作为一名产品经理,我的工作重心在于查看数据、分析我们在产品方面的影响以及塑造产品规划蓝图。如果我们刚刚发布了一个新功能,那么相关的数据(比如是否有人查看这个功能等)可能都保存在关系数据库中。如果我正在追踪一些关键性的指标(例如月度增长),那么很可能这些数据也保存在关系数据库中。另外,我们所有的工作(例如系统记录)都需要使用 SQL。掌握如何使用 SQL 可以为我节省大量的工作,因为我无需向他人询问具体的数字。

但是,即使在成为产品经理之前,我也会使用 SQL 来了解系统内部的情况。作为一名工程师,通常我可以通过 SQL 更快地获取我想要的信息,而无需使用 Ruby 或 Python 编写脚本。当我的 webapp 变得非常迟缓时,我必然需要了解其所执行的 SQL 以及优化的方法。当然,这远远超出了对 SQL 基本的理解……但是为查询添加索引就可以解决问题,而无需增加缓存,这还是非常值得花费额外的时间学习。


640?wx_fmt=png

SQL 的知识具有持久性


我记得大约在20年前,我创建了第一个网页。我感觉非常欣喜,还加入了一些 Javascript 来强化页面,提示用户点击是/否或提供一些输入。后来,大约在10年前,jQuery 问世了,虽然有时它很冗长,但是学习新功能可以让页面整体上更加美观,所以我重新学习了 JS 的 jQuery 方法。再到后来,Angular  - > React / Ember 相继出现,现在为了将基本的 Javascript 引入我的网站,我需要一整套的流程,而现实情况是我所做的仍然只是让用户点击是/否——与20年前一样。

相反,SQL 却没有太多改变。虽然它已经发生了改变——成为了现代的 SQL,但是我仍然认为与其他技术相比,这点变化几乎微不足道。没错,每隔几年就会一个新的标准问世,偶尔还有新的内容(比如支持窗口函数或CTE),但是 SQL 的基础知识始终如一。只需学习一次 SQL,你就可以在工作中反复使用,而无需重新学习。请不要误会,我喜欢学习新的东西,但我宁愿学习一些真正的新东西,而不仅仅是完成同样任务的另一种方法。


640?wx_fmt=png

SQL 的独一无二


大多数应用程序开发人员都未能熟练地掌握 SQL,他们没有认真学习这项技术。正因为真正掌握 SQL 的人非常少,所以可能你看起来更加出众。我原来的公司拥有数百名的工程师,每周都有好多人(从初级工程师到高级首席工程师)来问我:“你能帮我看看这个查询该怎么写吗?”因为你掌握了某项很少人掌握的技术,所以你可以帮助别人,而当你遇到困难需要他们帮助时,他们也会义不容辞。

如果你还未能精通 SQL 的话,或许可以马上行动起来。


640?wx_fmt=png

你怎么看?


对此,网友们也各抒己见:

评论1:

SQL 是我见过的最令人叹为观止的一个概念。它有将近五十年的历史,而且没有丝毫要被取代的迹象。我们创造无数的其他技术来存储和处理数据,但似乎我们总是在设法利用这些技术(例如 Hive,Presto,KSQL等)重建 SQL。

我在经营一家创业公司,为客户构建分析基础架构。我们非常重视 SQL,而本文的内容非常真实。

与普通的软件工程师相比,分析师和数据科学家在工作中编写的 SQL 越来越多。

MMP 数据仓库(redshift,bigquery,snowflake等)的出现,使得即使预算有限的公司也能够使用 SQL 来存储和查询大量数据。SQL 比以往任何时候都更强大,更有价值。

如果注意观察某个普通的企业,你会发现大多数软件工程师都不擅长 SQL。他们怎么能这样?大多数复杂查询都是分析查询。ORM 可以处理应用程序代码需要处理的大多数基本功能。

但是,本文没有提到一点:许多后台的工程师已经抽象出了 SQL,当然还有前端和移动。所以即便你不太了解 SQL 也可以成为一名优秀的开发人员。

另一方面,拥有初级或中级分布式文件系统、流媒体数据或各种其他 NoSQL技术知识的“数据工程师”涌现了出来。通常他们对原始 SQL 的了解甚至比初级工程师更少,因为 SQL 位于他们强大的数据工具的底层。

但是,如果你真正掌握了 SQL,再加上如今掌握这项技术的少之又少,所以你可以拥有巨大的权力。可能比以往任何时候都强大。

评论2:

众所周知,SQL 是关系数据库语言,其基础是关系代数与集合论,因为有了这样强大的后盾与坚固的基础,所以 SQL 可以经受住时间的考验而长久不衰。也正是因为这个原因,历经多年乃至在不同的职责下你也不需要重新学习。

但是,这并不是说 SQL 就是完美的,事实上 SQL 距离“完美”还差得非常远。因为 SQL 还有很多未能很好地支持,甚至背离关系模型之处。

举个最简单的例子,关系模型基于二值逻辑(即真/假),而 SQL 是三值逻辑:真、假、NULL。平白多出一个 NULL,其引发的问题也非常多,例如:

(A = B) OR (A<>B)

很显然这是一个恒真表达式,要么相等,要么不相等,还有第三种选择吗?有!在 SQL 中,如果 A 为 NULL 或 B 为 NULL,则这个表达式的结果为 NULL。

除此之外,还有 SQL 中有重复数据,但是集合论中没有,重复的数据在集合中会被视作一个。

最后再说一个,集合中的数据项没有顺序,而 SQL 表中的列有从左到右的顺序。

所以,我们希望 SQL 能够紧紧围绕关系代数与集合论,取得更好的成长与发展。

原文:http://www.craigkerstiens.com/2019/02/12/sql-most-valuable-skill/

本文为 CSDN 翻译,如需转载,请注明来源出处。作者独立观点,不代表 CSDN 立场。

【完】

640?wx_fmt=jpeg

 热 文 推 荐 

☞ 网易、苹果纷纷裁员;抖音遭罚 570 万美元;华为三星和解 | 极客头条

☞ 平均薪酬 45 K!拿下三份 Offer,这位程序员做对了这些!

☞ 你我的父母,都在被互联网“割韭菜”

☞ 程序员如何实现财富自由?

☞ 如果中本聪没说错,这场战争美国输定了!

☞《流浪地球》票房:预测10亿却飚50亿 ,数据预测为什么这么难

☞ 暴雪游戏遭遇AI“实力”坑队友:四处游走,还不参与战斗

☞ 神操作!这段代码让程序员躺赚200万?给力!

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

640?wx_fmt=gif点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

640?wx_fmt=png喜欢就点击“好看”吧!
展开阅读全文

超长sql语句被截断?

01-24

--要插入的表为rnCREATE TABLE [dbo].[B_log] (rn [log_id] [int] IDENTITY (1, 1) NOT NULL ,rn [LogDateTime] [datetime] NULL ,rn [user_id] [int] NULL ,rn [user_name] [nvarchar] (11) COLLATE Chinese_PRC_CI_AS NULL ,rn [client_name] [nvarchar] (21) COLLATE Chinese_PRC_CI_AS NULL ,rn [client_ip] [nvarchar] (16) COLLATE Chinese_PRC_CI_AS NULL ,rn [op_action] [nvarchar] (21) COLLATE Chinese_PRC_CI_AS NULL ,rn [op_sqlstring] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NULL rn) ON [PRIMARY]rnGOrnrnALTER TABLE [dbo].[B_log] WITH NOCHECK ADD rn CONSTRAINT [PK_B_log] PRIMARY KEY CLUSTERED rn (rn [log_id]rn ) ON [PRIMARY] rnGOrnrn-------------------------------------------------------rn--要执行的sql语句为:op_sqlstring字段被截断rninsert into b_log (LogDateTime,user_id,user_name,client_name,client_ip,op_action,op_sqlstring) values ('2006-1-23 23:19:53',1,'管理rnrn员','MAIA2','192.168.1.95','机动车修改','veh_number=xxxxxx,struc_number=9616824,engine_number=6013126,seating=5,charact=私车,kind=小客,brand=切诺机,color=rn兰,grade=,reg_date=1996-11-01,cert_date=1996-11-07,veh_settle=是,settle_date=1996-11-06,settle_end=3000-12-31,last_settle_date=2004-11-rnrn04,next_annual_check=2006-11-01,last_annual_check=2005-11-22,next_settle_date=2006-11-06,property=,resp_number=,spe_fig=1已验内,agent=rnrn否,who_agent=,center_insu=否,v_next_annual_insu=2005-11-09,settle_source=,emp_st_sc= -1,remark=,check_fee=0,mng_fee=240,Owner=张xxx,gender=男,birthday=1963-rnrn08-02,ID_card=XXX1031963080XXXX,pt=13820465597,phs=,phone=0,Address=同上,Post=,id_addr=河西区大营门勤艺里(凯旋门马场道门rnrn口),comp=,comp_phone=,comp_addr=,email=69182487,remark_owner=,sms=否,vip=否,emp_veh=50,emp_op_veh=1,op_date=2005-11-23,in_date=2006-1-23 23:19:34no_use=,no_use_date=3000-12-31,no_use_rrneason=Status=1,price_section=C,big_client=否,Insu_kind=,')rn---------------------------------------------------------------rnop_string字段被截断为rnveh_number=xxxxxx,struc_number=9616824,engine_number=6013126,seating=5,charact=私车,kind=小客,brand=切诺机,color=兰,grade=,reg_date=1996-11-01,cert_date=1996-11-07,veh_settle=是,settle_date=1996-11-06,settle_end=3000-12-31,last_settle_date=2004-11-04,next_annual_chrnveh_number=AJ6345,struc_number=9616824,engine_number=6013126,seating=5,charact=私车,kind=小客,brand=切诺机,color=兰,grade=,reg_date=1996-11-01,cert_date=1996-11-07,veh_settle=是,settle_date=1996-11-06,settle_end=3000-12-31,last_settle_date=2004-11-04,next_annual_chrnrnrn---------如果不能执行大家调一下格式。求问,这个问题应该怎么处理? 论坛

没有更多推荐了,返回首页