1 .from
1.1鍗曡〃鏌ヨ
from eg.cat as cat.鍏朵腑錛宑at鍙槸涓涓埆鍚嶏紝涓轟簡鐢ㄥ叾浠栧瓙璇彞鐨勬椂鍊欎功鍐欑畝鍗?br>
1.2澶氳〃鏌ヨ
from eg.Cat,eg.Dog
from eg.Cat as cat,eg.Dog as dog
2 join鐩稿叧
(inner) join
left (outer) join
right (outer) join
full join
HQL鍚屾牱瀵筍QL涓殑榪欎簺鐗規ф敮鎸?br>涓嬮潰鎻掓挱涓涓皬璇濋錛屽叧浜庝笂杈圭殑閭d簺鐗規э紝鎴戜竴鐩撮兘娌℃庝箞鐢紝浠婂ぉ鏃㈢劧璇村埌榪欓噷錛屽氨鎯?br>鎶婁笂杈圭殑鍑犱釜鐗規х殑鐢ㄦ硶璇翠竴涓嬶紝涔熺畻瀵硅嚜宸辯殑涓涓ˉ鍏咃細
鍋囪鏈変袱涓〃錛氶儴闂ㄣ佸憳宸ワ紝涓嬮潰鍒椾婦涓浜涙暟鎹細
鍛樺伐(Employee)錛?br>ID Name DepNo
001 Jplateau 01
002 Jony 01
003 Camel 02
閮ㄩ棬(Department)錛?br>ID Name
01 鐮斿彂閮?br>02 钀ラ攢閮?br>
鍦℉ibernate涓垜浠搷綰電殑閮芥槸瀵硅薄錛屾墍浠ユ垜浠搷綰電殑鏄儴闂ㄧ被鍜屽憳宸ョ被
1).(inner) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee join Department as department on employee.DepNo=
department.ID (娉ㄦ剰鍒版潯浠惰鍙ユ垜鐢╫n 娌℃湁鐢╳here)
閭d箞鎵ц緇撴灉鏄粈涔堝憿錛?br>id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 鐮斿彂閮?br>002 Jony 01 鐮斿彂閮?br>
2).left (outer) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee left join Department as department on employee.DepNo=
department.ID
閭d箞鎵ц緇撴灉鍙堣鏄粈涔堝憿錛?br>id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 鐮斿彂閮?br>002 Jony 01 鐮斿彂閮?
003 Camel null null
{灝辨槸璇存鏃舵垜瑕佸凡絎竴涓〃鐨勮褰曞灝戜負鍑嗭紝絎簩涓〃涓病鏈夌浉搴旂邯褰曠殑鏃跺欏~鍏卬ull}
3). right (outer) join
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee right join Department as department on employee.DepNo=
department.ID
閭d箞鎵ц緇撴灉鍙堣鏄粈涔堝憿錛?br>id1 name1 id2 name2
++++++++++++++++++++++++++++++++++++++
001 Jplateau 01 鐮斿彂閮?br>002 Jony 01 鐮斿彂閮?
null null 02 钀ラ攢閮?
{灝辨槸璇存鏃舵垜瑕佸凡絎簩涓〃鐨勮褰曞灝戜負鍑嗭紝絎竴涓〃涓病鏈夌浉搴旂邯褰曠殑鏃跺欏~鍏卬ull}
3 澶у皬鍐欐晱鎰?br>
4銆俿elect璇彞
灝辨槸瑕佺‘瀹氫綘瑕佷粠鏌ヨ涓繑鍥炲摢浜涘璞℃垨鑰呭摢浜涘璞$殑灞炴с傚啓鍑犱釜渚嬪瓙鍚э細
select employee form Employee as employee
select employee form Employee as employee where employee.Name like 'J%'
select employee.Name form Employee as employee where employee.Name like 'J%'
select employee.ID as id1,employee.Name as name1,department.ID as id2,department.Name
as name2 from Employee as employee right join Department as department on employee.DepNo=
department.ID
select elements(employee.Name) from Employee as employee
錛堜笉鏄庣櫧elements鍒板簳鏄仛浠涔堢敤鐨勶紵鏈涚粰浜庤鏄庯級
絳夌瓑
5銆傛暟瀛﹀嚱鏁?br>JDO鐩墠濂藉儚榪樹笉鏀寔姝ょ被鐗規с?br>avg(...), sum(...), min(...), max(...)
count(*)
count(...), count(distinct ...), count(all...)
鍏剁敤娉曞拰SQL鍩烘湰鐩稿悓
select distinct employee.name from Employee as employee
select count(distinct employee.name),count(employee) from Employee as employee
6銆俻olymorphism (鏆傛椂涓嶇煡閬撳浣曡В閲婏紵)
from com.test.Animal as animal
涓嶅厜寰楀埌鎵鏈堿nimal寰楀疄渚嬶紝鑰屼笖鍙互寰楀埌鎵鏈堿nimal鐨勫瓙綾伙紙濡傛灉鎴戜滑瀹氫箟浜嗕竴涓瓙綾籆at錛?br>涓涓瘮杈冩瀬绔殑渚嬪瓙
from java.lang.Object as o
鍙互寰楀埌鎵鏈夋寔涔呯被鐨勫疄渚?br>
7銆倃here璇彞
瀹氫箟鏌ヨ璇彞鐨勬潯浠訛紝涓懼嚑涓緥瀛愬惂錛?br>from Employee as employee where employee.Name='Jplateau'
from Employee as employee where employee.Name like 'J%'
from Employee as employee where employee.Name like '%u'
鍦╳here璇彞涓?#8220;=”涓嶅厜鍙互姣旇緝瀵硅薄鐨勫睘鎬э紝涔熷彲浠ユ瘮杈冨璞★紝濡傦細
select animal from com.test.Animal as animal where animal.name=dog
8銆傝〃杈懼紡
鍦⊿QL璇彞涓ぇ閮ㄥ垎鐨勮〃杈懼紡鍦℉QL涓兘鍙互浣跨敤錛?br>mathematical operators +, -, *, /
binary comparison operators =, >=, <=, <>, !=, like
logical operations and, or, not
string concatenation ||
SQL scalar functions like upper() and lower()
Parentheses ( ) indicate grouping
in, between, is null
JDBC IN parameters ?
named parameters :name, :start_date, :x1 錛堣繖縐嶅簲璇ユ槸鍙︿竴縐??"鐨勫彉閫氳В鍐蟲柟娉曪級
SQL literals 'foo', 69, '1970-01-01 10:00:01.0'
Java public static final constants eg.Color.TABBY
鍏朵粬涓嶅繀瑙i噴浜嗭紝鍦ㄨ繖閲屾垜鍙兂瀵規煡璇腑鐨勫弬鏁伴棶棰樿鏄庝竴涓嬶細
澶у鐭ラ亾鍦⊿QL涓繘琛屼紶閫掑弬鏁拌繘琛屾煡璇㈢殑鏃跺欙紝鎴戜滑閫氬父鐢≒reparedStatement錛屽湪璇彞涓啓涓澶у爢鐨?#8220;錛?#8221;錛?br>鍦╤ql涓篃鍙互鐢ㄨ繖縐嶆柟娉曪紝濡傦細
List mates = sess.find(
"select employee.name from Employee as employee " +
"where employee.Name=? ",
name,
Hibernate.STRING
);
(璇存槑錛氫笂闈㈠埄鐢⊿ession閲岀殑find鏂規硶錛屽湪hibernate鐨刟pi Session涓噸杞戒簡寰堝find鏂規硶錛屽畠鍙互婊¤凍浣犲縐嶅艦寮忕殑鏌ヨ)
涓婅竟鏄竴涓弬鏁扮殑鎯呭艦錛岃繖縐嶆儏鍐典笅绱ф帴鐫寮曞叆鍙傛暟鍜屽畾涔夊弬鏁扮殑綾誨瀷錛屽綋涓哄涓弬鏁幫紝璋冪敤鍙︿竴涓猣ind鏂規硶錛屽畠鐨勫悗涓や釜
鍙傛暟閮芥槸鏁扮粍鐨勫艦寮忋?br>
榪樻湁鍙﹀涓縐嶆柟娉曟潵瑙e喅涓婅竟鐨勯棶棰橈紝JDO涔熸湁榪欐牱鐨勬柟娉曪紝涓嶈繃鍜宧ibernate鐨勮〃鐜板艦寮忎笂鏈夊樊鍒紝浣嗕粬浠袱涓瀛愰噷鍗存槸
涓鏍風殑錛屽錛?br>Query q = sess.createQuery("select employee.name from Employee as employee where employee.Name=:name");
q.setString("name", "Jplateau");
//褰撴湁澶氫釜鍙傛暟鐨勬椂鍊欏湪姝ら愪竴瀹氫箟
Iterator employees = q.iterate();
9銆俹rder 璇彞
鍜宻ql璇彞娌′粈涔堝樊鍒紝濡傦細
select employee.name from Employee as employee where employee.Name like 'J%' order by employee.ID desc (鎴栬卆sc)
10銆俫roup by 璇彞
鍚屾牱鍜宻ql璇彞娌′粈涔堝樊鍒紝濡傦細
select employee.name,employee.DepNo from Employee as employee group by employee.DepNo
select foo.id, avg( elements(foo.names) ), max( indices(foo.names) ) from eg.Foo foo group by foo.id
{Note: You may use the elements and indices constructs inside a select clause, even on databases with no subselects.}
璋佸府鎴戣В閲婁竴涓嬩笂杈逛袱鍙ワ紝璋㈣繃錛?br>
11銆傚瓙鏌ヨ
hibernate鍚屾牱鏀寔瀛愭煡璇紝鍐欏嚑涓緥瀛愶細
from eg.Cat as fatcat where fatcat.weight > ( select avg(cat.weight) from eg.DomesticCat cat )