内部学习严禁外传 第3章 MySQL查询和视图 应用数据库数据是建立数据库的出发点和立足点,查询数据库数据是应用数据库数据的基本 操作。在 MySQL中,对数据库的查询使用 SELECT语句,功能非常强大、使用较为灵活。 可以把经常查询的操作定义为视图,它相当于一个逻辑表,可以用操作表的方式操作视图 本章介绍查询和视图 3.1 My SQL数据库查询 在第2章学生成绩数据库(xsqj)已经创建了学生表(xs)并且输入了若干条记录,用户可以 采用命令或者图形界面工具创建课程表(kc)和学生成绩表(xskc),并且输入若干条记录。表 结构如附录A所示 SELECT语句可以从一个或多个表中选取符合某种条件的特定的行和列,结果通常是生成 个临时表。下面介绍 SELECT 它是SQL的核心。 SELECT语句的语法格式如下 ALL DISTINCT DISTIN [WHERE条件 GROUP BY{列名|表达式| position)[ ASC DESC [ HAVING条件] [ ORDER BY{列名表达式| position}[AsC|DEsc], PROCEDURE存储过程名(参数.) [ INTO OUTFILE·文件名[ CHARACTER SET字符集 export options| INTO DUMPFILE'文件名’|IN0变量名 [FOR UPDATE I LOCK IN SHARE MODEI 下面具体介绍一下 SELECT语句中包含的几个常用的子句 3.11选择输出列 SELECT语句中需要指定查询的列
MSQL数据库教程(视频指导版 选择指定的列 使用 SELECT语句选择一个表中的某些列,各列名之间要以逗号分隔,所有列用“*”表示 其语法格式为如下 SELECT*列名,列名,…frm表名 【例31】查询xscj数据库的xs表中各个同学的姓名、专业名和总学分 use xsc select姓名,专业名,总学分 from xs 执行结果是xs表中全部学生的姓名、专业名和总学分列上的信息。 说明 2.定义列别名 当希望查询结果中的列显示时使用自己选择的列标题,可以在列名之后使用AS子句,语法 格式如下 SELECT……列名[AS列别名 【例3.2】查询xs表中计算机专业同学的学号、姓名和总学分,结果中各列的标题分别指定 为 number、name和mark,语法格式如下 select学号 as number,姓名 as name,总学分 as mark where专业名=·计算机 结果如图3.1所示 811 图3.1查询xs表结果 当自定义的列标题中含有空格时,必须使用引号将标题括起来。例如 select学号as' student number',姓名as' student name',总学分 as mark from xs where专业名=·计算机'; 不允许在 WHERE子句中使用列别名。这是因为执行 WHERE代码时,可能尚未确 定列值。例如,这个查询是非法的 select性别asse 说明 from xs where sex = 0;
当第3章MsOL查询和视图 3.替换查询结果中的数据 要替换查询结果中的数据,则要使用查询中的CASE表达式,语法格式如下 CASE WHEN条件1THEN表达式 HEN条件2THEN表达式2 ELsE表达式 【例3.3】査询ⅹs表中计算机专业各同学的学号、姓名和总学分,对总学分按如下规则进行替 若总学分为空值,替换为“尚未选课”; 若总学分小于50,替换为“不及格”; 若总学分在50~52之间,替换为“合格 若总学分大于52,替换为“优秀”; 总学分列的标题更改为“等级”。 替换操作代码如下 elect学号,姓名 when总学分isnu1 L then'尚未选课 when总学分<50then'不及格 hen总学分>=50and总学分<=52then合格 e1se"优秀 trom xs here专业名计算机 执行结果如图3.2所示 号:姓名:等级 图3.2替换结果 4.计算列值 SELECT的输出列可使用表达式,格式如下: SELECT表达式 【例34】按120分制重新计算成绩,显示xskc表中学号为081101的学生成绩信息,代码如
MSQL数据库教程(视频指导版 select学号,课程号,成绩*1.20as成绩120 from xs k where学号=08110 执行结果如图3.3所示。 学号:课程号:成绩128 图3.3重新计算结 5.消除结果集中的重复行 对表只选择其某些列时,输出的结果可能会出现重复行。可以使用 DISTINCT或 DISTINCTROW关键字消除结果集中的重复行,格式如下 SELECT DISTINCT| DISTINCTROW列名 【例35】对xsj数据库的xs表只选择专业名和总学分,消除结果集中的重复行,代码如下 select distinct专业名,总学分 执行结果如图34所示。 图3.4消除重复行 6.聚合函数 SELECT I的输出列还可以包含所谓的聚合函数。 聚合函数常常用于对一组值进行计算,然后返回单个值。除 COUNT函数外,聚合函数都会 略空值。表3.1列出了一些常用的聚合函数。 表3.1 常用聚合函数 函数名 COUNT 求组中项数,返回int类型整数 MAX 求最大值 MIN 求最小值 返回表达式中所有值的和 AVG 求组中值的平均值 STD或 STDDEV 返回给定表达式中所有值的标准差 VARIANCE 返回给定表达式中所有值的方差
当第3章MsOL查询和视图 续表 函数名 GROUP CONCAT 返回由属于一组的列值连接组合而成的结果 BIT AND 逻辑或 bIT OI 逻辑与 BIT XOR 逻辑异或 (1) COUNTO函数 COUNTO函数用于统计组中满足条件的行数或总行数,返回 SELECT语句检索到的行中非 NULL值的数目,若找不到匹配的行,则返回0。 COUNTO函数的语法格式 COUNT(f[ALL| DISTINCT]表达式)1* 其中,表达式的数据类型可以是除BLOB或TEXT之外的任何类型。AL表示对所有值进行 运算, DISTINCT表示去除重复值,默认为ALL。使用 COUNT(*)时将返回检索行的总数目,不 论其是否包含NULL值 【例3.6】求学生的总人数。 select count(*)as!学生总数 from xs; 执行结果如图3.5所示。 3.5执行结果 例37】统计备注不为空的学生数 select count(备注)as备注不为空的学生数目 执行结果如图3.6所示。 备注不为空的学生数目 图3.6执行结果 这里 COUNT(备注)计算时备注为NULL的行被忽略,所以这里是7而不是22。 法意 【例38】统计总学分在50分以上的人数 select count(总学分)as'总学分50分以上的人数 here总学分>50