关于联合查询
1:
老师.这种是联合查询吗?
可以这样去查询的吗?之前课程有教吗?
我记得之前教的联合查询是:
UNION和UNION ALL的呀
例如:
SELECT * FROM tb1 UNION SELECT * FROM tb2
和
SELECT * FROM tb1 UNION ALL SELECT * FROM tb2
2:
另外,在看课程之后,我也自己尝试自己写代码,我是这样写的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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 ; } } |
我的查询语句是用了内连接
1 | String sql = "SELECT product.*,category.* FROM product JOIN category ON product.cid=category.cid" ; |
然后遍历结果集以及封装数据是这样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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后的字段顺序也要相同。如下所示:
1 | SELECT uid FROM user UNION SELECT uid FROM test |
当两个表结构完全相同时,才可以使用select *
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧