




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六讲SQL简单查询语句鲁宁学时:2节教学内容6.1SQL语言概述6.2数据查询6.2.1数据查询6.2.2数据查询命令6.2.3应用实例6.3SQL数据更新功能6.3.1插入命令6.3.2更新命令6.3.3删除命令Monday,February3,20256.1SQL概述SQL(StructureQuerylanguage)是结构化查询语言的英文缩写。SQL语言是一种标准的关系数据库查询语言,充分体现了关系数据语言的特点和优点。Monday,February3,2025SQL语言概述SQL语言集数据定义、数据操纵和数据控制功能于一体。其主要特点有5个方面。1.综合统一2.高度非过程化3.面向集合的操作方式4.两种使用方式5.语言简洁,易学易用:完成数据定义、数据操纵、数据控制的核心功能只用了9条命令。9条SQL命令据定义命令(3条):CREATE,DROP,ALTER数据查询命令(1条):SELECT数据操纵命令(3条):INSERT,UPDATE,DELETE数据控制命令(2条):GRANT,REVOKEMonday,February3,20256.2数据查询6.2.1数据查询SQL查询模块结构:SELECT<字段列表>FROM<单表或多表>[WHERE<查询条件>]其中:(1)SELECT短语表示查询输出结果字段。(2)FROM短语表示查询来源。可以是数据库表、自由表或视图。(3)WHERE短语表示查询应满足的条件。Monday,February3,2025Select查询格式SELECT
select_list[INTOTablenew_table_name]FROM
table_list[WHERE
search_conditions][GROUPBY
group_by_list][HAVINGsearch_conditions][ORDERBY
order_list[ASC|DESC]]Monday,February3,2025SELECT语句的执行过程根据WHERE子句的连接和检索条件,从FROM子句指定的基本表或视图中选取满足条件的元组再按照SELECT子句中指定的列表达式,选出元组中的属性值形成结果表。如果有GROUP子句,则将查询结果按照指定<列名>相同的值进行分组;如果GROUP子句后有HAVING短语,则只输出满足HAVING条件的元组;如果有ORDER子句,查询结果还要按照指定<列名>的值进行排序。Monday,February3,2025参数说明select_list:表示需要检索的字段的列表,字段名称之间使用逗号分隔。在这个列表中不但可以包含数据源表或视图中的字段名称,还可以包含其他表达式,例如常量或Transact-SQL函数。如果使用*来代替字段的列表,那么系统将返回数据表中的所有字段。INTOTablenew_table_name:该子句将指定使用检索出来的结果集创建一个新的数据表。New_table_name为这个新数据表的名称。FROMtable_list:使用这个句子指定检索数据的数据表的列表。Monday,February3,2025参数说明GROUPBYgroup_by_list:GROUPBY子句根据参数group_by_list提供的字段将结果集分成组。HAVINGsearch_conditions:HAVING子句是应用于结果集的附加筛选,search_conditions将用来定义筛选条件。从逻辑上讲,HAVING子句将从中间结果集对记录进行筛选,这些中间结果集是用SELECT语句中的FROM、WHERE或GROUPBY子句创建的。ORDERBYorder_list[ASC|DESC]:ORDERBY子句用来定义结果集中的记录排列的顺序。Order_list将指定排序时需要依据的字段的列表,字段之间使用逗号分隔。ASC和DESC关键字分别指定记录是按升序还是按降序排序Monday,February3,20256.2.2数据查询命令SELECT[ALL/DISTINCT][TOP<表达式>[PERCENT]][<别名>.]<列表达式>[AS<栏名>][,[<别名.>]<列表达式>[AS<栏名>]…]FROM[<数据库名!>]<表名>[,[<数据库名!>]<表名>…][INNER/LEFT/RIGHT/FULLJOIN[<数据库名!>]<表名>[ON<连接条件>…]][[INTO<新表名>]/[TOFILE<文件名>/TOPRINTER/TOSCREEN]][WHERE<连接条件>[AND<连接条件>…][AND/OR<筛选条件>[AND/OR<筛选条件>…]]][GROUPBY<列名>[,<列名>…]][HAVING<筛选条件>][ORDERBY<列名>[ASC/DESC][,<列名>[ASC/DESC]…]];Monday,February3,2025参数说明ALL/DISTINCT:DISTINCT表示去掉重复的行。缺省时为ALL表示查询结果中所有的行被显示。
TOP<表达式>[PERCENT]:指定查询结果包括特定数目的行数,或者包括全部行数的百分比。使用TOP子句时必须同时使用ORDERBY子句。[<别名>.]<列表达式>[AS<栏名>]:<列表达式>可以是FROM子句中指定数据表(可用<别名>引用)中的字段名,也可以是表达式。AS<栏名>表示可以给查询结果的列名重新命名。FROM[<数据库名!>]<表名>:列出查询要用到的所有数据表。<数据库名!>指定包含该表的非当前数据库。
Monday,February3,2025参数说明INNER/LEFT/RIGHT/FULLJOIN[<数据库名!>]<表名>[ON<连接条件>…]:连接查询INNERJOIN指定查询结果中只包括那些多个表中都有的行;LEFTJOIN指定查询结果中包括JOIN关键字左边表中所有的行,和JOIN关键字右边表中与这些行匹配的行RIGHTJOIN指定查询结果中包括JOIN关键字右边表中所有的行,和JOIN关键字左边表中与这些行匹配的行FULLJOIN指定查询结果中包括所有表中的所有匹配与不匹配的行;ON<连接条件>指定表的连接条件。Monday,February3,2025参数说明[INTO<新表名>]/[TOFILE<文件名>/TOPRINTER/TOSCREEN]:指定查询结果存放的地方,可以是数据表或是文本文件或输出到打印机或在屏幕显示。WHERE<连接条件>[AND<连接条件>…][AND/OR<筛选条件>[AND/OR<筛选条件>…]]:在多表查询时,WHERE<连接条件>用于指定数据表之间联结的条件;WHERE<筛选条件>指定在查询结果中的记录必须满足的条件。GROUPBY<列名>[,<列名>…][HAVING<筛选条件>]:把查询结果中的行按一个或多个列的值分组;可以指定在查询结果中的各组应满足的条件。ORDERBY<列名>[ASC/DESC][,<列名>[ASC/DESC]…]:用于指定一个或多个字段数据作为排序的基准,ASC为升序;DESC为降序,默认为升序。没有此项,查询结果不排序。Monday,February3,2025示例数据表结构ClassInfoStudInfoCourseInfoStudScoreInfoMonday,February3,2025示例数据表关系图Monday,February3,2025示例数据ClassInfo(班级信息表)StudInfo(学生信息表)Monday,February3,2025示例数据CourseInfo(课程信息表)StudScoreInfo(学生成绩信息表)Monday,February3,2025简单查询&&查询学生信息表中的所有元组 Select*FromStudInfo&&用“*”表示数据表的全部列名,与下面语句等效 SelectStudNo,StudName,StudSex,StudBirthDay,ClassIDFromStudInfo&&查询部分字段,投影查询 SelectStudNo,StudSex,StudName,ClassIDFromStudInfo&&使用别名查询 SELECTStudNoAs学号,StudNameAs姓名,ClassID
班级编号FromStudInfoMonday,February3,2025简单查询在Select选择列表中使用常量 SelectStudNo,CourseID,StudScore,'99070470',20FromStudScoreInfo在Select选择列表中使用表达式 SelectStudNo,CourseID,StudScore,StudScore+5AsNewScore,StudScore*0.8,StudNo+CourseID,”学号:”+StudNo,6*5,'GOOD'FromStudScoreInfo在Select选择列表中使用函数 SelectStudNo,StudName,Left(StudName,2)as姓,SubStr(StudName,3),Len(Alltrim(StudName))FromStudInfoMonday,February3,2025简单查询Select*FromStudScoreInfo&&使用Distinct去掉重复的行SelectDistinctStudNoFromStudScoreInfo&&查询最前记录注:使用TOP子句时,同时要使用ORDERBY子句SelectTop10*FromStudInfoOrderByStudNoSelectTop10*FromStudInfoOrderByStudNo
DescSelectTop20Percent*FromStudInfoOrderByStudNo
DescSelectTop20PercentStudNo,StudNameFromStudInfoOrderByStudNo
DescMonday,February3,2025条件查询当要在数据表中找出满足某些条件的行时,则需使用WHERE子句指定查询条件WHERE子句条件通常通过三部分来描述:列名、比较运算符、列名或常数运
算
符含
义=,>,<,>=,<=,!=,<>比较大小AND,OR,NOT多重条件BETWEENAND确定范围IN确定集合LIKE字符匹配常用比较运算符Monday,February3,2025条件查询示例1.比较大小Select*FromStudInfoWhereStudno='99070470'Select*FromStudInfoWhereStudNo<'99070410'Select*FromStudScoreInfoWhereStudScore>=60Select*FromStudScoreInfoWhereStudScore!=802.多重条件查询当WHERE子句需要指定一个以上的查询条件时,则需要使用逻辑运算符AND,OR和NOT将其连接成复合的逻辑表达式。其优先级由高到低为:NOT,AND,OR,用户可以使用括号改变优先级。Monday,February3,2025多重条件查询Select*FromStudInfoWhereStudno='99070401'OrStudNo='99070470'Select*FromStudInfoWhereStudno='99070401'OrStudName='李伟'Select*FromStudInfoWhereval(right(alltrim(Studno),2))<15OrLeft(StudName,2)='李'Select*FromStudScoreInfoWhereStudScore>=80AndStudScore<90Select*FromStudScoreInfoWhereStudScore>=80OrStudScore<60Monday,February3,2025多重条件查询Select*FromStudScoreInfoWhereStudScore>=80OrStudScore<60AndStudNo='99070470'Select*FromStudScoreInfoWhere(StudScore>=80OrStudScore<60)AndStudNo='99070470'Select*FromStudScoreInfoWhereNot(StudScore>=80OrStudScore<60)AndStudNo='99070470'Monday,February3,2025简单连接查询&&双表关联 Select*FromStudInfo,ClassInfoWhereStudInfo.ClassID=ClassInfo.ClassID&&双表关联,选择部分字段
SelectStudInfo.StudNo,StudInfo.StudName,ClassInfo.ClassID,ClassInfo.ClassNameFromStudInfo,ClassInfoWhereStudInfo.ClassID=ClassInfo.ClassID&&双表关联,条件筛选 Select*FromStudInfo,ClassInfoWhereStudInfo.ClassID=ClassInfo.ClassIDAndStudInfo.StudSex='男'Monday,February3,2025简单连接查询&&双表关联,使用表别名,字段别名SelectS.StudNo,S.StudNameAs姓名,C.ClassID,C.ClassNameAs班级名称FromStudInfoASS,ClassInfoCWhereS.ClassID=C.ClassIDSelectS.StudNo
学号,S.StudNameAS姓名,SS.CourseIDAS课程编号,StudScore
成绩FromStudInfo
S,StudScoreInfoSSWhereS.StudNo=SS.StudNoMonday,February3,2025连接查询示例—多表关联&&三个表关联查询Select
StudInfo.StudNo,StudInfo.StudName,ClassInfo.ClassID,ClassInfo.ClassName,StudScoreInfo.CourseID,StudScoreInfo.StudScore;From
StudInfo,ClassInfo,StudScoreInfo;Where
StudInfo.ClassID=ClassInfo.ClassID;AndStudInfo.StudNo=StudScoreInfo.StudNoMonday,February3,2025连接查询示例—多表关联&&四个表关联查询SelectS.StudNo,S.StudName,Ci.CourseID,Ci.CourseName,SI.StudScore,C.ClassID,C.ClassName;From
StudInfo
S,ClassInfo
C,CourseInfo
CI,StudScoreInfoSIWhere
S.ClassID=C.ClassIDAndS.StudNo=SI.StudNoAndCI.CourseID=SI.CourseIDAndS.StudNo='99070470'Monday,February3,20253.范围查询&&使用Between…And… Select*FromStudInfoWhereStudNoBetween'99070401'And'99070410' Select*FromStudScoreInfoWhereStudScoreBetween70And80&&等价于下面语句 Select*FromStudScoreInfoWhereStudScore>=70.And.StudScore<=80Select*FromStudScoreInfoWhereStudScoreBetween70And80AndStudNo='99070470'Select*FromStudScoreInfoWhereNotStudScoreBetween70And80AndStudNo='99070470'Monday,February3,20254.集合查询利用“IN”操作可以查询属性值属于指定集合的元组。 Select*FromStudInfoWhereStudNoIn('99070470','99070401')&&等价于 Select*FromStudInfoWhereStudNo='99070470'OrStudNo='99070401' Select*FromStudScoreInfoWhereStudNoIn('99070470','99070401')AndStudScore>80 Select*FromStudScoreInfoWhereStudNoNotIn('99070470','99070401')AndStudScore>80&&等价于 Select*FromStudScoreInfoWherenot(StudNo='99070470'orStudNo='99070401')AndStudScore>80Monday,February3,20255.模糊查询以上例子均属于完全匹配查询,当不知道完全精确的値时,用户还可以使用LIKE或NOTLIKE进行部分匹配查询(也称模糊查询)。LIKE定义的一般格式为:<属性名>LIKE<字符串常量>属性名必须为字符型,字符串常量的字符可以包含如下两个特殊符号:%:表示任意长度的字符串;_:表示任意一个字符(在有的DBMS系统中,表示一个汉字需要两个下画线,而另一些系统则只需一个下画线。Monday,February3,2025模糊查询示例Select*FromStudInfoWhereStudNameLike'李%'Select*FromStudInfoWhereStudNameLike'李_'Select*FromStudInfoWhereStudNameLike'_红_'Select*FromStudInfoWhereStudNameLike'%红%'Select*FromStudInfoWhereStudNameLike'_红%'OrStudNameLike'%丽'Monday,February3,2025统计查询说明:在以上函数中,可以使用DISTINCT短语或ALL短语如果指定了DISTINCT短语,则表示在计算时取消指定列中的重复值如果不指定DISTINCT短语或ALL短语,则取默认值ALL,表示不取消重复值。常用统计函数及其功能函
数
名
称功
能AVG按列计算平均值SUM按列计算值的总和COUNT按列值统计个数MAX求一列中的最大值MIN求一列中的最小值Monday,February3,2025统计查询示例&&统计学号为99070470的平均分 SelectStudNo,Avg(StudScore)AsAvgScoreFromStudScoreInfoWhereStudNo='99070470'&&统计学号为99070470的总分 SelectStudNo,Sum(StudScore)AsSumScoreFromStudScoreInfoWhereStudNo='99070470'&&统计学号为99070470的总分、平均分、课程门数 SelectStudNo,Sum(StudScore)AsSumScore,Avg(StudScore)AsAvgScore,;Count(*)AsCountCourseFromStudScoreInfoWhereStudNo='99070470'Monday,February3,2025统计查询示例Select
StudNo,;Sum(StudScore)AsSumScore,;Avg(StudScore)AsAvgScore,;Max(StudScore)AsMaxScore,;Min(StudScore)AsMinScore,;Count(*)AsCountCourse,;Sum(StudScore)/Count(*)As平均分;From
StudScoreInfo;Where
StudNo='99070470'Monday,February3,2025分组查询GROUPBY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。示例: SelectStudNo,Avg(StudScore)AsAvgScoreFromStudScoreInfoGroupByStudNoGROUPBY子句按学号的值分组,所有具有相同学号的元组为一组,对每一组使用函数Avg进行计算,统计出各学生的平均数。若在分组后还要按照一定的条件进行筛选,则需使用HAVING子句。Monday,February3,2025GroupBy示例&&统计各学生的总分、平均分、最高分、最低分、课程门数 SelectStudNo,Sum(StudScore)AsSumScore,Avg(StudScore)AsAvgScore,Max(StudScore)AsMaxScore,Min(StudScore)AsMinScore,Count(*)AsCountCourseFromStudScoreInfoGroupByStudNoMonday,February3,2025分组示例SelectS.StudNo,StudName,StudSex,Sum(StudScore)AsSumScore,Avg(StudScore)AsAvgScore,Max(StudScore)AsMaxScore,Min(StudScore)AsMinScoreCount(*)AsCountCourse;FromStudInfo
S,StudScoreInfoSI;WhereS.StudNo=SI.StudNoGroupByStudNoMonday,February3,2025Having示例&&查询平均分大于80的学号和平均分 SelectStudNo,Avg(StudScore)AsAvgScore,Count(*)CourseCount;FromStudScoreInfo;GroupByStudNo;HavingAvg(StudScore)>80&&看看下面的Where子句与上面的Having子句执行的区别 SelectStudNo,Avg(StudScore)AsAvgScore,Count(*)CourseCount;FromStudScoreInfoWhereStudScore>80;GroupByStudNo
Monday,February3,2025WHERE与HAVING子句区别当在一个SQL查询中同时使用WHERE子句、GROUPBY子句和HAVING子句时,其顺序是WHERE,GROUPBY,HAVING。WHERE与HAVING子句的根本区别在于作用对象不同:WHERE子句作用于基本表或视图,从中选择满足条件的元组;HAVING子句作用于组,选择满足条件的组,必须用于GROUPBY子句之后,但GROUPBY子句可以没有HAVING子句。Monday,February3,2025Having和Where同时使用Select
StudNo,;Avg(StudScore)AsAvgScore,;Count(*)CourseCount;From
StudScoreInfo;Where
StudScore>60AndStudScore<=90;GroupBy
StudNo;Having
Avg(StudScore)>70AndAvg(StudScore)<=80Monday,February3,2025查询的排序当需要对查询结果排序时,可以使用ORDERBY子句对查询的结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序。ORDERBY子句必须出现在其他子句之后。示例:Select*FromStudScoreInfoWhereStudno='99070470'OrderbyStudScore
Select*FromStudScoreInfoWhereStudno='99070470'OrderbyStudScore
DescSelect*FromStudScoreInfoWhereOrderbyStudScore
Desc,StudNo
AscMonday,February3,2025排序示例SelectStudNo,Avg(StudScore)AsAvgScore
FromStudScoreInfoGroupByStudNo OrderbyAvg(StudScore)SelectStudNo,;
Sum(StudScore)AsSumScore,;
Avg(StudScore)AsAvgScore,;
Max(StudScore)AsMaxScore,;
Min(StudScore)AsMinScore,; Count(*)AsCountCourse; FromStudScoreInfo;GroupByStudNoOrderbyAvgScoreMonday,February3,2025综合示例Select
StudNo,;Sum(StudScore)AsSumScore,;Avg(StudScore)AsAvgScore,;Max(StudScore)AsMaxScore,;Min(StudScore)AsMinScore,;Count(*)AsCountCourse;From
StudScoreInfo;Where
StudNoin('99070410','99070470')AndStudScoreBetween60And90;GroupBy
StudNo;Having
Avg(StudScore)>80;Orderby
AvgScore
DescMonday,February3,20256.3SQL的数据更新功能SQL语言的数据操纵也称为数据更新,主要包括插入数据、修改数据和删除数据三种语句。6.3.1插入数据记录插入数据是把新的记录插入到一个存在的表中。插入数据使用语句INSERTINTO,可插入一条记录,也可插入多条记录。Monday,February3,20251.插入一行新记录语法
INSERTINTO<表名>[(<字段名1>[,<字段名2>…])]VALUES(<表达式1>[,<表达式2>…])功能将新记录插入到指定的表中,分别用表达式1、表达式2等为字段名1、字段名2等赋值。示例
InsertIntoStudInfo(StudNo,StudName,StudSex,StudBirthDay,ClassID)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 船舶租赁与运营合同
- 个人车位出租合同协议
- 个人无抵押借款合同
- 承接前期物业管理服务合同
- 土建工程承包合同范
- 广西电力职业技术学院《中小学美术教学设计与案例分析》2023-2024学年第二学期期末试卷
- 5、《平行与垂直》(教学设计)-2024-2025学年四年级上册数学人教版
- 汉中职业技术学院《图形图像软件》2023-2024学年第二学期期末试卷
- 苏州卫生职业技术学院《工程测量B》2023-2024学年第二学期期末试卷
- 广东青年职业学院《能源动力(动力工程)领域工程伦理》2023-2024学年第二学期期末试卷
- 电网工程设备材料信息参考价(2024年第四季度)
- 2025年江苏农牧科技职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 数据中心运维服务投标方案(技术标)
- 瑞幸对赌协议
- 幼儿园一日活动流程教师培训
- 征信入校园教育课件
- 《你当像鸟飞往你的山》读书分享读书分享笔记
- 《电子商务系统分析与设计》课件-电子商务系统规划
- 部编人教版四年级下册道德与法治全册教案
- 2024年湖南铁道职业技术学院单招职业技能测试题库及答案解析word版
- 健康保险学PPT完整全套教学课件
评论
0/150
提交评论