`
1000copy
  • 浏览: 74348 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

古旧的sql应该有点新样子

阅读更多

 

sql曾经让人惊喜。一个初哥刚刚写程序的时候,发现需要连接两张表,并且做些排序之类的工作。在不知道sql的情况下,觉得真的很麻烦:需要自己做循环,装入A和b两张表,

 

循环一个,然后根据键值和另一个表的键值匹配,然后自己做排序。想起来好头痛。我和他说,OK,这是sql可以搞定的。

只要select * from a join b on a.id =b.aid order by c 。就这么简单。别笑他,他觉得兴奋而雀跃。

 

10年过去了,一点点发现sql真的很有改进空间。试着举例。

 

1. 单表查询可以更加简洁。

   当我们需要带条件的查询一个表的时候,需要

    select * from A where b = '' and c = 0 

   难道不可以

    A?b=''&c=0 

   看起来是不是同样的效果,但是清爽的多呢?

 

2. 多表查询可以更简洁。

   当我需要join的时候,比如

   select * from a join b on a.id =b.aid order by c  

   好,我就这样写吧。

   然后当我在其他地方需要a和b的时候,我还是一样的需要

    a join b on a.id =b.aid 

   一个系统,这样的join非常多,于是这个on条件就要到处写。

   可真实情况是:一旦表设计确定,a和b的链接基本上都是用a.id ,b.aid这样的主键和外键来链接的。

   这样在系统中就有大量的重复了。

 

   为什么不一次配置,然后到处使用这样的on条件呢?

 

    比如:

     set a join b on a.id =b.aid 

     select * from a ,b order by c

 

3. sql很笨。

  有时候,我希望来一个select a* from b 把b表的所有a开头的字段都选择出来,可是sql不行。它一定要select ad,ae,af from b 一板一眼的把所有需要的字段写完。

  或者我希望把b表的除了a字段外的其他字段选择出来,比如select [ all field except a] from b 。当然这样也是不行的。

 

可见,sql是冗余的,是不够清爽的。

 

有人说,hi,语法吗?关系不大了。请问为什么很多人喜欢c的语法,而不喜欢pascal的呢?为什么大量的语言都采用了c的语法,而不是pascal,或者该死的cobol呢?程序员总是

 

喜欢更加简洁的。

 

有人说,hi,重复一点有什么关系呢,还不是为了让人更加容易阅读吗?可是让人容易阅读并不非要冗余。重复带来的问题就很麻烦了。重构技术解决的就是冗余问题,sql生出来

 

的年代太早,并不会考虑到重构技术的要求;

 

有人说,hi,sql是标准啊。没有错,标准是够害人的。这些年计算机通用语言竞争激烈,方兴未艾,而sql一家独大也久矣,我们至少应该对新的sql寄予希望。

 

sql太老了,并且经年不变,需要引入新的血液了。

 

我认为htsql就是这样的尝试,它定位于初哥使用,而我的看法是它应该用htsql的这样的语言设计替代掉苍老的sql。

 

看看这个地址,很简单。也许你会喜欢它。

http://htsql.org/doc/tutorial.html

 

3
1
分享到:
评论
4 楼 1000copy 2010-11-19  
zlx19900228 写道
sql的艺术,个人觉得是永无止境的,现在很多代码的实现写了一大堆,到头来发现,其实一句精辟的sql,就可以完全达到效果,数据库是一门永远无法停止脚步研究的东西,非常感谢LZ的分享

sql这么多年来还是有些提升,包括声明+结构化 的组合,基本上无所不能。只是语言特性上对主流语言的借鉴不够。
3 楼 1000copy 2010-11-19  
shiren1118 写道
针对第三点,我觉得你了解的是不是太少了,关联一个元数据的表就可以了,很难吗?

本文讨论的不是sql做不做得到的问题,而是是否应该向着简洁改进。如果按你 的做法不妨写写看,简洁还是丑恶?还是自己试试的好。

方法当然还有很多,比如做一个sql预处理器,不但简洁,而且符合sql标准。我们也按照这样的做法做过。

至于我sql是不是了解的少了点,我并没有什么回复。
2 楼 shiren1118 2010-11-18  
针对第三点,我觉得你了解的是不是太少了,关联一个元数据的表就可以了,很难吗?
1 楼 zlx19900228 2010-11-18  
sql的艺术,个人觉得是永无止境的,现在很多代码的实现写了一大堆,到头来发现,其实一句精辟的sql,就可以完全达到效果,数据库是一门永远无法停止脚步研究的东西,非常感谢LZ的分享

相关推荐

    SQL 语法 SQL 总结 SQL教程

    SQL 基础 SQL 首页 SQL 简介 SQL 语法 SQL select SQL distinct SQL where SQL AND & OR SQL Order By SQL insert SQL update SQL delete SQL 高级 SQL Top SQL Like SQL 通配符 SQL In SQL Between ...

    最新淘宝商品类目数据.sql

    标题中的“最新淘宝商品类目数据.sql”表明这是一个SQL文件,包含了淘宝平台的商品类别数据。在电商领域,商品类目是组织和管理在线销售产品的一种方式,它类似于传统零售店的商品货架,帮助消费者快速找到他们感...

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示

    SQLPrompt for SQLServer2016 智能提示插件 SQL2016 提示 SQLPrompt最新版本 绿色版 SQL Prompt 是一款拥有SQL智能提示功能的SQL Server和VS插件。SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动...

    sqlserver自动生成sql语句工具sqlserver转oracle

    在IT行业中,数据库管理系统是核心组成部分,SQL Server和Oracle分别是微软和甲骨文公司推出的两款广泛应用的关系型数据库系统。在企业级应用中,有时需要在不同的数据库系统间进行数据迁移或兼容性处理,这就涉及到...

    sqljdbc4.jar sqlserver2005 jdbc 新版

    java 连接sqlserver数据库 sqljdbc4.jar sqlserver2005 2008 jdbc sqljdbc

    sql server 导入超大SQL脚本文件

    SQL Server 导入超大 SQL 脚本文件 SQL Server 是一种关系型数据库管理系统,广泛应用于各种行业。然而,在实际应用中,我们经常会遇到导入超大 SQL 脚本文件的问题。本文将介绍如何使用 osql 工具来导入超大 SQL ...

    kettle链接SQL server驱动 sqljdbc

    如果你的开发环境或者Kettle运行环境使用的是JDK 6或7,那么你应该选择sqljdbc4.jar。这个驱动包含了对Java.sql.Connection接口的新特性的支持,比如获取服务器时间戳(getServerTimezoneTimestamp)等。 2. sql...

    SQLPrompt5.3破解

    本人在Windows7 64位+SQL Server 2012环境下测试通过(系统是全新安装) 使用方法: 1,安装SQLPrompt v5.3,这个不多说。 2,安装完毕后,断开网络连接。 3,打开Visual Studio或者SQL Server Management Studio(版本...

    2023年更新的最新版全国五级行政区域数据库表以及sql文件

    五级行政区域包含:一级行政区)省级行政区:省、自治区、直辖...本资源为2023年3月份最新更新的最新版全国五级行政区域数据库表以及sql文件,包含行政区域名称及区域代码,如需原始数据表格或者json版本可联系本人获取。

    DTcms_50_sql_src最新旗舰版带手机

    【DTcms_50_sql_src最新旗舰版带手机】是一个基于.NET框架的高效内容管理系统,专为构建企业网站和移动应用而设计。该系统的核心特性包括强大的数据管理、灵活的模板引擎、以及对移动端的良好支持。 1. **DTcms**:...

    ORACLE_SQLDeveloper使用教程

    - SQL Developer 支持创建新的数据库连接配置。 - 也提供了导出和导入连接配置的功能,便于在不同环境中重用。 3. **编辑表列定义:** - 在 SQL Developer 中,可以通过右键点击表名,选择 “Table Designer” ...

    SQLMonitor oracle跟踪SQL工具

    《SQLMonitor:Oracle数据库SQL跟踪与分析利器》 在IT行业中,数据库的高效管理与优化是至关重要的。针对Oracle数据库,有一款名为SQLMonitor的工具,它专为跟踪和监控SQL语句而设计,帮助开发者和DBA们找出程序...

    SqlServer2005 打开 SqlServer2008 mdf文件

    1. 在 Sql Server 2005 中建立一个新的数据库,例如 jmmaj。 2. 右击 jmmaj 数据库,选择“任务”->“导入数据”,然后选择数据源和目标数据,复制一个或多个表或视图数据,最后完成导入。 二、通过数据库脚本将 ...

    Inside Microsoft SQL Server 2008 T-SQL Programming.pdf

    - **资源管理**:介绍了SQL Server 2008中的一些新特性,如Resource Governor,用以更有效地分配系统资源。 #### 五、安全性和审计 书中还特别强调了安全性的重要性,并提供了以下内容: - **用户权限管理**:...

    sql server客户端连接工具

    尽管SQL Server 2000已过时,学习其客户端工具的使用仍然有价值,因为许多核心概念和T-SQL语法在新版本中仍然适用。 在实际工作中,了解并熟练掌握这些客户端工具能极大地提高数据库管理效率,确保SQL Server实例的...

    2022年最新全国省市区数据库.sql

    2022年最新全国省市区数据表,上下级关联,首字母,拼音,经纬度,地区编码等字段齐全

    Oracle Sql语句转换成Mysql Sql语句

    OracleSqlConvert4MysqlSqlTool.java这个源码工具,根据描述,应该是实现了自动读取Oracle SQL语句,分析其结构,并根据MySQL的语法规则进行转换,然后将转换后的SQL语句保存到指定的目标文件中。这个工具简化了手动...

    SQL Server 到 Oracle 的SQL 语法自动翻译器源码

    兼容,呵呵,听起来有点不可思议。系统已经于3个月前上线,目前运行很稳定。 如果有人用得着或发现什么问题,请加我的QQ:229481711,同时请支持一下本人的报表控件作品(Ac Report): ...

    Toad for SQL Server 6.1,最新版绿色单文件(已注册)

    最近折腾SQL Server的localdb,微软自带的管理工具很庞大,安装复杂。发现Toad的很好用SQL Server数据库管理工具,特意制作成单文件,不用安装,直接管理。已经注册好了,可以直接使用。win7、8(64位)测试可行。 ...

    Microsoft SQL Server Native Client (SQL Native Client)

    应使用 SQL Native Client 来创建新的应用程序或增强需利用 SQL Server 2005 新增功能的现有应用程序。SQL Native Client 的这个可再分发安装程序用于安装运行时所需的客户端组件,以利用 SQL Server 2005 的新增...

Global site tag (gtag.js) - Google Analytics