成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

數據庫 其他數據庫
HQL是Hibernate Query Language(Hibernate 查詢語言)的縮寫,它是一種面向對象的查詢語言,類似于 SQL,但不是去對表和列進行操作,而是面向對象和它們的屬性。

 本文轉載自微信公眾號「活在信息時代」,作者活在信息時代。轉載本文請聯系活在信息時代公眾號。

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

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

一、SQL

毫無疑問,SQL是大部分用過數據庫的程序員最為熟悉的了。SQL 是 Structured Query Language 的縮寫,中文譯為“結構化查詢語言”。SQL 是一種計算機語言,用來存儲、檢索和修改關系型數據庫中存儲的數據。SQL 是關系型數據庫的標準語言,所有的關系型數據庫管理系統(RDBMS),比如 MySQL、Oracle、SQL Server、MS Access、Sybase、Informix、Postgres 等,都將 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 student limit 5。

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

二、HQL

HQL是Hibernate Query Language(Hibernate 查詢語言)的縮寫,它是一種面向對象的查詢語言,類似于 SQL,但不是去對表和列進行操作,而是面向對象和它們的屬性。HQL查詢被 Hibernate 翻譯為傳統的 SQL 查詢從而對數據庫進行操作。

所謂面向對象的查詢語言在使用上更貼近人們對于自然的理解,例如說,我們要查詢一個部門的人員名單,這是一個接近于人們理解的,面向對象的查詢。而實際的人員名單,則可能保存在數據庫里、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的優點而形成的。所以他長得和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=’張三’;

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

四、CQL

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

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

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數據庫cassandra中提供的一種類SQL查詢語言,它的語言和SQL差不多。

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

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

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

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

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

程序員創業

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

2015-09-18 08:47:41

新手程序員

2013-06-03 11:24:45

程序調試Java

2012-06-02 00:50:29

JPA查詢語言JPQL

2012-06-02 00:45:36

JPA查詢語言JPQL

2018-01-17 22:11:54

數字化轉型人工智能互聯網

2013-04-15 10:55:09

程序員

2022-09-04 19:43:05

程序員數據庫

2015-11-06 10:22:56

程序員笑話

2019-07-19 09:21:54

Java開源庫程序員

2015-11-19 09:36:13

前端程序員jQuery

2021-08-19 15:14:29

程序員電子表格Airtable

2012-06-05 02:20:24

JPAJava查詢語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品国产一区二区青青牛奶 | 99精品亚洲国产精品久久不卡 | 在线激情视频 | 国产网站在线 | 逼逼视频| 国产精品日本一区二区不卡视频 | 成人在线精品 | 欧洲亚洲一区二区三区 | 99精品视频在线观看免费播放 | 91av在线看 | 夜夜爽99久久国产综合精品女不卡 | 欧美1区 | 免费精品久久久久久中文字幕 | 久久精品国产a三级三级三级 | 国产视频一二三区 | 黄色毛片视频 | 日本不卡免费新一二三区 | 国产精品成人69xxx免费视频 | 国产中文字幕亚洲 | 国产精品视频一区二区三区 | 亚洲精品成人 | 99久久精品免费看国产四区 | 一区二区三区四区国产 | 天天草天天爱 | 日韩一区二区三区四区五区六区 | 亚洲欧美视频 | 国产欧美精品在线观看 | 欧美日韩一区在线 | 国产一区二区精品在线 | 视频在线一区二区 | 日韩精品在线看 | 精品国产99| 在线观看中文字幕dvd播放 | 91视频国产区 | 一区二区三区亚洲视频 | 国产精品v | 久久久激情视频 | 久久久91精品国产一区二区三区 | 久久国产精品-国产精品 | 人人叉 | 国产乱码精品一品二品 |