多表查询

笛卡儿积

  多表查询,书写方式,表名之间用,号隔开。这样多张表里面的数据全部查出来,查出来的方式就是笛卡尔及的方式(完全组合)

 

这样查出来的数据,有很多是无效的数据.

内连接

可以通过设计数据库的时候,表与表之间的属性关联查询,过滤出有效的信息,

显式内连接

SELECT * FROM employee e1,enterprise e2 WHERE e1.enterpriseId = e2.id

 

 

内连接就是红色的部分。左右连接就是绿加红 右外连接 就是黄加红

   隐式内连接:

 

隐式内连接和显式内连接没有本质区别

外连接:

以一张表为基础,将这张表的所有数据全部查出来,然后跟另一表有关联,如果关联到则显示该信息,如果没有关联则显示null

左外连接

SELECT * FROM employee e1 LEFT JOIN enterprise e2 ON e1.emploeeId=e2.id;

右外连接

SELECT * FROM employee e1 RIGHT JOIN enterprise e2 ON e1.emploeeId=e2.id;

 

表的别名

  使用表的别名有两种原因:

1. 为了方便

2. 如果有重复的表中进行多表查询,则必须使用别名

 

1. 直接在表的名字后面加空格,然后起新的名字

SELECT * FROM employee e1,enterprise e2 WHERE e1.enterpriseId = e2.id

2. As 与直接取名没有区别 但是看sql语句会比较容易查看

 

SELECT * FROM employee AS e1,enterprise As e2 WHERE e1.enterpriseId = e2.id

 

 

查询总结:

1. oid  通过对象主键查询

2. Hql  推荐使用

3. Criteria 单表查询

4. Sql (更复杂的查询)

5. 对象导航查询

 

 

Hql多表查询

  内连接

String hql="from Employee e inner join e.Enterprise";

 

查出来的结果封装的一条记录中也是一个集合

第一条是Employee职工信息 也包含企业信息

第二条是Enterprise企业信息

 

内容重复了  迫切内连接只返回一个对象

 


String hql="from Employee e inner join fetch e.Enterprise";

 

 

 


from Employee e left join  e.Enterprise

 

右外连接

 

from Employee e right join  e.Enterprise

 

Feach 迫切 加了关键字,最总的结果集封装的就是一个对象,不加就封装成一个集合


  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值