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 閱讀(12709) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 永兴县| 南通市| 湟源县| 四平市| 大同市| 萨嘎县| 绥芬河市| 宾阳县| 周宁县| 神木县| 英超| 吉木萨尔县| 瑞昌市| 杭州市| 建瓯市| 丹阳市| 大宁县| 长治市| 玛沁县| 墨江| 南华县| 吉水县| 台北县| 墨竹工卡县| 梧州市| 塘沽区| 山东省| 额敏县| 溧阳市| 成都市| 乐清市| 孝昌县| 喀什市| 枞阳县| 曲靖市| 阿图什市| 额尔古纳市| 乐业县| 莫力| 西乌珠穆沁旗| 利津县|