select * from order from 是最簡單的查詢子句。from后面可以跟一個(gè)或多個(gè)類名(類名也可以帶有別名)。為了得到Order和PRodUCt的所有實(shí)例,可以使用如下的查詢:
from Order, Product 和類名一樣,別名也可以在from后使用,如下代碼如示:
from Order as o, Product p 當(dāng)查詢很復(fù)雜時(shí),加入別名可以減少語句的長度。我們可以看看如下的SQL語句:
select o.*, p.* from order o, product p where o.order_id = p.order_id 我們可以很輕易看出,上面的查詢是一對(duì)多的關(guān)系。在HQL中相當(dāng)于一個(gè)類中包含多個(gè)其它類的實(shí)例。因此,以上的SQL寫成HQL就是:
from Order as o inner join o.products as product 現(xiàn)在讓我們考慮另外一個(gè)從表中得到指定屬性的情況。這就是最常用的select子句。這在HQL中的工作方式和SQL中一樣。而在HQL中,假如只是想得到類的屬性的話,select語句是最后的選擇。以上的SQL可以使用select子句改成如下的HQL語句:
select product from Order as o inner join o.products as product 以上的HQL語句將返回Order中的所有Products實(shí)例。假如要得到對(duì)象的某一個(gè)屬性,可以將HQL語句寫成如下的形式:
select product.name from Order as o inner join o.products as product 假如要得到多個(gè)對(duì)象的屬性,可以將HQL語句寫成如下形式:
select o.id, product.name from Order as o inner join o.products as product 接下來,我們將進(jìn)入下一個(gè)議題。假設(shè)我們需要根據(jù)某些條件得到數(shù)據(jù)。那么以上所述的HQL語句將無法滿足需求。為了達(dá)到這一目的,我們就要用到下面將要討論的約束子句。 約束
select * from orders where id = ‘1234’ 這條查詢語句返回了id等于1234的所有的字段。和這條SQL對(duì)等的是下面的HQL語句:
select o from Order o where o.id=’1234’ 從以上兩條語句可以看出,它們的where子句非常相似。而它們唯一的不同是SQL操作的是記錄,而HQL操作的是對(duì)象。在HQL中,除了where子句可以過濾數(shù)據(jù)外,having子句也可以做到這一點(diǎn)(關(guān)于having子句的具體內(nèi)容我將在分組部分討論)。投影和約束是兩個(gè)基本的操作,這兩個(gè)操作再加上聚合函數(shù)的話,那HQL將變得更加強(qiáng)大。下面我們就來討論什么是聚合。