mysql 查询模型(重要)

来源:互联网 发布:袁弘老婆的淘宝店铺 编辑:程序博客网 时间:2024/06/06 00:37

查询模型(重要)

列就是变量,在每一行上,列的值都在变化.

Where条件是表达式,在哪一行上表达式为真,

哪一行就取出来

比如下面的条件, shop_price在不同的行,有不同的值.

在哪一行时,shop_price>5000如果为真,则这行取出来.

查询结果集--在结构上可以当成表看



COUNT:

select count(*) from 表名查询的就是绝对的行数,哪怕某一行所有字段全为NULL,也计算在内.

select couht(列名) from 表名,

查询的是该列不为null的所有行的行数.

count(*),count(1),谁好呢?

其实,对于myisam引擎的表,没有区别的.

这种引擎内部有一计数器在维护着行数.

Innodb的表,count(*)直接读行数,效率很低,因为innodb真的要去数一遍.


GROUP BY :





思考:

全班同学排队,

校长对老师说统计班级同学的姓名和平均年龄[返回1]

语义上的疑问平均年龄好算,只有一个结果,但是,把谁的姓名和平均年龄放在一块返回呢?

语义上就解释不通,但是mysql中却偏偏可以取姓名,而且是把队伍的第一位同学的姓名返回.

这是mysql的一个特点,出于可移植性和规范性,不推荐这么写.

严格的讲,group by  a,b,c 为列,select的列,只能在a,b,c里选择,语义上才没有矛盾.

having

Order by :

当最终结果集出来后,可以进行排序.

排序的语法:

Order by 结果集中的列名 desc/asc

:order by shop_price desc ,按价格降序排列

Order by add_time asc ,按发布时间升序排列.

多字段排序也很容易

Order by 1 desc/asc , 列2 desc/asc  , 列3 desc,asc

思考取出每个栏目下的最新的商品???

20分钟,1select语句实现

良好的理解模型

Where 表达式  ,把表达式放在行中,看表达式是否为真

理解成变量,可以运算

取出结果可以理解成一张临时表

子查询

Where型子查询指把内层查询的结果作为外层查询的比较条件.

典型题:查询最大商品,最贵商品

Where型子查询

如果 where =(内层sql),则内层sql返回的必是单行单列,单个值

如果 where 列 in (内层sql), 则内层sql只返回单列,可以多行.

From 型子查询把内层的查询结果当成临时表,供外层sql再次查询

典型题:查询每个栏目下的最新/最贵商品

Exists子查询 把外层的查询结果,拿到内层,看内层的查询是否成立.

典型题查询有商品的栏目



原创粉丝点击