从一关联到多的查询和从多关联到一的查询来简单说说关联查询。
实体Team:球队。
实体Player:球员。
球队和球员是一对多的关系。
Team.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | |
Player.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | |
1、从One的一方关联到Many的一方:
查找出球员所属的球队,可以使用以下语句:
1 | |
或者使用以下语句:
1 | |
上面两条语句是等价的,产生的SQL语句如下:
1 2 3 4 5 6 7 8 9 10 | |
从SQL语句中可以看到team inner join 到player。inner join要求右边的表达式必须有返回值。
不能使用以下语句:
1 | |
不能使用t.players.name这样的方式从集合中取值,要使用join或者in才行。
2、从Many的一方关联到One的一方:
查找出某个球队下的所有球员,可以使用以下查询语句:
1 | |
或者使用以下语句:
1 | |
这两条查询语句是等价的,产生的SQL语句如下:(产生了两条SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
从Many关联到One的查询,还可以使用以下的查询语句:
1 | |
这条语句产生的SQL如下:(产生了两条SQL)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
以上从Many到One的关联查询都产生了两条SQL,还可以使用join fetch只产生一条SQL语句。查询语句如下:
1 | |
这条查询语句产生的SQL如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |