MySQL燕十八老师课程笔记:第七课:查询模型的理解

把列看成变量,把where 后面看成表达式,哪一行能够使表达式为真,就取出哪一行。
第一点:把where后面看成表达式:
判断下一行取出什么?

select goods_id, goods_name from goods
where 1>2;
#结果:empty set 因为表达式恒为假。

同理:问:where 1 是什么意思?

select goods_id, goods_name from goods
where 1;
#取出所有行。

第二点:把列看成变量(既然是变量,变量之间就可以运算)
取出商品id,商品名,本店价比市场价省的钱

select goods_id,goods_name,market_price-shop_price from goods 
where 1;

表里面原来没有“market_price-shop_price”的列,这一列其实是一个运算结果,术语叫“广义投影”。
列的运算结果,可以当成列看,还可以起一个列别名。

select goods_id,goods_name,(market_price-shop_price) as discount
from goods
where cat_id!=3;

查出本店价比市场价省的钱,而且还得省200以上:

select goods_id,goods_name,(market_price-shop_price) as discount
from goods
where (market_price-shop_price) > 200;

注意!!
这里不能写:where discount > 200;

原因:where 在查询的过程中,是对表中的数据发挥作用,查询出数据库来。但由于discount列,是在结果中表达的。即::where发挥作用时,表上并没有discount列,当where发挥完作用后,形成的结果才形成discount。

对于结果中的列,如果再想筛选,可以使用 having 语句。

练习:
把num值处于[20,29]之间的,改为20,[30,39]之间的,改为30,其他的不变。

create table mian(
    num int
);
insert into mian
values
(3),(12),(15),(25),(23),(29),(34),(37),(32),(45),(48),(52);
select * from mian;

在这里插入图片描述

# 把num当成变量看:num/10取整,再×10

update mian set num=floor(num/10)*10  
where num>=20 and num<=39;

# 一行语句就可以了。
# floor这个用法,在matlab里也有用到,就是向下取整。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值