SQL多条件查询子查询

多条件搜索时where 1=1并不高效,如果使用这种方法,在数据库中会做全表查询(对每行数据都进行扫描比对),会无法使用索引等优化查询的策略,建立的索引会暂时失效。

Case函数(case必须和end一起使用,下接when then)

select 
数学成绩=
(
case
    when Math>100 then '优',
    when Math>90 then '良',
    when Math>80 then '中',
    else '不及格'
end
)

case后面不接什么,是在一个范围中。

select 
数学成绩=
(
case (Math)
    when 100 then 1,
    when 99 then 2,
    when 98 then 3
end

这边是单独的值,数学成绩为100显示1,99为2,98为3

案例
在订单表中,统计每个销售员的总销售金额,列出销售员名,总销售金额,称号(>6000金牌,>5500银牌,>4500铜牌,否则为普通)

select 
销售员,
销售员金额=sum(销售数量*销售价格),
称号=
(
case
    when Sum(销售数量*销售价格)>6000 then '金牌',
    when Sum(销售数量*销售价格)>5500 then '银牌',     
    when Sum(销售数量*销售价格)>4500 then '铜牌',
    else '铁牌'
end
)
from MyOrders group by 销售员

子查询
把一个查询的结果在另一个查询中使用就叫做子查询(将一个查询语句作为一个结果集供其他sql语句使用)

例如: select * from(select col1,col2 from tab) as t
将括号内的内容作为t表,进行查询

子查询基本分类
独立子查询:子查询可以独立运行,可以单独运行子查询中的内容
相关子查询:子查询引用父查询中的结果

或者 or 也 and
例子:

select * from(select English from tab) as t where English>90;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值