MySQL 中的查询模型
2019-06-29 本文已影响0人
djz0306
在 MySQL 中查询是使用最多的也是最复杂的操作之一,但是经常可能会写错或者结果与预期不一致的情况。所以查询的模型理解就相当重要了。
模型理解
-
把列看出变量,把 where 后面看成是 Python 或者 Java 等语言中 if(exp) 中的 exp 表达式
-
哪行可以被取出来,就看哪行能让 exp 表达式为真
-
把列看成变量,既然是变量就可以运算,术语上叫做广义投影。例如取出所有商品的 id 和名字,省的钱超过200,并计算出本店价比市场价节省的钱,计算出来的列可以不起名字也可以起个列别名:
select goods_id, goods_name, (market_price - shop_price) as discount from goods where (market_price - shop_price) > 200;
此处需要注意的是,where 后面不能直接用 discount ,要对结果进行筛选的话可以使用 having。where 进行判断是对表中的原数据进行判断,等把结果筛选出来以后才有 discount 所以 where 中直接用 discount 会出现 Unknown column 'discount' in 'where clause' 的报错
练习题
-
现有如下表和数组,把其中 num 值处于 [20,29] 的改为 20,把 num 值处于 [30,39] 之间的改为 30。num中的值为:3,12,15,25,23,29,34,37,32,45,48,52,表名为mian
update mian num=floor(num/10)*10 where num between 20 and 39;
结果如下:
-
把 goods 表中的商品名由“摩托罗拉xxxx”改为“联想”:
update goods set goods_name = concat('联想',substring(goods_name,5)) where goods_name like '摩托罗拉%';
使用 substring() 截取字符串,然后使用 concat() 拼接。结果如下:
MySQL 练习题2.jpg