SQL多条件查询子查询

时间:2020-12-31 22:29:40

多条件搜索时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;