【67】SQL
    最好的汽车手自一体,最好的系统手自一体,最好的程序员不但善于运用框架、平台中现有的技术减少开发工作量提升系统稳定性,同时,当框架、平台无法满足需求时,还会用Notepad写代码,手工写SQL,命令行下的基本调试。
一、基本DDL语句,必须会手写。
(1)INSERT INTO订单商品表(商品ID,数量) VALUES(’A47’,’2012-10-01’)
    这是最简单的语句,同时又是其他操作的数据来源,基础中的基础,所以一定要会。
(2)SELECT 商品ID,数量 FROM 订单商品表 WHERE订单日期>=’2012-10-01’
        最灵活最常用的那20%,就是这个SELECT语句。
(3)UPDATE 订单商品表SET数量=数量+(100.0) WHERE数量 IS NOT NULL,UPDATE语句使用原则:(1)不要在生产库中使用,这个原则同样适用于下面的DELETE语句,否则造成的损失可能导致公司破产。(2)UPDATE语句也可以多表关联操作(JOIN),但不建议使
用。张三曾经在一个著名大型数据库的新版本上执行了一个关联语句,结果就造成了数据库实例停止服务,这充分说明了那80%不常用的功能真的很脆弱,想让自己的作品天长地久的运行下去,就尽量用大道边上的功能,知道回字的四种写法并不意味着自己水平比别人高,会写繁体字却是有文化的表现。
(4)DELETE FROM 订单表WHERE订单日期>=’2012-10-01’
    这里的表名和字段名都是中文只是为了看得更清楚,并不是倡导这么做,当然,公司规范要求用中文的话,没有任何问题的。
二、常用的关键字,排名不分先后,尽量熟练应用之,至少要知道是干啥的。
(10)ISNULL(NVL、COALESCE)、IS、 NOT、 NULL,关于空值的处理。空值是数据库和代码中都有的内容,都是需要特殊处理的一个特殊数据。“空不异,不异空”,圣人不我欺。
(20)LENGTH(LEN),判断字段值得长度,注意NULL和空格等不可见的值。
(30)SUBSTRING ,字符串处理,取数组的一部分值,注意数组长度。
(40)TRIM ,删空格,本书有专门章节介绍。
(50)CAST(CONVERT),类型转换,什么类型?我们说过,就是数值和字符串,当然可以继续细分下去,别分的太细,我们是工程师,不是科学家。
(60)CASE WHEN(DECODE),根据读到的值处理为自己想要的值,注意DEFAULT处理,防范逻辑漏洞,最好有测试用例。
(70)DATEDIFF,日期函数的代表,还有其它的函数,请参考相关文献。
(80)DISTINCT,严重影响效率,尽量不用。不管SQL多复杂,嵌套了多少层,只在最外层用一次。
(90)
(100)SUM / COUNT / AVG 、GROUP BY、HAVING
(110)INNER JOIN / LEFT OUTER JOIN,关系型数据库,就是一堆二维表格,表格里的数据往往是精简的,存储效率比较高的,直接看是看不懂的,为了达到人类能直接看懂的效
果,需要把表格“关联”起来展示。比如:供应商表格里有供应商的ID和名称,订单表里只有供应商的ID,显示订单的时候,供应商的名称是从供应商表里读到的,这就是“关系户”。使用关联的口诀是,只有内关联和左关联,做过项目的你可能明白这句话的含义,如果不明白,请阅读本书的专题章节。
(120)UNION ALL, 表格不但可以“横向”关联,还可以纵向拼凑,甚至可以把没有任何“关联”关系的表凑成一张表。反正SQL处理的就是一张二维表,至于这张表是“物理的”(数据库中的实际表,比如供应商,订单),还是“逻辑的”(子查询,是一个SQL查询的结果)无所谓。
(130)EXISTS / IN,对结果集的判断,返回一个布尔型值,既然如此,很显然只能出现在WHERE子句中。
(140)AS ,别名,很重要,不只是为了可读,更重要的是可以“无中生有”的搞出若干列,比如:0.0 AS number,表示增加了一个叫number的新列,这个列在当前FROM的数据表中并不存在,我们创造了这个列。我们还可以用SQL创造一个表。
(150)ORDER BY,排序,费时但是值得,在这里不排序,也要调用代码进行排序。和DISTINCT一样,只需要在最外层调用一次;和DISTINCT不同,调用多次数据库会提示错误,因为那实在没有必要。
请看下面这个最简单的SQL语句,看明白了,你的SQL基本就过关了:sql 字符串转数组
Any suggest,write to me :wang.nai.jun@gmail

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。