sql查询语句的基本格式(查询语言的那些事儿:程序员应该知道的SQL、HQL、JPQL和CQL)

对于很多经常与数据库打交道的程序员们来说,SQL自然是轻车熟路了,但是很多程序员经常在一些源代码里看到一些长得很像SQL,却感觉哪里有些不对的类似语言,但因为没有系统的学习过,所以不知道他们叫什么。

有些人可能知道他们有些是JPQL有些是HQL,但是却不知道他们各自有什么区别。今天我们就来看看QL家族的这些成员。

一、SQL

毫无疑问,SQL是大部分用过数据库的程序员最为熟悉的了。SQL Structured Query Language 的缩写,中文译为“结构化查询语言”。SQL 是一种计算机语言,用来存储、检索和修改关系型数据库中存储的数据。SQL 是关系型数据库的标准语言,所有的关系型数据库管理系统【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目RDBMS),比如 MySQLOracleSQL ServerMS AccessSybaseInformixPostgres 等,都将 SQL 作为其标准处理语言。虽然现在主流的数据库SQL语言大体上都是遵循SQL92标准的,但是在具体实现上却有些细微的差别。例如:判断一个值如果是空的话就返回另一个值,否则返回其自身的函数,在Mysql里是isnull(a, b),而在Oracle里则是nvl(a,b)。而查询student表里前n行的语句,在SQL Server里用

select top n name from student

而在Mysql里使用select name from stu【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目dent limit 5

正因为这些细微的实现不一样,所以这些主流数据库用的SQL在名字上也不太一样。例如SQL Server里叫T-SQL,而Oracle叫PL/SQL。

二、HQL

HQL是Hibernate Query Language(Hibernate 查询语言)的缩写,它是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。HQL查询被 Hibernate 翻译为传统的 SQL 查询从而对数据库进行操作。

所谓面向对象的查询语言在使用上更贴近人们对于自然的理解,例如说,我们要查询一个部门的人员名单,这是一个接近于人们理解的,面向对象的查询。而实际的【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目人员名单,则可能保存在数据库里、Excel表里、Word里,这些实现的具体细节为面向对象的查询所忽略。无论是最终从哪里查询出来的(转换成什么样的SQL语句),最终得到的就是人员名单这个对象的信息。

一个典型的HQL如下:

From Student s;

其对应的SQL则为

Select * from student;

三、JPQL

JPA(Java Persistence query language, Java持久化查询语言)是在EJB3出现的时候同时出现的面向对象查询语言,其标准为JSR 220。他是在面向EJB2.0的JavaBeans的查询语言EJB QL基础上,吸收了HQL的优点而形成的。所以他【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目长得和HQL非常的像。

这种面向对象的查询语言与SQL语句最大的区别在对于多对一或一对多的查询之中。例如说订单类Order里有一个类型为Customer的属性customer。在数据库里体现为订单表order里有一个字段用户ID为指向用户表customer的一个外键。那么在JPQL里,查询张三订单的语句如下:

Select o from Order o where o.customer.name=’张三’;

而对应的SQL语句则为

Select order.* from order, customer where order.cid = customer.id and customer.name=’张【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目三’;

大家可以看到,JPQL里面最大的特点是其对象之间的关联关系可以通过导航运算符“.”一路点过去,而在SQL里则需要关联表查询。

四、CQL

相比于其它三种QL家族的成员,CQL则有些小众了,甚至命名权的归属都还存在争议。目前来讲,主流的CQL有以下三种。

一种是CQL(Common Query Language,公共查询语言)是OGC为 Catalogue Web Services specification (目录Web服务规范)创建的查询语言,用于地图相关信息的查询,这是一种基于过滤机制的查询语言,写出来类似于这样:

filter=WITHIN(geometry, POLYGON((-80.0【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目 -80.0,-80.0 50,80.0 50,-80.0 -80.0))) AND id<>371

第二种是CQL(Cassandra Query Language),是key-value数据库cassandra中提供的一种类SQL查询语言,它的语言和SQL差不多。

第三种是CQL(Cypher Query Language),是图数据库提供的数据查询语言,是一种声明性模式匹配语言,写出来大致长这样

MATCH (emp:Employee)

RETURN emp.empid,emp.name,emp.salary,emp.deptno

以上只是目前比较常见的几种查询语言,随着技术的发展,未来没准还会有【我爱线报网】52线报网-专注分享活动首码线报优惠券零投网赚项目更多的QL家族成员出现呢。

喜欢本文的话,欢迎关注活在信息时代哦:)

推荐阅读

给力项目线报网会员可免费下载 加入会员
友情提醒: 请尽量登录购买,防止付款了不发货!
QQ交流群:226333560 站长微信:qgzmt2
温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

给TA打赏
共{{data.count}}人
人已打赏
行业资讯

《末世降临》(末世降临,开局获得魅魔#番茄小说)

2024-5-26 21:59:43

行业资讯

通用性用英语怎么说(业界:通用性泛化性显著增强 大模型迎来新发展浪潮)

2024-5-26 22:20:30

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索