mysql
1.查询语句基本形式select 子句【from 子句】【where 子句】【group 子句】【having子句】【order 子句】【limit 子句】;select子句select 【all | distinct 】字段或表达式1 【as 别名1】,字段或表达式2 【as 别名2】,.......
2.all :表示列出所有满足条件的数据,并不考虑行是否重复;这是默认值,不写就是它。distinct:表示会考虑行是否重复,并自动消除重复行;
from子句from子句表示数据源——数据的来源。形式:from 表名;from 表名1,表名2,....;#连接查询;from 表名1 某种 join 表名2 on 条件; #连接查询; where子句含义:就是对前面from子句的“数据源”,来设定筛选条件。只有满足条件的数据行,才会被取出来。注意:其筛选是对数据源的数据,“一行一行”进行判断!!!where子句的本质:其实就是相当于if语句的判断条件,或where循环的判断条件——最终结果就是true或者falsewhere子句的基本形式:判断条件1 逻辑运算符1 判断条件2 逻辑运算符2 判断条件3 ......——其实,就是一个if语句通常的那种表达式。where id > 8 and age < 18 or edu = ‘大学’对比PHP中:if( $v1 > 8 && $v2 < 18 || $v3 == ‘大学’) {....} 基本(常用)运算符:算术运算符:+ - * / %比较运算符:> >= < <= =(等于) <>(不等于) ==(等于) !=(不等于)逻辑运算符 逻辑与: and逻辑或: or逻辑非: not is运算符它只用于对布尔值和空值(null)进行判断,综合起来,就只有如下4种情形:XX字段 is true //表示某个字段的值是true,则结果是true,否则结果就是false。XX字段 is false //表示某个字段的值是false,则结果是true,否则结果就是false。XX字段 is nullXX字段 is not null 注意:null(空,空值),跟数字0,空字符串’’ 是不同的。数字0和空字符串’’ 其实是“非空”(not null)
4.between运算符就是用于限定某个字段的值在某两个给定值的范围(between就是“在....之间”的意思)形式:XX字段 between 值1 and 值2;注意:1,通常,它只用于数字类型的字段2,值1不能大于值2——否则什么也找不到。3,其实它含义是:XX >= 值1 and XX <= 值2举例:age between 18 and 28;相当于:age >= 18 and age <= 28; in 运算符:形式:XX字段 in (值1,值2,值3,..... )说明:1,它可以用于各种数据类型,但值必须是“字面值”;2,它表示该字段的值,等于 列出来的其中任意某一个,就表示符合条件;3,即相当于:XX = 值1 or XX=值2 or .....
5.like运算符like运算符用于对字符类型的数据进行“模糊查找”。形式:XX字段 like ‘要查找的字符’含义:表示该字段中有设定的要查找的字符,就算满足条件。说明:1,like并不能独立完成模糊查找,而是需要结合2个特殊“字符”(符号):% :表示任意个数的任意字符;_ :表示一个任意字符;2,如果要在字段中,找这两个特殊字符本身,怎么办?——转义就ok:XX like ‘%\%%’; #这里,表示找其中包含“%”的所有数据,中间的“\%”就是转义XX like ‘%\_%’; #同理举例: realName like '罗%'; #可以找出:罗,罗成,罗六奇,罗哥哥,罗叔叔,罗大脑袋,罗胡罗卜.... realName like '罗_'; #可以找出:罗成,罗奇,罗哥,罗叔..... realName like '_罗'; #可以找出:大罗,小罗,老罗,C罗..... realName like '%罗%'; #这种形式就是最经常使用的最典型形式,只要改字段包含有一个“罗”,不管位置在哪里,都能找出。 group by子句形式:group by 字段名1 【Asc | Desc】, 字段名2 【Asc | Desc】,......说明:1,用于将从数据源中取得的满足where条件的数据,进行某种标准(字段)的分类(分组);2,分组之后,要有一个重要理念:select出来的数据,每一行,就是代表“一组”!!!即该行的每一个字段的值,都应该是对该“组”的信息描述!!!3,还可以使用Asc或者Desc来设定按该组的值的大小进行正序(默认情况)或倒序排列。 特别注意:如果使用group by 子句,就需要考虑select子句中的“可出现字段”——它会受group by子句的影响!基本上,此时,select子句中,只能出现如下3种数据(字段)了:1,该分组字段本身;2,每一组中的原始数据行数: count(*)就可以得到!3,每一组中“原始数字字段”的“统计信息”(又叫聚合信息),只包括如下几个:avg(字段名) :求得该组的平均值;max(字段名) :求得该组的最大值;min(字段名) :求得该组的最小值;sum(字段名) :求得该组的总和值;
6.对其按“品牌”进行分组:
7.结果为:
8.可见,分组之后,我们要有这个观念:我的眼里只有组(信息); 实际上,对一个表,如果不进行分组(group 操作),就可以将整个表当做“一个组”来进行信息统计:
9.结果为:
10.having子句having子句跟where的使用方法和作用是一样的!唯一区别是为了区别where:其实是where只能跟着from后,having只能跟着group by后。即:having是对一个表的数据进行了分组之后,对“组信息”进行相应 条件筛选;可见:having筛选时,只能根据select子句中可出现的字段(数据)来进行条件设定。 举例:找出平均价超过6000的品牌数据:
11.结果为:
12.也可以写成:
13.结果:
14.order by 子句形式:order by 字段名1 【Asc | Desc】, 字段名2 【Asc | Desc】,......说明:1, 可以设定多个字段进行排序,但后面字段的排序,都是在前一字段 排序 值“相等”的情况下,才是有意义的。2,Asc:正序,Desc 倒序 举例:
15.再来一个: