\¡±¡£
5.8¡¢NULL
NULL²Ù×÷·ûÓÃÀ´ÅжÏÊôÐÔÊÇ·ñÊÇnullÖµ£¬ÈçÏÂ
ÅжÏÊôÐÔÊÇnull£¬Ê¹Óá°ISNULL¡±¹Ø¼ü×Ö£¬ÈçÏÂ
SELECT c FROM Customer c WHERE c.address IS NULL
ÅжÏÊôÐÔ²»Îªnull£¬Ê¹Óá°IS NOTNULL¡±¹Ø¼ü×Ö£¬ÈçÏÂ
SELECT c FROM Customer c WHERE c.address IS NULL
NULL²Ù×÷·ûÒ²¿ÉÒÔÓÃÔÚ²ÎÊý²éѯÖУ¬ÓÃÓÚÅжÏÊäÈëµÄ²ÎÊýÊÇ·ñΪnullÖµ£¬ÈçÏÂ
SELECT c FROM Customer c WHERE :zip IS NOT NULLL ANDc.address.zip=:zip
5.9¡¢EMPTY
EMPTY²Ù×÷·ûÓÃÓÚÅжÏʵÌåµÄ¼¯ºÏÀàÊôÐÔÊÇ·ñΪ¿Õ¡£ËüÓëNULL²Ù×÷·û²»Ì«Ïàͬ£¬Ö÷ÒªÊÇÕë¶ÔÊôÐÔÊǼ¯ºÏÀàµÄÅжϡ£
Åжϼ¯ºÏÀàÊôÐÔΪ¿ÕÖµ£¬Ê¹ÓÃIS EMPTY£¬ÈçÏÂ
SELECT c FROM Customer c WHERE c.orders IS EMPTY
×¢Òâ:µ±Ê¹ÓÃÄÚÁ¬½Ó²éѯʱ£¬ÓÉÓÚ´Ëʱ¹ØÁªºóµÄ±íÖÐûÓÐnullÖµ£¬ËùÒÔ¼´Ê¹²éѯµ½¿ÕÖµ£¬²éѯ½á¹ûÖÐÒ²²»»á³öÏÖ£¬ËùÒÔÔÚʹÓÃÄÚÁ¬½Ó²éѯʱעÒⲻҪʹÓÃIS MPTYÀ´ÅжϿÕÖµ£¬ÈçÏÂ
SELECT c FROM Customer c JOIN c.orders o WHERE c.orders ISEMPTY
Åжϼ¯ºÏÀàÊôÐÔ²»ÊÇ¿ÕÖµ£¬Ê¹ÓÃIS NOT EMPTY£¬ÈçÏÂ
SELECT c FROM Customer c WHERE c.orders IS NOT EMPTY
?
5.10¡¢MEMBER OF
MEMBER OF²Ù×÷·ûÓÃÓÚÅжÏÒ»¸öʵÌåÊÇ·ñ°üº¬ÔÚ¼¯ºÏÀà¶ÔÏóÖУ¨MEMBEROF ǰ¿ÉÒÔÌí¼ÓNOT£©£¬ÈçÏÂ
//²éѯ¶©µ¥ºÅΪ1µÄ¿Í»§ÊµÌå
SELECT c FROM Customer c WHERE :order MEMBER OF c.orders
Query query=entityManager.createQuery(jpql);
Order o=entityManager.find(Order.class,1);
query.setParameter(¡°order¡±,o);
5.11¡¢º¯Êý±í´ïʽ
JPQLÖÐÒ²¶¨ÒåÁËһЩ³£Óõĺ¯Êý£¬ÕâЩº¯Êý¿ÉÒÔÕë¶Ô×Ö·ûÐÍ¡¢ÊýÖµÐͺÍÈÕÆÚÐÍÊýֵʹÓá£
×Ö·û´®º¯Êý
×Ö·û´®º¯Êýͨ³£¿ÉÔÚ²éѯʱʹÓã¬ÀýÈç²éѯ¹Ë¿ÍÐÕÃûµÄ³¤¶È´óÓÚ10µÄJPQLÓï¾äÈçÏÂ:
SELECT c FROM Customer c WHERE LENGTH(c.name)>10
JPQL ÖÐÌṩµÄ×Ö·û´®º¯ÊýÖ÷ÒªÓÐ:
3) CONCAT(str1,str2):·µ»ØÁ¬½ÓÁ½¸ö×Ö·û´®µÄÖµ
4) SUBSTRING(str,start,len):·µ»Ø×Ö·û´®µÄÒ»¶Î£¬startΪ×Ö·û´®µÄ¿ªÊ¼Ë÷Òý루µÚÒ»¸ö×Ö·ûλÖÃΪ1£©£¬lenΪ½ØÈ¡µÄ³¤¶È£»
5) TRIM(str)£ºÈ¥µô×Ö·û´®µÄÊ×βµÄ¿Õ¸ñ£»
6) LENGTH(str):·µ»Ø×Ö·û´®µÄ³¤¶È£»
ÊýÖµº¯Êý
ÊýÖµº¯Êýͨ³£Ò²¿ÉÒÔÔÚ²éѯʱʹÓã¬ÈçÏ£º
SELECT c FROM Customer c WHERE ABS(c.asset)>20
JPQL ÖÐÌṩµÄÖ÷ÒªÊýÖµº¯ÊýÓÐ:
l ABS(num)£º·µ»ØÊýµÄ¾ø¶ÔÖµ£»
l SQRT(num)£º·µ»ØÊýµÄƽ·½£»
l MOD(int,int)£ºÈ¡Ä££»
l SIZE:·µ»Ø¼¯ºÏÀàµÄ×ÜÊý;
?
ÈÕÆÚº¯Êý
JPAÌṩÁËÈýÖÖ»ñȡϵͳµ±Ç°Ê±¼äµÄ¸ñʽµÄ·½·¨:
l CURRENT_DATE
l CURRENT_TIME
l CURRENT_TIMESTAMP
5.12¡¢×Ó²éѯ
µ±Ò»¸ö²éѯÌõ¼þÒÀÀµÓÚÁíÒ»¸ö²éѯ½á¹ûʱ£¬¾ÍÐèҪʹÓÃ×Ó²éѯ£¨Ç¶Ìײéѯ£©£¬ÈçÏÂ
SELECT c FROM Customer c WHERE c.age > (SELECT AVG(c.age)FROM Customer c)
EXISTS±í´ïʽ
EXISTS±í´ïʽÓÃÓÚÅжÏ×Ó²éѯµÄ½á¹û£¬Èç¹û×Ó²éѯµÄ½á¹ûÓÐÒ»¸ö»ò¶à¸ö£¬Ôò·µ»Øtrue£»Èç¹û×Ó²éѯûÓзµ»ØÈκνá¹û£¬Ôò·µ»Øfalse¡£Óï·¨ÈçÏÂ:
[NOT] EXISTS (×Ó²éѯ±í´ïʽ)
Èç²éѯϵͳµ±Ç°ÈÕÆÚ֮ǰµÄ¶©µ¥ËùÊôµÄ¿Í»§£¬ÈçÏÂ
SELECT c FROM Customer c WHERE EXISTS
(SELECT o FROM c.orders o WHERE o.createTime
Ò²¿ÉÒÔÔÚEXISTS¹Ø¼ü×Öǰ¼ÓÉÏ¡°NOT¡±±íʾ²»´æÔÚ£¬²éѯ½á¹ûÕýºÃÓëEXISTSÏà·´¡£
ALLºÍANY±í´ïʽ
µ±×Ó²éѯµÄ·µ»Ø½á¹ûÓжà¸ö£¬¶¥²ã²éѯµÄÌõ¼þʹÓÃ=£¬<£¬<=£¬>,>=£¬<>ÕâЩ±È½ÏÀ´Âú×ãÌõ¼þ£¬¾ÍÐèҪʹÓÃALL¡¢ANYºÍSOME£¨ANY¡¢SOMEÓëNOT ALLµÈ¼Û£¬Ö»Òª´æÔÚÒ»¸ö¼´¿É£©±í´ïʽ£¬»ù±¾Óï¾äÈëÈçÏÂ:
{ALL|ANY|SOME}(×Ó²éѯ)
SELECT o FROM Order o WHERE 50 < ANY (SELECT l.quantityFROM o.lineItems l) //²éѯ¶©µ¥Ã÷ϸÖдæÔÚ50¸öÒÔÉϵĶ©µ¥
5.13¡¢·Ö×é
·Ö×é²éѯÊÇJPQLÖкÜÖØÒªµÄ²éѯ£¬Ëü¿ÉÒÔ°´ÕÕÖ¸¶¨µÄÊôÐÔ½«Êý¾Ý·Ö×飬ͨ³£ÔÚͳ¼ÆÊý¾ÝʱʹÓá£
·Ö×é²éѯͨ³£Ê¹Óá°GROUPBY¡±±í´ïʽºÍ¡°HAVING¡±±í´ïʽ£¬·Ö×é²éѯµÄ»ù±¾Óï·¨ÈçÏÂ:
GROUP BY <·Ö×é×Ó¾ä>£¨HAVING
£©
¡°GROUPBY¡±¹Ø¼ü×ÖºóÖ¸Ã÷·Ö×éµÄÊôÐÔ£¬¡°HAVING¡±Ôò¿ÉÒÔ¶Ô·Ö×éºóµÄÊý¾Ý½øÐйýÂË£¬×÷ÓÃÏ൱ÓÚWHERE×Ӿ䣬ֻÄÜÓÃÔÚ·Ö×é²éѯÖУ¬ÈçÏÂ
SELECT c FROM Customer c GROUP BY c.asset HAVING AVG(c.asset)>1000
?
5.14¡¢ÅÅÐò
ORDER BY×Ó¾ä¿ÉÒÔ¶Ô²éѯ½á¹û½øÐÐÅÅÐò£¬Óï·¨ÈçÏÂ:
ORDER BY ÅÅÐòÊôÐÔ[ASC |DESC]{, ÅÅÐòÊôÐÔ[ASC |DESC]}*
ÆäÖС°ORDERBY¡±¹Ø¼ü×ÖºóÖ¸¶¨ÅÅÐòµÄÊôÐÔ£¬¶à¸öÊôÐÔÅÅÐòÓ÷ֺŷָÈçÏ£º
SELECT c FROM Customer c ORDER BY c.id ASC,c.name DESC
×¢Ò⣺ÔÚ¶¯Ì¬×é×°JPQLÖ¸¶¨¶à¸öÅÅÐòÓòʱ£¬²»ÄÜʹÓÃHashMap,¶øÒªÊ¹ÓÃLinkedHashMap¡£