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

公司主營業(yè)務(wù):網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出萊山免費(fèi)做網(wǎng)站回饋大家。
對于很多經(jīng)常與數(shù)據(jù)庫打交道的程序員們來說,SQL自然是輕車熟路了,但是很多程序員經(jīng)常在一些源代碼里看到一些長得很像SQL,卻感覺哪里有些不對的類似語言,但因?yàn)闆]有系統(tǒng)的學(xué)習(xí)過,所以不知道他們叫什么。
有些人可能知道他們有些是JPQL有些是HQL,但是卻不知道他們各自有什么區(qū)別。今天我們就來看看QL家族的這些成員。
一、SQL
毫無疑問,SQL是大部分用過數(shù)據(jù)庫的程序員最為熟悉的了。SQL 是 Structured Query Language 的縮寫,中文譯為“結(jié)構(gòu)化查詢語言”。SQL 是一種計(jì)算機(jī)語言,用來存儲、檢索和修改關(guān)系型數(shù)據(jù)庫中存儲的數(shù)據(jù)。SQL 是關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,所有的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),比如 MySQL、Oracle、SQL Server、MS Access、Sybase、Informix、Postgres 等,都將 SQL 作為其標(biāo)準(zhǔn)處理語言。雖然現(xiàn)在主流的數(shù)據(jù)庫SQL語言大體上都是遵循SQL92標(biāo)準(zhǔn)的,但是在具體實(shí)現(xiàn)上卻有些細(xì)微的差別。例如:判斷一個(gè)值如果是空的話就返回另一個(gè)值,否則返回其自身的函數(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。
正因?yàn)檫@些細(xì)微的實(shí)現(xiàn)不一樣,所以這些主流數(shù)據(jù)庫用的SQL在名字上也不太一樣。例如SQL Server里叫T-SQL,而Oracle叫PL/SQL。
二、HQL
HQL是Hibernate Query Language(Hibernate 查詢語言)的縮寫,它是一種面向?qū)ο蟮牟樵冋Z言,類似于 SQL,但不是去對表和列進(jìn)行操作,而是面向?qū)ο蠛退鼈兊膶傩?。HQL查詢被 Hibernate 翻譯為傳統(tǒng)的 SQL 查詢從而對數(shù)據(jù)庫進(jìn)行操作。
所謂面向?qū)ο蟮牟樵冋Z言在使用上更貼近人們對于自然的理解,例如說,我們要查詢一個(gè)部門的人員名單,這是一個(gè)接近于人們理解的,面向?qū)ο蟮牟樵?。而?shí)際的人員名單,則可能保存在數(shù)據(jù)庫里、Excel表里、Word里,這些實(shí)現(xiàn)的具體細(xì)節(jié)為面向?qū)ο蟮牟樵兯雎?。無論是最終從哪里查詢出來的(轉(zhuǎn)換成什么樣的SQL語句),最終得到的就是人員名單這個(gè)對象的信息。
一個(gè)典型的HQL如下:
- From Student s;
- 其對應(yīng)的SQL則為
- Select * from student;
三、JPQL
JPA(Java Persistence query language, Java持久化查詢語言)是在EJB3出現(xiàn)的時(shí)候同時(shí)出現(xiàn)的面向?qū)ο蟛樵冋Z言,其標(biāo)準(zhǔn)為JSR 220。他是在面向EJB2.0的JavaBeans的查詢語言EJB QL基礎(chǔ)上,吸收了HQL的優(yōu)點(diǎn)而形成的。所以他長得和HQL非常的像。
這種面向?qū)ο蟮牟樵冋Z言與SQL語句最大的區(qū)別在對于多對一或一對多的查詢之中。例如說訂單類Order里有一個(gè)類型為Customer的屬性customer。在數(shù)據(jù)庫里體現(xiàn)為訂單表order里有一個(gè)字段用戶ID為指向用戶表customer的一個(gè)外鍵。那么在JPQL里,查詢張三訂單的語句如下:
Select o from Order o where o.customer.name=’張三’;
而對應(yīng)的SQL語句則為
Select order.* from order, customer where order.cid = customer.id and customer.name=’張三’;
大家可以看到,JPQL里面最大的特點(diǎn)是其對象之間的關(guān)聯(lián)關(guān)系可以通過導(dǎo)航運(yùn)算符“.”一路點(diǎn)過去,而在SQL里則需要關(guān)聯(lián)表查詢。
四、CQL
相比于其它三種QL家族的成員,CQL則有些小眾了,甚至命名權(quán)的歸屬都還存在爭議。目前來講,主流的CQL有以下三種。
一種是CQL(Common Query Language,公共查詢語言)是OGC為 Catalogue Web Services specification (目錄Web服務(wù)規(guī)范)創(chuàng)建的查詢語言,用于地圖相關(guān)信息的查詢,這是一種基于過濾機(jī)制的查詢語言,寫出來類似于這樣:
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ā)展,未來沒準(zhǔn)還會有更多的QL家族成員出現(xiàn)呢。
當(dāng)前標(biāo)題:查詢語言的那些事兒:程序員應(yīng)該知道的SQL、HQL、JPQL和CQL
標(biāo)題來源:http://m.fisionsoft.com.cn/article/dhdegod.html


咨詢
建站咨詢
