《SQL必知必会》系列 03

前段时间看到一篇公众号文章,摘录了知乎上有趣的40个精辟回复,非常好玩。今天来分享一条自己看了一眼就再也忘不掉的回复。

Question: 要怎样努力,才能成为很厉害的人?

Answer: 如果你注定要成为厉害的人,那问题的答案就深藏在你的血脉里;如果你注定不是厉害的人,那你便只需要做好你自己。

为什么对这个问题印象最深刻?因为曾经的自己非常渴望成为与众不同很厉害的人,而且还读了很多成功学的书,很擅长给自己打鸡血,也是一个非常热血向上的青年。想起了几年前读大学时,曾代表学校来北京参加全国大学生英语辩论赛,那时是一个带队老师带着我和另一个队友。

记得下了火车刚到北京站的时候,好久没到大城市的自己,望着人潮人海的北京站,对老师说了一句当时的心里话,大意是:我以后要么成为特别厉害的人,造福社会,要么成为很坏的人,破坏社会。

总之就是那时的自己认为自己以后绝非寻常之辈,一定会有所作为。言语间透漏着一种初生牛犊不怕虎的感觉,听上去很中二,但也很真实。老师很平淡的回了我一句:这两种情况发生的概率会很小,很大可能你会成为一个非常普通的人。然而当时的自己并不相信老师的话。

多年以后,不得不承认,老师说的还是成了现实。这个社会和世界不停的在矫正我最初的想法,让我逐渐认识到自己本来就是一个普通人,也做不出什么惊天动地的大事情。

至于成为一个厉害的人的这个想法,是什么时候开始渐渐淡出我的世界呢?是励志类书在我的阅读书单里慢慢减少的时候。刚毕业那会还常常看各种励志的书,非常迷恋一些类似《精进》《跃迁》这些很硬核的书,后来慢慢看的就少了。当然不是书写的不好,而是当时的自己没有能力去消化。现在呢,看专业书会更多一点。

想起了王小波很经典的一句话:

那一天我21岁,在我一生的黄金时代,我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云。 后来我才知道,生活就是个缓慢受锤的过程,人一天天老下去,奢望也一天天消失,最后变得像挨了锤的牛一样。可是我21岁时没有预见到这一点。我觉得自己会永远生猛下去,什么也锤不了我.——《黄金时代》

生活是个缓慢受锤的过程,那一年恰好我也21岁,这些年自己曾经那些棱角好像是在慢慢被磨平,但是心中的渴望却是以另外一种方式出现。因为后来读了一本《优势识别器2.0》之后,自己才明白为什么当初会有那样的想法。其实并不是必须要成为一个很厉害的人,而是与生俱来对于成就感的追求会更多一些。

《优势识别器2.0》是美国著名盖洛普公司研发出来的一种测试每个人与生俱来的5种优势的书,自己排在前五的是:思维,分析,学习,成就,搜索。测试结果中对于成就主题的分析,就很好的解释了自己为什么会希望做出很多事情,因为成就感对于不同的人来说本身重要程度就不同,有些人的渴望程度会更高,而自己就属于那一拨人中的其中一个。

所以说,现在看来,是否成为很厉害的人也没那么重要,真正重要的是做好自己。文章一开始的回复里也提到了:

“如果你注定要成为厉害的人,那问题的答案就深藏在你的血脉里;

如果你注定不是厉害的人,那你便只需要做好你自己”。

不再追求成为一个厉害的人,而是去做好自己。但真正做好自己,其实也并不是一件容易的事。前提是要先认识自己,知道自己想要成为什么样的人。而这需要长时间的思考和实践,阅读和反思。不过也没关系,来日方长,时间会把我们带到自己想去的地方。

OK,开始今天的读书笔记。

《SQL必知必会》第十一章~第十二章

第十一章:使用子查询

这一章主要介绍了什么是子查询以及如何使用子查询。子查询的含义就是把一个查询语句当作另一个查询语句中的一部分,可以是查询结果范围,也可以是检索条件,常常使用IN关键字。比如下面这段代码:

SELECT cust_name, cust_contact FROM Customers WHERE cust_id IN ( SELECT cust_id FROM Order WHERE order_num IN (SELECT order_num FROM OrderItems WHERE prod_id =‘RGAN01’));

实际开发中,在WHERE 子句中使用子查询能够编写出功能很强且很灵活的SQL语句。对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。而且,作为子查询的SELECT语句只能查询单个列,如果检索多个列将返回错误。另外还可以使用子查询作为计算字段,比如下面这段代码:

SELECT cust_name, cust_state, (SELECT COUNT(*) FROM Orders WHERE Orders.cust_id = Customers.cust_id) AS orders FROM Customers ORDER BY cust_name;

但其实,上面的代码并不是解决这种数据检索的最有效的办法,后面还会学习JOIN查询,那时的检索效率会更高。

第十二章 联结表

这一章介绍了什么是联结以及如何使用联结进行查询。读完这章后,对关系型数据库有了更深的理解。关系型数据库的关键在于各个表之间可以通过某些共同的值而彼此关联,这样做的目的就在于增强数据库的可伸缩性。

这一点可以使数据库能够适应不断增加的工作量而不垮掉。这也是关系型数据库优于非关系型数据库的地方,伸缩性更好。书中有一个很好的例子解释了关系表:

有一个包含产品目录的数据库表,其中每类物品占一行。对于每一种物品,要存储的信息包括产品描述,价格,以及生产该产品的供应商。 现在有一供应商生产的多种物品,那么在何处存储供应商名,地址,联系方法等供应商信息呢?将这些数据与产品信息分开存储的理由是:
同一供应商生产的每个产品,其供应商信息都是相同的,对每个产品重复此信息既浪费时间又浪费存储空间;
如果供应商信息发生变化,例如供应商迁址或者电话号码变动,只需修改一次即可;
如果有重复数据(即每种产品都存储供应商信息),则很难保证每次输入该数据的方式都相同。不一致的数据在报表中就很难利用。
关键是,相同的数据出现多次绝不是一件好事,这是关系数据库设计的基础。关系表的设计就是要把信息分解成多个表,一类数据一个表。
所以这个例子中可以建两个表:一个存储供应商信息,另一个存储产品信息。

想起了上个月自己在项目中也需要设计数据表,需要存储的数据是用户上传文件的信息和文件内容的具体信息。本来自己打算把它们都存储到一张表中,但是在和一位经验丰富的同事沟通完之后,决定用两个表存储。

一个是file表,存储文件的文件名,上传人,上传日期等信息,另一个是file_detail表,用来存储文件中具体item的信息,同时也包含file的id, 起到关联的作用。现在终于理解了当初为什么要用两张表,这样在进行具体增删改查时,可以根据需求的不同很清晰的找到需要的数据。

那么问题就来了,将数据分解到不同的表中,如何才能用一条SELECT语句就检索出数据呢?答案就是使用联结,它是一种机制,用来在一条SELECT语句中关联表。

如何创建联结?-----指定要联结的所有表以及关联它们的方式即可。请看下面代码:

SELECT vend_name, prod_name, prod_price FROM Vendors,Products WHERE Vendors.vend_id = Products.vend_id;

使用where关键字创建联结是一种检索方式,除此以外还有JOIN关键字。使用WHERE创建的联结是一种等值联结,它基于两个表之间的相等测试,也被称为内联结(inner join), 请看下面代码:

SELECT vend_name, prod_name, prod_price FROM Vendors INNER JOIN Products ON Vendors.vend_id = Products.vend_id;

除了联结两个表以外,还可以联结多个表,例如:

SELECT prod_name, vend_name,prod_price, quantity FROM OrderItems, Products, Vendors WHERE Products.vend_id = Vendors.vend_id AND OrderItems.prod_id=Products.prod_id AND order_num =20007;

当然,在实际运用中要考虑性能的因素,联结多个表的方式可能会非常耗费资源,因此应该多注意,不要联结不必要的表,因为联结的表越多, 性能下降的越厉害。当然,除了INNER JOIN这种联结方式,还有其它的联结,我们下回再继续分享。

以上就是今天分享的内容。

感谢阅读,周末愉快~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值