查询设计之查询条件对结果的影响

在sql使用中,最常用的就是查询。 在实践过程中,丰富的查询场景也使得查询sql有多种写法,不同的写法会带来不同的效果
以下,就查询条件对结果的影响。


一、数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


二、需求

把查询 type = 'A’的 user 以及 type = ‘A’ 的 department、person 关联的user 查出来


三、设计

1、随心所欲,互不影响

union查询,把每个表符合条件的数据单独查询,最后用union进行拼接
使用背景:一般是返回结果对应的表没有关联关系,不能组合或者关联查询
设计思路:每个表的条件单独写,相互不影响,逻辑清晰
注意问题:union all 性能高,但是会重复; 所有数据块的返回字段必须一致

SELECT
	u.id as user_id,u.name as user_name,u.type as user_type,
	p.id as person_id,p.name as person_name,p.type as person_type,
	d.id as department_id,d.name as department_name,d.type as department_type
from user u left join person p on u.personid = p.id 
left JOIN department d on u.departmentid = d.id 
WHERE u.type = 'A'
union 
SELECT
	u.id as user_id,u.name as user_name,u.type as user_type,
	p.id as person_id,p.name as person_name,p.type as person_type,
	d.id as department_id,d.name as department_name,d.type as department_type
from user u left join person p on u.personid = p.id 
left JOIN department d on u.departmentid = d.id 
WHERE p.type = 'A'
union 
SELECT
	u.id as user_id,u.name as user_name,u.type as user_type,
	p.id as person_id,p.name as person_name,p.type as person_type,
	d.id as department_id,d.name as department_name,d.type as department_type
from user u left join person p on u.personid = p.id 
left JOIN department d on u.departmentid = d.id 
WHERE d.type = 'A'
order by user_id

结果:
在这里插入图片描述

2、犬牙交错,只要结果

left join查询,最后用or条件挑选符合的数据
使用背景:left join之后包含所有结果,or里面的条件能涵盖所有结果
设计思路:left join只做外键约束,不写额外条件,所有条件写在where 里面
注意问题:不设置or条件必须包含所有结果,or限定被left join的表字段结果等同inner join

-- 对查询结果进行过滤(包含连接对象条件时,理论上和 inner jion 相同)
SELECT
	u.id as user_id,u.name as user_name,u.type as user_type,
	p.id as person_id,p.name as person_name,p.type as person_type,
	d.id as department_id,d.name as department_name,d.type as department_type
from user u 
left join person p on u.personid = p.id 
left JOIN department d on u.departmentid = d.id
WHERE u.type = 'A' or p.type = 'A' or d.type = 'A' 
order by user_id

结果:
在这里插入图片描述

3、条件复杂,计算结果

left join查询,case 挑选,最后用case 结果作为条件挑选符合的数据
使用背景:通过join on 和 where 的条件过滤都不如意,需要一些更复杂的判断
设计思路:select 嵌套查询,内层case 进行结果处理,外层对 case 的值做过滤
注意问题:注意别名对应,case每种情况需要考虑周全

-- 对结果集进行计算(判断)后输出
SELECT * FROM (
SELECT
	u.type,
	u.id as user_id,u.name as user_name,u.type as user_type,
	p.id as person_id,p.name as person_name,p.type as person_type,
	d.id as department_id,d.name as department_name,d.type as department_type,
	(case when (
		p.id is NULL and d.id is NULL and u.type = 'A' 
		or p.id is not NULL
		or d.id is not NULL
		) then 1 else 0 end
	) hhh
from user u 
left join person p on u.personid = p.id  and p.type = 'A'
left JOIN department d on u.departmentid = d.id and d.type = 'A'
) result where result.hhh = 1
order by user_id

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java中循环条件的数据库查询可以通过以下几种方法来优化: 1. 减少数据库请求的次数:尽量减少对数据库的询问,可以将所需的多个数据请求合并为一次请求。 2. 使用缓存:对于常用的数据可以使用缓存,减少对数据库的询问。 3. 使用索引:对查询的字段建立索引,可以提高查询速度。 4. 使用预处理语句:使用预处理语句可以提高数据库查询的效率。 5. 使用连接池:使用连接池可以避免频繁地打开和关闭数据库连接,提高数据库访问的效率。 6. 使用简单的SQL语句:使用简单的SQL语句可以减少数据库的处理量,提高查询效率。 ### 回答2: 在进行Java循环条件数据库查询的优化时,有以下几个方面可以考虑: 1.缩小查询结果集:尽量在查询条件中加入更多的限制条件,如使用索引、使用更精确的条件等,以减少返回的数据量,从而提高查询速度。 2.合理使用缓存:在查询过程中,可以尝试使用缓存来存储已查询的数据,避免多次查询相同的数据,从而减少数据库的访问次数。 3.批量操作:对于需要进行批量查询的情况,可以考虑使用批量操作,将多个查询请求合并为一个请求,减少与数据库的交互次数,提高效率。 4.适当使用连接池:连接池可以帮助管理数据库连接,减少连接的创建和销毁开销,提高数据库访问的效率。 5.优化SQL语句:尽量避免使用复杂的SQL语句,可以使用数据库的查询优化工具或者调整查询语句的结构,以提高查询的效率。 6.合理设计数据库表结构:在设计数据库表结构时,对于频繁查询的字段可以加上索引,以提高查询速度。 7.合理使用数据库的缓存和索引:根据具体的需求,可以合理地使用数据库的缓存和索引功能,以提高查询效率。 总的来说,对于Java循环条件数据库查询的优化,需要从多个方面综合考虑,结合具体的场景和需求,采取相应的措施来提高查询的效率。 ### 回答3: 在Java中,优化循环条件的数据库查询是通过以下几个步骤来实现的: 1.将频繁查询的数据缓存起来:使用缓存技术将数据库的结果存储在内存中,这样可以避免多次查询数据库。可以使用一个集合或者使用第三方的缓存工具来实现。 2.合并多个查询条件:如果查询条件中存在多个AND条件,可以考虑将这些条件合并成一个条件,这样可以减少数据库的查询次数。如使用IN语句代替多个OR条件。 3.使用索引:索引可以极大地提高查询速度,可以在需要经常查询的字段上创建索引。当有多个字段组合查询时,可以创建复合索引。 4.减少数据库交互的次数:可以使用批处理的方式来处理数据库操作,将多个操作合并成一个批处理操作,减少与数据库的交互次数。 5.使用分页查询:如果查询结果集很大,可以考虑使用分页的方式查询,每次只查询部分数据。这样可以减少数据库的负担和提高查询效率。 6.使用合适的数据类型:在数据库中使用合适的数据类型,可以提高查询效率。例如,如果一个字段存储的是日期类型的数据,可以使用日期类型的数据字段,而不是字符串类型。 7.优化SQL语句:通过调整SQL语句,可以提高查询效率。可以通过添加索引、优化查询条件、使用合适的连接方式等方式来优化SQL语句。 8.定期清理无用数据:当数据库中存在大量无用数据时,会影响查询效率。所以定期清理无用数据,保持数据库的整洁。 总结:通过缓存、索引、合并查询条件、减少数据库交互、分页查询、使用合适的数据类型、优化SQL语句和定期清理无用数据等方法,可以有效优化循环条件的数据库查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cy谭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值