MySQl心得4--2--数据库查询2(二)
CT表示去除重复值,默认为ALL。使用COUNT(*)时将返回检索行的总数目,不论其是否包含 NULL值。
count(*):统计记录的条数(包括null);
count(字段名):统计字段中有值的记录个数(不包括null);
count(distinct 字段名):去掉重复后再统计字段中有值的记录个数(也不包括null)
例1:求学生的总人数。
SELECT COUNT(*) AS '学生总数' FROMXS;
例2. 统计备注不为空的学生数目。
SELECT COUNT(备注)AS '备注不为空的学生数目' FROM XS;
注意:这里COUNT(备注)计算时备注为NULL的行被忽略
例3: 统计总学分在50分以上的人数。
SELECT COUNT(总学分) AS '总学分50分以上的人数'
FROM XS WHERE 总学分>50;
(2)MAX和MIN
MAX和MIN分别用于求表达式中所有值项的最大值与最小值,语法格式为:MAX / MIN ( [ ALL | DISTINCT ] expression )其中,expression是常量、列、函数或表达式,其数据类型可以是数字、字符和时间日期类型。 www.2cto.com
例:求选修101课程的学生的最高分和最低分。
SELECT MAX(成绩), MIN(成绩)
FROM XS_KC WHERE 课程号 ='101';
注意:当给定列上只有空值或检索出的中间结果为空时,MAX和MIN函数的值也为空。
(3)SUM函数和AVG函数
SUM和AVG分别用于求表达式中所有值项的总和与平均值,语法格式为:SUM / AVG ( [ ALL | DISTINCT ] expression )其中,expression是常量、列、函数或表达式,其数据类型只能是数值型数据。
例:求学号081101的学生所学课程的总成绩。
SELECT SUM(成绩) AS '课程总成绩'
FROM XS_KC WHERE 学号 ='081101';
(4)variance和stddev(STD)函数
variance和stddev函数分别用于计算特定的表达式中的所有值的方差和标准差。语法格式:
VARIANCE / STDDEV ( [ ALL | DISTINCT ]expression )
说明:方差的计算按照以下几个步骤进行。
① 计算相关列的平均值;
② 求列中的每一个值和平均值的差;
③ 计算差值的平方的总和;
④ 用总和除以(列中的)值得结果。
STDDEV函数用于计算标准差。标准差等于方差的平均根。所以,stddev(…)和sqrt(VARIANCE(…))这两个表达式是相等的。
STDDEV可以缩写为STD,这对结果没有影响。
(5)group_concat函数
MySQL支持一个特殊的聚合函数group_concat函数。该函数返回来自一个组指定列的所有非NULL值,这些值一个接着一个放置,中间用逗号隔开,并表示为一个长长的字符串。这个字符串的长度是有限制的,标准值是1024。
语法格式为:GROUP_CONCAT({[ALL|DISTINCT] expression }| * )
(6)BIT_AND、BIT_OR和BIT_XOR
与二进制运算符|(或)、&(与)和^(异或)相对应的聚合函数也存在,分别是BIT_OR 、BIT_AND、BIT_XOR。例如,函数BIT_OR在一列中的所有值上执行一个二进制OR。
语法格式为: BIT_AND |BIT_OR | BIT_XOR( { [ ALL | DISTINCT ] expression } | * )
例: 有一个表BITS,其中有一列bin_value上有3个integer值:1、3、7,获取在该列上执行BIT_OR的结果,使用如下语句: www.2cto.com
SELECT BIN(BIT_OR(bin_value)) FROM BITS;
说明:MySQL在后台执行如下表达式:(001|011)|111,结果为111。 其中BIN函数用于将结果转换为二进制位。
3. 范围比较
用于范围比较的关键字有两个:between和in。
当要查询的条件是某个值的范围时,可以使用between关键字。BETWEEN关键字指出查询范围,格式为:
expression [ NOT ] between expression1 andexpression2
当不使用NOT时,若表达式expression的值在表达式expression1与expression2之间(包括这两个值,相反,使用not时,不包括这两个值),则返回TRUE,否则返回FALSE;使用NOT时,返回值刚好相反。
注意:expression1的值不能大于expression2的值。
使用IN关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任一个匹配时,即返回TRUE,否则返回FALSE。使用IN关键字指定值表的格式为:expression IN ( expression [,…n])
例:前面那个求1900年出生的学生的第三种做法;
SELECT 学号, 姓名, 专业名, 出生日期 FROM XS
WHERE 出生日期 NOT BETWEEN '1990-01-01'and '1990-12-31';
例:查询XS表中专业名为“计算机”、“通信工程”或“无线电”的学生的情况。
SELECT * FROM XS
WHERE 专业名 IN ('计算机', '通信工程', '无线电');
该语句与下列语句等价:
SELECT * FROM XS
WHERE 专业名 ='计算机' OR 专业名 = '通信工程' OR 专业名 = '无线电';
说明:IN关键字最主要的作用是表达子查询。
4. 空值比较
当需要判定一个表达式的值是否为空值时,使用IS NULL关键字,格式为: expression IS [ NOT ] NULL
当不使用NOT时,若表达式expression的值为空值,返回TRUE,否则返回FALSE;当使用NOT时,结果刚好相反。
例: 查询XSCJ数据库中总学分尚不定的学生情况。
www.2cto.com
SELECT * FROM XS
WHERE 总学分 IS NULL;
本例即查找总学分为空的学生,结果为空。
5. group by子句主要用于根据字段对行分组。
例如,根据学生所学的专业对XS表中的所有行分组,结果是每个专