关于联合查询
来源:4-3 列表显示的DAO的编写
MasonM
2019-05-29 18:15:21
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);
}数据库中数据是这样

执行之后是这样的


老师你觉得我这样做好吗?
2回答
同学你好,
1、同学里就的联合查询是正确的。
下图方式为“笛卡尔积”,与联合查询不一样,在之前的课程中有讲到哦~

2、同学的代码写的很对,是没有问题的哦~
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
吃吃吃鱼的猫
2019-05-29
同学你好
UNION,UNION ALL操作符用于合并两个或多个 SELECT 语句的结果集。
内部的 SELECT 语句后必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
如下图test表,user表所示:


使用UNION语句,uid列名相同,类型相同,如果选择多个字段查询,select后的字段顺序也要相同。如下所示:
SELECT uid FROM user UNION SELECT uid FROM test
当两个表结构完全相同时,才可以使用select *
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
相似问题
回答 1
回答 1