关于联合查询
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);
}数据库中数据是这样

执行之后是这样的


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

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


使用UNION语句,uid列名相同,类型相同,如果选择多个字段查询,select后的字段顺序也要相同。如下所示:
SELECT uid FROM user UNION SELECT uid FROM test
当两个表结构完全相同时,才可以使用select *
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星