关于联合查询
1:
老师.这种是联合查询吗?
可以这样去查询的吗?之前课程有教吗?
我记得之前教的联合查询是:
UNION和UNION ALL的呀
例如:
SELECT * FROM tb1 UNION SELECT * FROM tb2
和
SELECT * FROM tb1 UNION ALL SELECT * FROM tb2
2:
另外,在看课程之后,我也自己尝试自己写代码,我是这样写的
package com.mason.dao.impl; import com.mason.dao.ProductDao; import com.mason.domain.Category; import com.mason.domain.Product; import com.mason.utils.JDBCUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class ProductDaoImpl implements ProductDao { @Override public List<Product> findAll() { System.out.println("ProductDao的findAll方法"); Connection conn = null; ResultSet rs = null; PreparedStatement pstmt = null; List<Product> list = null; try { //获得连接 conn = JDBCUtils.getConnection(); //编写SQL String sql = "SELECT product.*,category.* FROM product JOIN category ON product.cid=category.cid"; //预编译SQL pstmt = conn.prepareStatement(sql); //执行SQL rs = pstmt.executeQuery(); //遍历结果集 list = new ArrayList(); while (rs.next()) { Product product = new Product(); product.setPid(rs.getInt("pid")); product.setPname(rs.getString("pname")); product.setAuthor(rs.getString("author")); product.setPrice(rs.getDouble("price")); product.setDescription(rs.getString("filename")); product.setPath(rs.getString("path")); Category category = new Category(); category.setCid(rs.getInt("cid")); category.setCname(rs.getString("cname")); category.setCdesc(rs.getString("cdesc")); product.setCategory(category); list.add(product); } for (Product p : list) { System.out.println("商品ID:"+p.getPid()+" 商品名:"+p.getPname()+" 商品分类名称:"+p.getCategory().getCname()); } return list; } catch (Exception e) { e.printStackTrace(); } finally { //释放资源 JDBCUtils.release(rs, pstmt, conn); } return null; } }
我的查询语句是用了内连接
String sql = "SELECT product.*,category.* FROM product JOIN category ON product.cid=category.cid";
然后遍历结果集以及封装数据是这样
while (rs.next()) { Product product = new Product(); product.setPid(rs.getInt("pid")); product.setPname(rs.getString("pname")); product.setAuthor(rs.getString("author")); product.setPrice(rs.getDouble("price")); product.setDescription(rs.getString("filename")); product.setPath(rs.getString("path")); Category category = new Category(); category.setCid(rs.getInt("cid")); category.setCname(rs.getString("cname")); category.setCdesc(rs.getString("cdesc")); product.setCategory(category); list.add(product); }
数据库中数据是这样
执行之后是这样的
老师你觉得我这样做好吗?
30
收起
正在回答
2回答
同学你好,
1、同学里就的联合查询是正确的。
下图方式为“笛卡尔积”,与联合查询不一样,在之前的课程中有讲到哦~
2、同学的代码写的很对,是没有问题的哦~
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
吃吃吃鱼的猫
2019-05-29 19:17:29
同学你好
UNION,UNION ALL操作符用于合并两个或多个 SELECT 语句的结果集。
内部的 SELECT 语句后必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
如下图test表,user表所示:
使用UNION语句,uid列名相同,类型相同,如果选择多个字段查询,select后的字段顺序也要相同。如下所示:
SELECT uid FROM user UNION SELECT uid FROM test
当两个表结构完全相同时,才可以使用select *
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星