您好,欢迎访问三七文档
2020/3/18信息学院公共教学部1第四章关系数据库语言SQL4.1查询语句4.2数据更新4.3数据定义学习目标:能够熟练掌握SQL语言并能够在实际工作中进行灵活的应用。2020/3/18信息学院公共教学部2SQL是结构化查询语言(StructuredQueryLanguage)的缩写,美国国家标准局ANSI在1986年将SQL作为关系数据库系统的标准语言,后被国际标准化组织(ISO)采纳为国际标准。现在很多大型数据库都实现了SQL语言。SQL概述2020/3/18信息学院公共教学部3SQL和SQLSERVER的区别SQL(structuredquerylanguage)结构化查询语言。它是一种标准,不是一种软件SQLSERVER是数据库管理系统的一种它是一种软件,这种软件在遵循SQL这种标准,很多数据库管理软件及开发工具都支持SQL这种标准。2020/3/18信息学院公共教学部4SQL语言的特点SQL语言的特点1.综合统一2.高度非过程化3.面向集合的操作方式4.以同一种语法结构提供两种使用方法5.语言简洁,易学易用2020/3/18信息学院公共教学部5表4.1SQL语言的动词SQL功能动词数据定义CREATE,DROP,ALTER数据查询SELECT数据操纵INSERT,UPDATEDELETE数据控制GRANT,REVOKE2020/3/18信息学院公共教学部6SQL语句的书写准则对大小写不敏感一条语句可以写成一行或多行关键字不能在行与行之间分开数据项例如属性项、表、视图项等同时列出时,分隔符用逗号;字符或字符串常量要用单引号定界。2020/3/18信息学院公共教学部7基本操作对象基本表:本身独立存在的表,SQL中一个关系就对应一个表;一个表对应一个存储文件;一个表可以带若干索引。视图:从一个或几个基本表中导出的表,本身不独立存放在数据库中,数据库只存储视图的定义,视图相当于一个虚表,用户可以在视图上在定义视图。索引:为快速访问数据,而在包含数据的表中增加的一种组织,分为聚簇索引和非聚簇索引。指索引项的顺序与表中记录的物理顺序一致的索引组织例如:人事档案(员工姓名、地址、电话号码、社会安全号、工资)其中只有姓名、地址、电话号码是公开信息。可以生成不包含社会安全号和工资的视图,对表和视图设置不同的权限2020/3/18信息学院公共教学部84.1查询语句4.1.1基本查询4.1.2使用列表达式4.1.3WHERE从句的进一步使用4.1.4数据汇总4.1.5连接查询4.1.6嵌套查询4.1.7联合查询4.1.8使用系统内置函数的查询2020/3/18信息学院公共教学部9SQL的核心是数据查询。对于数据库的查询操作是通过SELECT查询命令实现的,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行。2020/3/18信息学院公共教学部10语句格式SELECT[ALL|DISTINCT]目标列表达式[,目标列表达式]…FROM表名或视图名[,表名或视图名]…[WHERE条件表达式][GROUPBY列名1[HAVING条件表达式]][ORDERBY列名2[ASC|DESC]];指定要显示的属性列指定查询对象指定查询条件查询结果按指定列的值分组筛选出只有满足指定条件的组对查询结果表按指列值的升序或降序排序2020/3/18信息学院公共教学部114.1.1基本查询1、简单的无条件查询例:Select*fromstu_info把stu_info表中的所有记录的所有属性查询出来2020/3/18信息学院公共教学部12SELECT*FROMSTU_INFOWHEREXSH=’06’4.1.1基本查询2、简单的条件查询例4.2:从edu_d的数据库表stu_info中查找包含所有列的土建学院(学院代号xsh为06)的学生名单。“*”表示查询所有列字符或字符串用单引号引起来相当于选择运算2020/3/18信息学院公共教学部13例4.3:从数据库表STU_INFO中查询土建学院(XSH=’06’)的学生的学号、姓名、性别、学院代号信息。SELECTXH,XM,XBM,XSHFROMSTU_INFOWHEREXSH=’06’属性名用逗号隔开3、查询语句中投影运算的实现2020/3/18信息学院公共教学部144.1.2使用列表达式查询指定的列,除了可以使用*或者属性列表以外,还可以使用列表达式。1、计算列值例4.4:在成绩表XK中按满分150分计算学生成绩并显示学号、课程号、教师号SELECTXH,KCH,JSH,’150成绩’=KSCJ*1.50FROMXK利用列表达式实现不同列的连接例4.5SELECT'学号',XH,XM+XSH,BHFROMSTU_INFOWHEREXBM=‘男’ORDERBYXHDESC在SQLServer2000系统的企业管理器中运行后系统自动将语句的写法改成了:SELECT'学号'ASEXPR1,XH,XM+XSHASEXPR2,BHFROMSTU_INFOWHERE(XBM=‘男’)ORDERBYXHDESC2020/3/18信息学院公共教学部16注意:更改的是查询结果显示的列标题,这是列的别名,而不是更改了数据库表或视图的列标题。2、修改查询结果的列标题例如:改写例4.5SELECTXHAS学号,XM+XSHAS姓名和学院代码,BHAS班级FROMSTU_INFOWHEREXBM=‘男’ORDERBYXHDESC2020/3/18信息学院公共教学部17另一种形式:SELECT学号=XH,姓名和学院代码=XM+XSH,班级=BHFROMSTU_INFOWHEREXBM=‘男’ORDERBYXHDESC注意:当自定义的列标题中含有空格时,必须用引号将标题括起来。2020/3/18信息学院公共教学部18采用别名的目的:数据库表中的列名用英文字母表示更方便,但是为了在查询时,让用户看到的结果更直观,所以可以采用中文别名。2020/3/18信息学院公共教学部19查询工作的关键就在通过分析怎样把实际问题中的自然语言描述转化为1)从哪个表中查询即:from后的一项2)要查询哪些列即:select后的一项3)要查询的条件即:where后的一项完成查询工作的三个关键步骤第3步最复杂4.1.3WHERE从句的进一步使用WHERE从句中,可以使用一个或者多个逻辑表达式限制查询数据的范围。表4-1常用查询条件一览表查询条件谓词比较=,,,=,=,!=,,!,!;NOT+上述比较运算符确定范围Betweenand,notbetweenand确定集合In,notin字符匹配Like,notlike空值Isnull,isnotnull多重条件And,or2020/3/18信息学院公共教学部211、表达式比较例如:SELECT*FROMXKWHEREKSCJ602、确定范围例4.6:查询数据库表XK中考试成绩在60-70之间的学号、课程号、成绩SELECTXH学号,KCH课程号,KSCJ成绩FROMXKWHEREKSCJBETWEEN60AND702020/3/18信息学院公共教学部223、确定集合例4.7:查询应电0601、机专0601班的学生的信息SELECT学号,姓名,班级FROMmingdanWHERE班级IN(’应电0601’,’机专0601’)当与指定的值表中的任何一个匹配时,返回TRUE,否则返回FALSE2020/3/18信息学院公共教学部234、字符匹配用NOTLIKE和LIKE与通配符%和_搭配,其运算对象可以是CHAR,VARCHAR,TEXT,NTEXT,DATETIME和SMALLDATETIME类型的数据。表示任意长度的字符串表示人一单个字符例如:1、SELECT*FROMmingdanWHERE班级LIKE‘应化%’2、SELECT*FROMmingdanWHERE姓名LIKE‘__红’2020/3/18信息学院公共教学部245、涉及空值的查询例如:SELECT*FROMmingdanWHERE班级ISNULL6、多重条件查询例如:SELECT*FROMmingdanWHERE班级LIKE‘应化%’AND姓名LIKE‘%红’2020/3/18信息学院公共教学部25一般格式:SELECT列名1,列名2,…FROM表名WHERE条件表达式ORDERBY列名1[ASC|DESC][,列名2[ASC|DESC]…]升序(默认)降序4.1.4、设定排序条件2020/3/18信息学院公共教学部26例4.4:从数据库EDU_D的表STU_INFO中查询建9809班学生情况并按学号排序。SELECT*FROMSTU_INFOWHEREBH=‘建9809’ORDERBYXHSELECT*FROMSTU_INFOWHEREBH=‘建9809’ORDERBYZYH,XHDESC按多列排序:先按专业升序排列,然后同一专业的记录按学号进行降序排列注意:(1)ORDERBY子句不改变基本表中行或者列的顺序,只改变查询结果的排列顺序。(2)ORDERBY子句制定排序的列必须出现在SELECT子句的列表达式中。(3)排序是查询语句的最后一步工作,所以要把ORDERBY子句一般放在查询语句的最后。2020/3/18信息学院公共教学部28在要查询的属性名前加DISTINCT,以去掉结果中重复的值。例:SELECTDISTINCT班级FROMmingdan注意:在一个SELECT语句中,DISTINCT只能出现一次,并且DISTINCT必须写在所有列名之前。5、限定重复记录2020/3/18信息学院公共教学部294.1.4数据汇总1、聚合函数表4-2聚合函数一览表聚合函数含义Count([distinct|all]*)统计元组(记录)个数Count([distinct|all]列名)统计一列中不为NULL值的个数Sum([distinct|all]列名)求一列值的总合(必须为数值型)Avg([distinct|all]列名)求一列值的平均数(必须为数值型)Max([distinct|all]列名)求一列值中的最大值Min([distinct|all]列名)求一列值中的最小值表示去掉结果中的重复行指定ALL选项或不指定则表示保留重复行2020/3/18信息学院公共教学部30例4.8:查询学生总数SELECTCOUNT(*)AS学生数FROMmingdan或者SELECTCOUNT(XH)FROMmingdan例4.9:已知XK中高等数学的代号是090101,查询学生选修高等数学的平均成绩SELECTAVG(KSCJ)AS‘高等数学平均成绩’FROMXKWHEREKCH=‘090101’因为XH是该表的主键,不允许有空值查询每个班的学生人数?2020/3/18信息学院公共教学部31例4.10:查询学生选修高等数学的最高分和最低分SELECTMAX(KSCJ)AS‘高等数学最高分’,MIN(KSCJ)AS‘高等数学最低分’FROMXKWHEREKCH=‘090101’注意:在查询中,除COUNT(*)外,所有的聚合函数都不包括取值为空的行。2020/3/18信息学院公共教学部322、GROUPBY子句GROUPBY子句用于对表或视图中数据的查询结果按某一列或多列值分组,值相等的分为一组2、GROUPBY子句例4.11:在表mingdan中查询各班的学生人数SELECT班级,COUNT(XH)AS人数FROMmingdanGROUPBY班级注意:SELECT子句的列表中只能包含在GROUPBY中指出的列或在聚合函数中指定的列。GROUPBY子句用于对表或视图中数据的查询结果按某一列或多列值分组,值相等的分为一组GROUPBY子句常与聚合函数联合使用,用于针对分组的统计汇总2020/3/18信息学院公共教学部332、GROUPBY子句举例:从表stu中统计xsh=‘0015’中男生和女生的人数Selectcount(
本文标题:SQL查询语句
链接地址:https://www.777doc.com/doc-4449930 .html