一、查询语句的组成
查询语句由多个子句组成。例如,select * from T1;由select 子句和from 子句两个子句组成。
子句的执行是有先后顺序的,而这种顺序和子句出现的位置无关。
二、from子句
在查询语句中,from子句是最先被执行的。用于将数据表从硬盘拷到内存中。
from后面只跟数据表。数据表可以重命名。
as可以省略。
二、select子句
本质是一种输出。并非什么选择。
1、输出指定列
字段名可以写成表名的一个成员,用点号表示。
2、字段名重命名
3、去重
如果后面跟多个字段,只有多个字段都相同才认为重复。
三、where子句
用来对记录进行筛选。它的执行顺序在from之后,select之前。
1、比较符
<, <=, >, >=, =,(没有==), !=
注意:由于where子句在select执行之前,所以select对字段的重命名不能用在where中。
2、比较符的组合
3、between
4、集合判断
可以反过来排除集合中的元素。
5、NULL的比较
NULL不能比较,只能用is null或者is not null。
6、模糊查询
用like,通配符有两种,%和_,前者表示多个字符,后者只有一个字符。
模糊查询不仅可以查字符型字段,还可以查整型数等类型的字符。
7、正则表达式查询
四、order子句
用来排序。
如果升序排序,asc可以忽略。
降序用desc。
可以对多个字段进行排序,在第一个字段相同的时候,再对第二个字段排序。
五、limit限定
六、group by子句
分组查询。
分组后,同组的记录被压缩到了第一条后面看不到。
count是计数函数,计数的字段如果为NULL将不计,相同不影响。
为了去除NULL的影响,一般在count函数中使用*代替具体的字段。
注意:分组后,select输出的字段除了统计的字段外,只能输出分组依据的那个字段。其它的都不合适。
除了count函数之外,还有sum, avg, min, max。
七、having子句
用来对分组之后的结果进行进一步的筛选。就像where一样。
having只对分组后的结果进行筛选,而where是对分组前的结果筛选,两者不能混用。