JPQL 语法
来源:互联网 发布:实现下载网络流 编辑:程序博客网 时间:2024/05/09 05:20
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
查询所有有team的player
也可以写成如下:
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)
ALL和ANY配合=<>=>使用
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)
- JPQL 语法
- JPQL语法总结
- JPQL语法总结
- JPQL语法总结
- JPQL语法总结
- JAP JPQL相关语法
- JPQL
- JPQL
- JPQL
- JPQL
- JPQL
- JPQL
- JPQL
- JPQL
- JPQL
- JPQL
- JPQL
- JPQL
- js常用操作
- WM_PAINT消息
- javascript 之 prototype
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法
- [转]java中byte转换int时为何与0xff进行与运算
- JPQL 语法
- IO之RandomAccessFile类
- 通过 @Autowired的使用来消除 set ,get方法 ---- Spring · JPA ·hibernate 的使用方法
- openssl自签署证书
- 解決 ASP.NET 中 System.OutOfMemoryException 的問題
- 利用SQL Server2005数据库邮件
- /MD、/MT、/LD(使用运行时库)
- 读《软件随想录》有感
- 如何修改mysql的root密码