您好,欢迎访问三七文档
数据库应用基础本章内容重点难点第4章数据库查询查询概述基本查询嵌套查询连接查询嵌套查询、连接查询2问题提出为什么要查询数据?如何实现查询?34.1查询概述4.1.1图形界面的菜单方式4.1.2查询语句SELECT44.1查询概述在数据库应用中,最常见的操作是数据查询,它是数据库系统中最重要的功能,也是数据库其他操作(如统计、插入、删除及修改)的基础。无论是创建数据库、还是创建数据表等最终的目的都是为了使用数据,而使用数据的前提是需要从数据库中获取数据库所提供的数据信息。54.1.1图形界面的菜单方式在SSMS图形界面中,通过“对象资源管理器”可以直接查询数据表中的数据。64.1.2查询语句SELECT数据查询语句SELECT的基本框架是:SELECT-FROM-WHERE语法格式:SELECTselect_list/*指定要选择的列或行及其限定*/[INTOnew_table]/*指定结果存入新表*/FROMtable_source/*指定数据来源的表和视图*/[WHEREsearch_condition]/*指定查询条件*/[GROUPBYgroup_by_expression]/*指定分组表达式*/[HAVINGsearch_condition]/*指定分组统计条件*/[ORDERBYorder_expression[ASC|DESC]]/*指定查询结果的排序方式*/7需要哪些列从哪些表根据什么条件4.2基本查询4.2.1简单查询4.2.2条件查询4.2.3查询结果处理84.2.1简单查询简单查询是指SELECT语句只包含SELECT子句和FROM子句的操作,涉及的对象是单表中的列,即在查询过程对一张表的列进行操作。语法格式:SELECT[ALL|DISTINCT][TOPn[PERCENT]]select_listFROMtable_name其中:ALL表示输出所有记录,包括重复记录。DISTINCT表示输出无重复结果的记录。TOPn指定返回查询结果的前n行数据。select_list中的选项可以是:*、字段名、表达式或函数。94.2.1简单查询查询全部列或指定列SELECTALL*FROMst_infoSELECTallst_nameFROMst_Info消除重复行或定义列别名SELECTDISTINCTSt_nameFROMst_InfoSELECTDISTINCTst_id,St_nameFROMst_InfoSELECTst_nameas姓名,st_sexAS性别FROMst_InfoSELECTst_name姓名,st_sex性别FROMst_Info104.2.1简单查询计算列值使用聚合函数是对一组值执行计算并返回单一的值的函数常用聚合函数11函数功能函数功能AVG(字段名)求一列数据的平均值MIN(字段名)求列中的最小值SUM(字段名)求一列数据的和MAX(字段名)求列中的最大值COUNT(*)统计查询的行数?什么是聚合函数4.2.1简单查询例4.4:分别查询St_Info表的学生总数和学生的平均年龄.查询学生总数(使用COUNT(*))SELECTCOUNT(*)AS总数FROMSt_Info查询学生的平均年龄(使用AVG)SELECTAVG(YEAR(GETDATE())-YEAR(Born_date))AS平均年龄FROMSt_info124.2.1简单查询限制结果集的行数例4.5:对St_info表选择姓名、性别查询,返回结果集中前5行。SELECTtop5st_nameAS姓名,St_Sexas性别FROMst_info又如:SELECTtop3St_idFROMs_c_InfoSELECTtop20PERCENTSt_idFROMs_c_Info/*返回结果集中前20%行*/134.2.2条件查询语法格式:WHEREsearch_conditionWHERE子句中的条件运算符(参见p37表1.14)144.2.2条件查询比较运算如,列出St_Info表中年龄在20岁以上学生记录。SELECT*FROMSt_InfoWHEREYEAR(GETDATE())-YEAR(Born_date)20逻辑运算例4.7:查询S_C_Info表中选课成绩分数大于等于80分,且小于90分的学生信息。SELECT*FROMS_C_InfoWHEREScore=80andScore9015这是一个关系表达式这是一个逻辑表达式4.2.2条件查询字符匹配运算LIKE关键字的语法格式:match_expression[NOT]LIKEpattern[ESCAPEescape_character]16运算符描述示例%包含零个或多个字符的任意字符串addressLIKE'%公司%'将查找地址任意位置包含公司的所有职员_下划线,对应任何单个字符employee_nameLIKE'_海燕'将查找以“海燕”结尾的所有6个字符的名字[]指定范围(如[a-f])或集合(如[abcdef])中的任何单个字符employee_nameLIKE'[张李王]海燕'将查找张海燕、李海燕、王海燕等[^]不属于指定范围或集合的任何单个字符employee_nameLIKE'[^张李]海燕'将查找不姓张、李的名为海燕的职员4.2.2条件查询例4.8:查询st_info表中姓“张”的男学生的信息。SELECT*FROMst_infoWHEREst_nameLIKE'张%'andst_sex='男'其中等价的形式:WHEREleft(st_name,1)='张'ANDst_sex='男'例4.9:在St_Info表中查询学号倒数第3个数为1,倒数第1个数在1~4之间的学生的学号、姓名、班级信息。SELECTSt_ID,St_Name,Cl_NameFROMSt_InfoWHERESt_IDlike'%1_[1234]'174.2.2条件查询例4.10:在St_Info表中,查询所有“口腔”班,名叫“小玲”的学生的学号、姓名、班级信息。SELECTSt_ID,St_Name,Cl_NameFROMSt_InfoWHEREst_namelike'_小玲%'andCl_Namelike'口腔%'例4.11:在St_Info表中,查询学生“张好然”和“郑远月”学生的信息。要求显示学号、姓名、班级和电话号码。注意此表中是用下划线(_)将区号与电话号码连接的。SELECTSt_ID,St_Name,Cl_Name,TelephoneFROMSt_InfoWHERETelephonelike'%#_%'ESCAPE'#'/*定义#为转义字符*/184.2.2条件查询范围比较运算语法格式:expression[NOT]BETWEENbegin_expressionANDend_expression例4.12:在St_Info表中查询1984年出生的学生信息。SELECT*FROMSt_InfoWHEREBorn_DateBETWEEN'1984-1-1'and'1984-12-31'194.2.2条件查询例4.13:在st_info表中,查询年龄在27到29岁之间的学生信息。SELECT*FROMst_infoWHEREYEAR(GETDATE())-YEAR(born_date)BETWEEN27AND2920此句的等价形式是什么?4.2.2条件查询若要查询的是列表中的数据,可以使用IN关键字(子查询中用得较多,P111中介绍)语法格式:expression[NOT]IN(expression[,...n])例4.14:在st_info表中,查询班级名称为“法学0501”、“法学0601”和“材料科学0601”班的学生信息。SELECT*FROMst_infoWHEREcl_nameIN('法学0501','法学0601','材料科学0601')214.2.2条件查询空值比较运算例4.15:对st_info表,查询所有Telephone为空值的学生的信息。SELECT*FROMst_infoWHERETelephoneISNULL22可以写成:Telephone=NULL空值表示值未知。空值不同于空白或零值。没有两个相等的空值。4.2.3查询结果处理排序输出(ORDERBY)语法格式:ORDERBYorder_by_expression1[ASC|DESC][,order_by_expression2[ASC|DESC]][,…]]例4.16:对st_info表,按性别顺序列出学生的信息,性别相同的再按年龄由小到大排序。SELECT*FROMst_infoORDERBYst_sex,born_dateDESC234.2.3查询结果处理重定向输出(INTO)语法格式:INTOnew_table例4.17:对s_c_info表,查询选修“大学计算机基础”(课程号为“9710011”)课程的所有学生信息,并将结果存入newstudent表中。SELECTst_id学号,c_no大学计算机基础,score成绩INTOnewstudentFROMs_c_infoWHEREc_no='9710011'244.2.3查询结果处理输出合并(UNION)语法格式:[UNION[ALL]SELECT语句]例4.18:对c_info表,列出课程编号为“9710011”或“9720033”的课程名称和学分。SELECTc_name,c_creditFROMc_infoWHEREc_no='9710011'UNIONSELECTc_name,c_creditFROMc_infoWHEREc_no='9720033'254.2.3查询结果处理分组统计(GROUPBY)与筛选(HAVING)语法格式:GROUPBYgroup_by_expression1[,group_by_expression2][,…]4.19:对st_info表,分别统计男女学生人数。SELECTst_sex,COUNT(st_sex)FROMst_infoGROUPBYst_sex4.21:对s_c_info表,查询平均成绩大于80的课程编号和平均成绩。SELECTc_no,AVG(score)as平均成绩FROMs_c_infoGROUPBYc_noHAVINGAVG(score)=8026WHERE与HAVING两者的区别4.2.3查询结果处理使用COMPUTE和COMPUTEBY子句汇总语法格式:COMPUTErow_aggregate(column_name)[,row_aggregate(column_name)...][BYcolumn_name[,column_name...]]例4.22:列出st_info表中“材料科学0601”学生的年龄及平均年龄(即年龄的明细行和汇总行)。SELECTst_id,YEAR(GETDATE())-YEAR(born_date)as年龄FROMst_infoWHEREcl_name='材料科学0601'ORDERBYst_idCOMPUTEsum(YEAR(GETDATE())-YEAR(born_date))27函数嵌套4.2.3查询结果处理例4.23:对st_info表中“材料科学0601”和“口腔(七)0601”学生的年龄,生成分组汇总行和明细行。SELECTst_id,YEAR(GETDATE())-YEAR(born_date)as年龄FROMst_infoWHEREcl_name='材料科学0601'ORcl_name='口腔(七)0601'ORDERBYcl_nameCOMPUTEsum(YEAR(GETDATE())-YEAR(born_date))BYcl_name28注意:COMPUTE和COMPUTEBY区别4.3嵌套查询4.3.1单值嵌套查询4.3.2多值嵌套查询294.3嵌套查询在一个SELECT语句的WHERE子句或HAVING子句中嵌套另一个SELECT语句的查询称为嵌套查询,又称子查询。嵌套查询的类
本文标题:第4章数据库查询.
链接地址:https://www.777doc.com/doc-2109781 .html