理解查询模型
- 理解select的查询过程
- select name from user where id=3;
- 观念,每个列都是变量
- 来到第一行三个列即三个变量, 取出了 id 变量作为比较条件
- 判断第一行的id列的变量是否和查询的条件变量相符,
- 当前行 id=1 条件行 id=3, where查询条件尝试 id=1 === id=3 的值为false
- where 比的是 bool 取、不去, 列作为变量
- 不相符继续向下查找
- 如果相符了,则定位了 name 这个字段,还看作变量, select 的作用 将 name 这个变量取出来
- where 是个表达式 为真取出来,假的不取
- 理解 where 1, where 0
- 理解列当作变量
- 变量可以计算,列也是
- select uid+age, uid, age, name from user where 1;
- 我想知道本店商品和市场售价相差多少?(衍生起了个别名alias)
- select market_price-shop_price, market_price, shop_price , goods_name from goods where goods_id>1 && goods_id<10;
- select market_price-shop_price as cheaper, market_price, shop_price , goods_name from goods where goods_id>1 && good
拓展一下思路场景
- 扩展知识
- 关键字: in, between, or, and , not in
有很多不是直接关联的查询,比如,取出1号栏目下的所有商品,命名有 我却查不到?
可能这个栏目是大栏目,例如,手机。 手机下有小米,apple, 华为… 这个大栏目有小栏目,却查不到?
需要根据大栏目id, 查小栏目。 然后根据小栏目去取得,对应商品
- 我首先要知道, 1号栏目有哪些子栏目,比如子栏目(4,5,9)
- 查询时候要 in 这些子栏目, 可以先查 parent_id = 1 , 知道这些栏目
- 然后查询 cat_id in 这些子栏目
- 上面做法太麻烦,怎么办?? 一步到位使用子查询,关联查询。
模糊的查询: where goods_name like “诺基亚%” 也可以 “%诺基亚”
like 关键字, % 任意匹配, _ 匹配一个单一字符
查出有诺基亚的: “诺基亚%” 也可以 “%诺基亚”
查诺基亚后面有三个字符的 “诺基亚___”
关于查询模型的理解, 可以怎么写sql?
- 试试理解下面的代码, 看看是否懂了?
查询 -- 列,是变量的思想。
将number 在 0-16 增加1;
update mian set num=num+1 where num between (0,16);
恢复原样:
update mian set num = num -1 where num between 0 and 17;
查询 -- 加深, 列是变量的思想。
将goods_name 是诺基亚开头的改成 Nokia
update goods set goods_name=concat('Nokia', substring(goods_name, 4)) where goods_name like 诺基亚%";
select * from goods where goods_name like "诺基亚%";
select * from goods where goods_name like "Nokia%";
恢复表也是一样。
可以查mysql的手册, mysql自带处理的函数。