calmJava

          StillWaterRunsDeep
          隨筆 - 3, 文章 - 11, 評論 - 0, 引用 - 0
          數據加載中……

          2011年4月1日

          JPQL語法總結

          JPQL語法總結

          JPQL主要用于JPA查詢數據,和SQL語句的語法大同小異;

          最基本的查詢:

          SELECT p

          FROM Player p

          查詢出所有的player,包括其子類,也可以寫成這樣

          From Player as p

          去除重復的元素

          SELECT DISTINCT

           p

          FROM Player p

          WHERE p.position = ?1

          關鍵字DISTINCT去除了重復的元素,并且接受參數設置條件過濾

          結合查詢關聯

          SELECT DISTINCT p

          FROM Player p, IN(p.teams) t

          查詢所有有teamplayer

          也可以寫成如下:

          SELECT DISTINCT p

          FROM Player p JOIN p.teams t

          或者:

          SELECT DISTINCT p

          FROM Player p

          WHERE p.team IS NOT EMPTY

          關聯關系的查詢過濾

          SELECT t

           FROM Team t JOIN t.league l

           WHERE l.sport = ’soccer’ OR l.sport =’football’

          查詢所有league sports屬性的team對象

          SELECT DISTINCT p

          FROM Player p, IN (p.teams) t

          WHERE t.league.sport = :sport

          其他的查詢表達式

          LIKE

          SELECT p

           FROM Player p

           WHERE p.name LIKE ’Mich%’

          IS NULL

          SELECT t

           FROM Team t

           WHERE t.league IS NULL

          IS EMPTY

          SELECT p

          FROM Player p

          WHERE p.teams IS EMPTY

          主要用于判斷關系實體一對多集合

          BETWEEN

          SELECT DISTINCT p

          FROM Player p

          WHERE p.salary BETWEEN :lowerSalary AND :higherSalary

          等價于:

          p.salary >= :lowerSalary AND p.salary <= :higherSalary

          在判斷日期范圍的時候尤其有用;

          復合條件:

          SELECT DISTINCT p1

          FROM Player p1, Player p2

          WHERE p1.salary > p2.salary AND p2.name = :name

          查找薪水比指定姓名的員工更高的員工

          IN

          o.country IN (’UK’, ’US’, ’France’)

          同時你也可以在In語句中設置參數:

          o.country IN (’UK’, ’US’, ’France’, :country)

          子查詢:

          SELECT c

          FROM Customer c

          WHERE (SELECT COUNT(o) FROM c.orders o) > 10

          EXISTS子查詢:

          SELECT DISTINCT emp

          FROM Employee emp

          WHERE EXISTS (

              SELECT spouseEmp

              FROM Employee spouseEmp

          WHERE spouseEmp = emp.spouse)

          ALLANY配合=<>=>使用

          SELECT emp

          FROM Employee emp

          WHERE emp.salary > ALL (

              SELECT m.salary

              FROM Manager m

              WHERE m.department = emp.department)

          其他函數:

          CONCAT(String, String)

          String

          LENGTH(String)

          int

          LOCATE(String, String [, start])

          int

          SUBSTRING(String, start, length)

          String

          TRIM([[LEADING|TRAILING|BOTH] char) FROM] (String)

          String

          LOWER(String)

          String

          UPPER(String)

          String

          算法函數:

          Function Syntax

          Return Type

          ABS(number)

          int, float, or double

          MOD(int, int)

          int

          SQRT(double)

          double

          SIZE(Collection)

          int

          返回參數:

          1) 實體對象

          SELECT t

          FROM Player p, IN (p.teams) t

          2) Objecth或者Object[]

          SELECT c.name, c.country.name

           FROM customer c

           WHERE c.lastname = ’Coss’ AND c.firstname = ’Roxane’

          返回一個Object[] list,[0]name[1]country name

          Select語句的聚合函數:

          AVG

          Double

          Returns the mean average of the fields.

          COUNT

          Long

          Returns the total number of results.

          MAX

          the type of the field

          Returns the highest value in the result set.

          MIN

          the type of the field

          Returns the lowest value in the result set.

          SUM

          Long (for integral fields)Double (for floating point fields)BigInteger (for BigInteger fields)BigDecimal (for BigDecimal fields)

          Returns the sum of all the values in the result set.

          如:

          SELECT COUNT(l.price)

          FROM Order o JOIN o.lineItems l JOIN o.customer c

          WHERE c.lastname = ’Incandenza’ AND c.firstname = ’Hal’

          構造語句:

          SELECT NEW com.xyz.CustomerDetail(c.name, c.country.name)

           FROM customer c

          WHERE c.lastname = ’Coss’ AND c.firstname = ’Roxane’

          能夠利用查出的數據直接構造出對象

          Order By

          SELECT p.product_name

          FROM Order o, IN(o.lineItems) l JOIN o.customer c

          WHERE c.lastname = ’Faehmel’ AND c.firstname = ’Robert’

          ORDER BY o.quantity

          GROUP BY

          SELECT c.country, COUNT(c)

           FROM Customer c GROUP BY c.country

          Having

          SELECT c.status, AVG(o.totalPrice)

           FROM Order o JOIN o.customer c

          GROUP BY c.status HAVING c.status IN (1, 2, 3)

          posted @ 2011-04-01 11:06 calmJava 閱讀(12710) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 双江| 甘谷县| 安远县| 永康市| 竹溪县| 尚义县| 资源县| 长海县| 广水市| 商南县| 都安| 杭锦旗| 大悟县| 册亨县| 遵义县| 昌都县| 长顺县| 卢氏县| 昌邑市| 榆树市| 镇康县| 汝州市| 启东市| 合阳县| 安阳县| 中卫市| 贵定县| 屏南县| 大荔县| 杨浦区| 巫溪县| 射阳县| 醴陵市| 府谷县| 承德县| 武宁县| 顺昌县| 西林县| 曲松县| 镇巴县| 仁怀市|