内外连接

select * from studentcoursesys a inner join dbo.achievementsys b
on a.userid='guozhaofu' and a.courseid=b.courseid and a.userid=b.userid

select * from studentcoursesys a left join dbo.achievementsys b
on a.userid='guozhaofu' and a.courseid=b.courseid and a.userid=b.userid

select * from studentcoursesys a left join dbo.achievementsys b
on a.courseid=b.courseid and a.userid=b.userid
where a.userid='guozhaofu'
--------------------------------------------------------------
分析上面三条语句的区别
在 Hibernate 中,可以使用 HQL 或者 Criteria API 来进行内外连接查询。 1. 内连接查询 内连接查询可以使用 HQL 或者 Criteria API 来实现。以下是 HQL 的示例: ```java String hql = "select c.name, o.orderNumber from Customer c inner join c.orders o where c.name like '%John%'"; Query query = session.createQuery(hql); List<Object[]> results = query.list(); for(Object[] row : results) { String customerName = (String) row[0]; String orderNumber = (String) row[1]; // do something with the result } ``` 以上 HQL 查询使用了 `inner join` 关键字。在这里,我们查询了所有名字包含 "John" 的客户及其所有订单号。 以下是 Criteria API 的示例: ```java CriteriaBuilder builder = session.getCriteriaBuilder(); CriteriaQuery<Object[]> query = builder.createQuery(Object[].class); Root<Customer> customer = query.from(Customer.class); Join<Customer, Order> order = customer.join("orders", JoinType.INNER); query.multiselect(customer.get("name"), order.get("orderNumber")); query.where(builder.like(customer.get("name"), "%John%")); List<Object[]> results = session.createQuery(query).getResultList(); for(Object[] row : results) { String customerName = (String) row[0]; String orderNumber = (String) row[1]; // do something with the result } ``` 以上 Criteria API 查询使用了 `join` 方法,并指定了 `JoinType.INNER` 来进行内连接查询。在这里,我们查询了所有名字包含 "John" 的客户及其所有订单号。 2. 外连接查询 外连接查询同样可以使用 HQL 或者 Criteria API 来实现。以下是 HQL 的示例: ```java String hql = "select c.name, o.orderNumber from Customer c left join c.orders o"; Query query = session.createQuery(hql); List<Object[]> results = query.list(); for(Object[] row : results) { String customerName = (String) row[0]; String orderNumber = (String) row[1]; // do something with the result } ``` 以上 HQL 查询使用了 `left join` 关键字。在这里,我们查询了所有客户及其所有订单号,如果客户没有订单则订单号为 null。 以下是 Criteria API 的示例: ```java CriteriaBuilder builder = session.getCriteriaBuilder(); CriteriaQuery<Object[]> query = builder.createQuery(Object[].class); Root<Customer> customer = query.from(Customer.class); Join<Customer, Order> order = customer.join("orders", JoinType.LEFT); query.multiselect(customer.get("name"), order.get("orderNumber")); List<Object[]> results = session.createQuery(query).getResultList(); for(Object[] row : results) { String customerName = (String) row[0]; String orderNumber = (String) row[1]; // do something with the result } ``` 以上 Criteria API 查询同样使用了 `join` 方法,并指定了 `JoinType.LEFT` 来进行左外连接查询。在这里,我们查询了所有客户及其所有订单号,如果客户没有订单则订单号为 null。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值