自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

查詢語言的那些事兒:程序員應該知道的SQL、HQL、JPQL和CQL

數(shù)據(jù)庫 其他數(shù)據(jù)庫
HQL是Hibernate Query Language(Hibernate 查詢語言)的縮寫,它是一種面向?qū)ο蟮牟樵冋Z言,類似于 SQL,但不是去對表和列進行操作,而是面向?qū)ο蠛退鼈兊膶傩浴?/div>

 本文轉(zhuǎn)載自微信公眾號「活在信息時代」,作者活在信息時代。轉(zhuǎn)載本文請聯(lián)系活在信息時代公眾號。

對于很多經(jīng)常與數(shù)據(jù)庫打交道的程序員們來說,SQL自然是輕車熟路了,但是很多程序員經(jīng)常在一些源代碼里看到一些長得很像SQL,卻感覺哪里有些不對的類似語言,但因為沒有系統(tǒng)的學習過,所以不知道他們叫什么。

有些人可能知道他們有些是JPQL有些是HQL,但是卻不知道他們各自有什么區(qū)別。今天我們就來看看QL家族的這些成員。

一、SQL

毫無疑問,SQL是大部分用過數(shù)據(jù)庫的程序員最為熟悉的了。SQL 是 Structured Query Language 的縮寫,中文譯為“結(jié)構(gòu)化查詢語言”。SQL 是一種計算機語言,用來存儲、檢索和修改關(guān)系型數(shù)據(jù)庫中存儲的數(shù)據(jù)。SQL 是關(guān)系型數(shù)據(jù)庫的標準語言,所有的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),比如 MySQL、Oracle、SQL Server、MS Access、Sybase、Informix、Postgres 等,都將 SQL 作為其標準處理語言。雖然現(xiàn)在主流的數(shù)據(jù)庫SQL語言大體上都是遵循SQL92標準的,但是在具體實現(xiàn)上卻有些細微的差別。例如:判斷一個值如果是空的話就返回另一個值,否則返回其自身的函數(shù),在Mysql里是isnull(a, b),而在Oracle里則是nvl(a,b)。而查詢student表里前n行的語句,在SQL Server里用

select top n name from student,

而在Mysql里使用select name from student limit 5。

正因為這些細微的實現(xiàn)不一樣,所以這些主流數(shù)據(jù)庫用的SQL在名字上也不太一樣。例如SQL Server里叫T-SQL,而Oracle叫PL/SQL。

二、HQL

HQL是Hibernate Query Language(Hibernate 查詢語言)的縮寫,它是一種面向?qū)ο蟮牟樵冋Z言,類似于 SQL,但不是去對表和列進行操作,而是面向?qū)ο蠛退鼈兊膶傩?。HQL查詢被 Hibernate 翻譯為傳統(tǒng)的 SQL 查詢從而對數(shù)據(jù)庫進行操作。

所謂面向?qū)ο蟮牟樵冋Z言在使用上更貼近人們對于自然的理解,例如說,我們要查詢一個部門的人員名單,這是一個接近于人們理解的,面向?qū)ο蟮牟樵?。而實際的人員名單,則可能保存在數(shù)據(jù)庫里、Excel表里、Word里,這些實現(xiàn)的具體細節(jié)為面向?qū)ο蟮牟樵兯雎?。無論是最終從哪里查詢出來的(轉(zhuǎn)換成什么樣的SQL語句),最終得到的就是人員名單這個對象的信息。

一個典型的HQL如下:

  • From Student s;
  • 其對應的SQL則為
  • Select * from student;

三、JPQL

JPA(Java Persistence query language, Java持久化查詢語言)是在EJB3出現(xiàn)的時候同時出現(xiàn)的面向?qū)ο蟛樵冋Z言,其標準為JSR 220。他是在面向EJB2.0的JavaBeans的查詢語言EJB QL基礎上,吸收了HQL的優(yōu)點而形成的。所以他長得和HQL非常的像。

這種面向?qū)ο蟮牟樵冋Z言與SQL語句最大的區(qū)別在對于多對一或一對多的查詢之中。例如說訂單類Order里有一個類型為Customer的屬性customer。在數(shù)據(jù)庫里體現(xiàn)為訂單表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=’張三’;

大家可以看到,JPQL里面最大的特點是其對象之間的關(guān)聯(lián)關(guān)系可以通過導航運算符“.”一路點過去,而在SQL里則需要關(guān)聯(lián)表查詢。

四、CQL

相比于其它三種QL家族的成員,CQL則有些小眾了,甚至命名權(quán)的歸屬都還存在爭議。目前來講,主流的CQL有以下三種。

一種是CQL(Common Query Language,公共查詢語言)是OGC為 Catalogue Web Services specification (目錄Web服務規(guī)范)創(chuàng)建的查詢語言,用于地圖相關(guān)信息的查詢,這是一種基于過濾機制的查詢語言,寫出來類似于這樣:

filter=WITHIN(geometry, POLYGON((-80.0 -80.0,-80.0 50,80.0 50,-80.0 -80.0))) AND id<>371

第二種是CQL(Cassandra Query Language),是key-value數(shù)據(jù)庫cassandra中提供的一種類SQL查詢語言,它的語言和SQL差不多。

第三種是CQL(Cypher Query Language),是圖數(shù)據(jù)庫提供的數(shù)據(jù)查詢語言,是一種聲明性模式匹配語言,寫出來大致長這樣

MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno

以上只是目前比較常見的幾種查詢語言,隨著技術(shù)的發(fā)展,未來沒準還會有更多的QL家族成員出現(xiàn)呢。

責任編輯:武曉燕 來源: 活在信息時代
相關(guān)推薦

2013-04-22 09:15:20

2013-05-24 09:14:39

國企程序員程序員

2022-04-18 11:05:36

開源github代碼庫

2013-07-10 15:17:20

程序員創(chuàng)業(yè)

2011-03-22 10:49:53

2013-12-02 10:10:35

Python工具庫

2012-02-28 10:52:13

2018-03-07 12:57:53

2012-06-02 00:50:29

JPA查詢語言JPQL

2012-06-02 00:45:36

JPA查詢語言JPQL

2013-06-03 11:24:45

程序調(diào)試Java

2015-09-18 08:47:41

新手程序員

2022-09-04 19:43:05

程序員數(shù)據(jù)庫

2012-06-05 02:20:24

JPAJava查詢語言

2015-11-06 10:22:56

程序員笑話

2018-01-17 22:11:54

數(shù)字化轉(zhuǎn)型人工智能互聯(lián)網(wǎng)

2013-04-15 10:55:09

程序員

2019-07-19 09:21:54

Java開源庫程序員

2021-08-19 15:14:29

程序員電子表格Airtable

2015-11-19 09:36:13

前端程序員jQuery
點贊
收藏

51CTO技術(shù)棧公眾號