理解查询模型


  1. 理解select的查询过程
  2. 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
  1. 理解列当作变量
  • 变量可以计算,列也是
  • 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. 我首先要知道, 1号栏目有哪些子栏目,比如子栏目(4,5,9)
  2. 查询时候要 in 这些子栏目, 可以先查 parent_id = 1 , 知道这些栏目
  3. 然后查询 cat_id in 这些子栏目
  4. 上面做法太麻烦,怎么办?? 一步到位使用子查询,关联查询。

模糊的查询: 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自带处理的函数。