一个查询语句的完整形式如下所示:
可见,select语句还是比较复杂的——其实是mysql中最复杂的语句。
1,以上中括号中的任一项都可以省略,但如果不省略,就应该按该顺序出现。
2,通常,from后的子句都需要有from子句, having子句需要有group by子句。
3,这些子句的“执行顺序”,也是按此顺序进行的。
9.2.查询结果数据及select选项
9.2.1.查询“固定数据”
9.2.2.select中可以进行计算
9.2.3.查询出的数据字段可以使用别名
9.2.4.使用distinct消除查询结果重复行
重复行的含义:
两行(或两行以上)的数据完全一样。
9.3.where子句
1,查询条件,类似php语言中的判断条件,也就是说,where相当于if。
2,查询条件的作用是:针对from子句的表“进行一行一行筛选”,以筛选出符合条件的行。
查询条件中,可以使用很多的运算符,包括:算术运算符,比较运算符,逻辑运算符,等等。
9.4.mysql运算符
9.4.1.算术运算符
9.4.2.比较运算符:
9.4.3.逻辑运算符:
9.4.4.其他特殊运算符
like模糊查找运算符:
用于判断某个字符型字段的值是否包含给定的字符。
其中:%表示“任意个数的任意字符”。
还可以使用“_”(下杠),表示“任意一个字符”。
where name like ‘罗%’ //找出name的第一个字为“罗”的所有
//可以找出:”罗成”,“罗永浩”,“罗纳尔多”,“罗”
//但找不出“c罗纳尔多”这个
where name like ‘罗_’ //可以找出:”罗成”, “罗兰”,
//但找不出“c罗”,“罗永浩”
极端情况:
where name like “罗” //其实它只是相当于: name = ‘罗’
如果不使用“%”或“_”,则 like 相当于等于(=)。比如:
xxx字段 like ‘关键字’
相当于:
xxx字段 = ‘关键字’
between范围限定运算符:
用于判断某个字段的值是否在给定的两个数据范围之间。
其含义相当于: xxx字段 >= 值1 and xxx字段 <= 值2
in运算符:
用于判断某个字段的值是否在给出的若干个“可选值”范围。
其含义是:该字段的值等于所列出的任意一个值,就算满足条件,比如:
籍贯 in (‘北京’,‘山东’,‘河北’, ‘江西’); //则某人籍贯为上述4个之一就ok。
is运算符:
用于判断一个字段中的是“是否存在”(即有没有),只有两个写法,如下所示:
9.5.group by子句
表示对所取得的数据,以所给定的字段来进行分组。
最后的结果就是将数据分成了若干组,每组作为一个“整体”成为一行数据。
特别注意:
分组之后,只有“组信息”——一行就是一组,不能出现描述单独产品的描述
对其按“品牌”进行分组:
结果为
特别注意:
分组查询的结果,要理解为,将“若干行原始数据”,分成了若干组,结果是每组为一行数据。
即:一行数据就代表“一组”这个集合概念,而不再是单个概念。
因此:一行中出现的信息,应该是“组的信息”,而不是“个体信息”。
于是,对于分组查询(group by),select中出现的信息,通常就只有两种情况的信息了:
1,分组本身的字段信息,用什么字段分组,可以出现这个字段;
2,一组的综合统计信息(主要是数字信息),主要包括:
(1)计数值: count(字段), 表示求出一组中原始数据的行数;
(2)较大值: max(字段),表示求出一组中该字段的较大值;
(3)最小值: min(字段),表示求出一组中该字段的最小值;
(4)平均值: avg(字段),表示求出一组中该字段的平均值;
(5)总和值: sum(字段),表示求出一组中该字段的累加和;
以上5个函数,也称为“聚合函数”!
多条件分组:
将product表中的所有商品以品牌和产地进行分组,并求出每一组的数量
9.6.having子句
having的含义跟where的含义一样,但having是只用于对group by分组的结果进行的条件筛选。
即:having其实是相当于分组之后“有若干行数据”,然后对这些行再筛选。
有group by才能用having
9.7.order by子句
对前面所取得的数据按给定的字段进行排序。
排序方式有: 正序asc, 倒序desc,如果省略不写,就是asc
9.8.limit 子句
1,limit表示对前面所取得的数据再进行数量上的筛选:取得从某行开始的多少行。
2,行号就是前面所取得数据的“自然顺序号”,从0开始算起——注意不是id,或任何其他实际数据。
3,起始行号可以省略,此时limit后只用一个数字,表示从第0行开始取出多少行。
limit子句通常用在“翻页”功能上,用于找出“第n页”的数据,其公式为:
limit (n - 1) * pageSize, pageSize; 其中pageSize表示每页显示的条数。