版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/10/21四关系数据库语言SQL
4.1查询语句
4.2数据更新
4.3数据定义学习目标:能够熟练掌握SQL语言并能够在实际工作中进行灵活应用。第1页/10/22SQL是结构化查询语言(StructuredQueryLanguage)缩写,美国国家标准局ANSI在1986年将SQL作为关系数据库系统标准语言,后被国际标准化组织(ISO)采纳为国际标准。现在很多大型数据库都实现了SQL语言。SQL概述第2页/10/23SQL和SQLSERVER区分SQL(structuredquerylanguage)结构化查询语言。它是一个标准,不是一个软件SQLSERVER是数据库管理系统一个它是一个软件,这种软件在遵照SQL这种标准,很多数据库管理软件及开发工具都支持SQL这种标准。第3页/10/24SQL语言特点SQL语言特点1.综合统一2.高度非过程化3.面向集合操作方式4.以同一个语法结构提供两种使用方法5.语言简练,易学易用第4页/10/25第5页/10/26SQL语句书写准则对大小写不敏感一条语句能够写成一行或多行关键字不能在行与行之间分开数据项比如属性项、表、视图项等同时列出时,分隔符用逗号;字符或字符串常量要用单引号定界。第6页/10/27基本操作对象基本表:本身独立存在表,SQL中一个关系就对应一个表;一个表对应一个存放文件;一个表能够带若干索引。视图:从一个或几个基本表中导出表,本身不独立存放在数据库中,数据库只存放视图定义,视图相当于一个虚表,用户能够在视图上在定义视图。索引:为快速访问数据,而在包含数据表中增加一个组织,分为聚簇索引和非聚簇索引。
指索引项次序与表中统计物理次序一致索引组织比如:人事档案(员工姓名、地址、电话号码、社会安全号、工资)其中只有姓名、地址、电话号码是公开信息。可以生成不包含社会安全号和工资视图,对表和视图设置不一样权限第7页/10/284.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使用系统内置函数查询第8页/10/29SQL关键是数据查询。对于数据库查询操作是经过SELECT查询命令实现,它基本形式由SELECT-FROM-WHERE
查询块组成,多个查询块能够嵌套执行。第9页/10/210语句格式SELECT[ALL|DISTINCT]<目标列表示式>[,<目标列表示式>]…FROM
<表名或视图名>[,<表名或视图名>]…[WHERE<条件表示式>][GROUPBY<列名1>[HAVING<条件表示式>]][ORDERBY<列名2>[ASC|DESC]];
指定要显示属性列指定查询对象指定查询条件查询结果按指定列值分组筛选出只有满足指定条件组对查询结果表按指列值升序或降序排序
第10页/10/2114.1.1基本查询1、简单无条件查询例:Select*fromstu_info
把stu_info表中全部统计全部属性查询出来第11页/10/212SELECT*FROMSTU_INFOWHEREXSH=’06’4.1.1基本查询2、简单条件查询例4.2:从edu_d数据库表stu_info中查找包含全部列土建学院(学院代号xsh为06)学生名单。“*”表示查询全部列字符或字符串用单引号引发来相当于选择运算第12页/10/213例4.3:从数据库EDU_INFO中查询土建学院(XSH=’06’)学生学号、姓名、性别、学院代号信息。SELECTXH,XM,XBM,XSHFROMSTU_INFOWHEREXSH=’06’属性名用逗号隔开
3、查询语句中投影运算实现第13页/10/2144.1.2使用列表示式查询指定列,除了能够使用*或者属性列表以外,还能够使用列表示式。1、计算列值例4.4:在成绩表XK中按满分150分计算学生成绩并显示学号、课程号、教师号
SELECTXH,KCH,JSH,’150成绩’=KSCJ*1.50FROMXK第14页利用列表示式实现不一样列连接例4.5SELECT'学号',XH,XM+XSH,BHFROMSTU_INFOWHEREXBM=‘男’ORDERBYXHDESC在SQLServer系统企业管理器中运行后系统自动将语句写法改成了:SELECT'学号'ASEXPR1,XH,XM+XSHASEXPR2,BHFROMSTU_INFOWHERE(XBM=‘男’)ORDERBYXHDESC第15页/10/216注意:更改是查询结果显示列标题,这是列别名,而不是更改了数据库表或视图列标题。2、修改查询结果列标题比如:改写例4.5SELECTXHAS学号,XM+XSHAS姓名和学院代码,BHAS班级FROMSTU_INFOWHEREXBM=‘男’ORDERBYXHDESC第16页/10/217另一个形式:SELECT学号=XH,姓名和学院代码=XM+XSH,班级=BHFROMSTU_INFOWHEREXBM=‘男’
ORDERBYXHDESC
注意:当自定义列标题中含有空格时,必须用引号将标题括起来。
第17页/10/218采取别名目标:
数据库表中列名用英文字母表示更方便,不过为了在查询时,让用户看到结果更直观,所以能够采取汉字别名。第18页/10/219查询工作关键就在经过分析怎样把实际问题中自然语言描述转化为1)从哪个表中查询即:from后一项2)要查询哪些列即:select后一项3)要查询条件即:where后一项完成查询工作三个关键步骤
第3步最复杂第19页4.1.3WHERE从句深入使用WHERE从句中,能够使用一个或者多个逻辑表示式限制查询数据范围。表4-1惯用查询条件一览表第20页/10/2211、表示式比较比如:SELECT*FROMXKWHEREKSCJ>602、确定范围例4.6:查询数据库表XK中考试成绩在60-70之间学号、课程号、成绩
SELECTXH学号,KCH课程号,KSCJ成绩FROMXKWHEREKSCJBETWEEN60AND70
第21页/10/2223、确定集合例4.7:查询应电0601、机专0601班学生信息
SELECT学号,姓名,班级FROMmingdanWHERE班级
IN(’应电0601’,’机专0601’)当与指定值表中任何一个匹配时,返回TRUE,不然返回FALSE
第22页/10/2234、字符匹配用NOTLIKE
和LIKE与通配符%和_搭配,其运算对象能够是CHAR,VARCHAR,TEXT,NTEXT,DATETIME和SMALLDATETIME类型数据。
表示任意长度字符串表示人一单个字符比如:1、SELECT*FROMmingdanWHERE班级LIKE‘应%’2、SELECT*FROMmingdanWHERE姓名LIKE‘__红’
第23页/10/2245、包括空值查询比如:SELECT*FROMmingdanWHERE班级ISNULL6、多重条件查询比如:SELECT*FROMmingdanWHERE班级LIKE‘应%’
AND
姓名LIKE‘%红’
第24页/10/225普通格式:SELECT列名1,列名2,…FROM表名WHERE条件表示式ORDERBY
列名1[ASC|DESC][,列名2[ASC|DESC]…]升序(默认)降序4.1.4、设定排序条件第25页/10/226例4.4:从数据库EDU_D表STU_INFO中查询建9809班学生情况并按学号排序。SELECT*FROMSTU_INFOWHEREBH=‘建9809’ORDERBYXH第26页SELECT*FROMSTU_INFOWHEREBH=‘建9809’ORDERBYZYH,XHDESC按多列排序:先按专业升序排列,然后同一专业统计按学号进行降序排列
注意:(1)ORDERBY子句不改变基本表中行或者列次序,只改变查询结果排列次序。(2)ORDERBY子句制订排序列必须出现在SELECT子句列表示式中。(3)排序是查询语句最终一步工作,所以要把ORDERBY子句普通放在查询语句最终。第27页/10/228在要查询属性名前加DISTINCT,以去掉结果中重复值。例:SELECTDISTINCT
班级
FROMmingdan注意:在一个SELECT语句中,DISTINCT只能出现一次,而且DISTINCT必须写在全部列名之前。5、限定重复统计第28页/10/2294.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选项或不指定则表示保留重复行
第29页/10/230例4.8:查询学生总数SELECTCOUNT(*)AS学生数FROMmingdan或者SELECTCOUNT(XH)FROMmingdan例4.9:已知XK中高等数学代号是090101,查询学生选修高等数学平均成绩
SELECTAVG(KSCJ)AS‘高等数学平均成绩’FROMXKWHEREKCH=‘090101’因为XH是该表主键,不允许有空值
查询每个班学生人数?第30页/10/231例4.10:查询学生选修高等数学最高分和最低分SELECTMAX(KSCJ)AS‘高等数学最高分’,MIN(KSCJ)AS‘高等数学最低分’
FROMXKWHEREKCH=‘090101’
注意:在查询中,除COUNT(*)外,全部聚合函数都不包含取值为空行。第31页/10/2322、GROUPBY子句GROUPBY子句用于对表或视图中数据查询结果按某一列或多列值分组,值相等分为一组
2、GROUPBY子句例4.11:在表mingdan中查询各班学生人数
SELECT班级,COUNT(XH)AS人数FROMmingdanGROUPBY班级
注意:SELECT子句列表中只能包含在GROUPBY中指出列或在聚合函数中指定列。GROUPBY子句用于对表或视图中数据查询结果按某一列或多列值分组,值相等分为一组
GROUPBY子句常与聚合函数联合使用,用于针对分组统计汇总
第32页/10/2332、GROUPBY子句举例:从表stu中统计xsh=‘0015’中男生和女生人数Selectcount(*)fromstuwherexsh=‘0015’groupbyxb还能够按多个字段分组思索:统计每个学院男生和女生人数?第33页/10/234例4.12:在表STU_INFO上产生一个结果集,包含每个专业男生、女生人数。SELECTZYH,XBM,COUNT(*)AS人数FROMSTU_INFOGROUPBYZYH,XBM
第34页/10/2353、HAVING短语HAVING短语指定组或聚合条件。只有满足条件组才被选出来,HAVING通常与GROUPBY子句一起使用。(注意与WHERE子句区分)SELECTXH,COUNT(*);FROMXK;GROUPBYXH;HAVINGCOUNT(*)>3例4.15查询选修了3门以上课程学生及选课数:第35页/10/236例4.16:只查询选修了3门以上课程学号前四位是1学生学号及选课数:
SELECTXH,COUNT(*)FROMXKWHEREXHLIKE‘%’GROUPBYXHHAVINGCOUNT(*)>3第36页/10/237Having短语指定选择组条件,只有满足条件组才被选出来。Where子句从基本表中选择满足条件元组,having选择满足条件组第37页/10/238若一个查询同时包括两个或两个以上表,则称为连接查询。连接查询中用来连接两个关系条件称为连接条件或连接谓词,普通格式为:[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>连接谓词中列名称为连接字段
4.2.5连接查询比如:xk.xh=stu_info.xh连接查询from后面跟多个表第38页/10/239
连接查询中用来连接两个关系条件称为连接条件或连接谓词,格式:[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>其中比较运算符主要有:=、>、<、>=、<=、!=
当连接运算符为=时,叫等值连接。使用其它运算符称为非等值连接。连接谓词中列名称为连接字段。
在SELECT中连接条件放在where后面第39页/10/240例:查询每个学生及其选课情况Selectstu_info.*,xk.*Fromstu_info,xkWherestu_info.xh=xk.xh第40页/10/241例:查询物理012班每个学生及其选修课程情况SELECTstu_info.*,xk.*FROMstu_info,xkWHEREstu_info.xh=xk.xhandbh=‘物理012’/*复合条件连接*/第41页/10/242例4.18:查询选修了有机化学这门课程学生姓名
SELECTXMFROMSTU_INFO,XK,GCOURSEWHEREGCOURSE.KM=‘有机化学’
ANDGCOURSE.KCH=XK.KCHANDXK.XH=STU_INFO.XH说明:(1)连接查询包括全部表名都放在FROM子句后面。(2)连接条件放在WHERE子句中。(3)假如属性列名在参加连接各表中是唯一,能够省略表名前缀;假如属性列名是两个表共同属性,则一定要加表名前缀。第42页/10/243(4)在书写连接查询时,为了简化,可认为表名取别名,别名应该简单。别名只在此次查询有效。例:(4.18)SELECTXMFROMSTU_INFOS,XKX,GCOURSECWHEREC.KM=‘有机化学’ANDC.KCH=X.KCHANDX.XH=S.XH第43页/10/2444.1.6嵌套查询例4.19:在STU_info表中查询选修了课程编号为090201学生姓名分析:查询所要求结果出自一个关系(STU_info),但相关条件却包括多个关系
(STU_info和XK)。SELECTXMFROMSTU_INFOWHERE(XHIN(SELECT
XH
FROMXK
WHEREKCH=‘090201’))一个SELECT-FROM-WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块WHERE子句或HAVING短语条件中查询称为嵌套查询。
子查询第44页/10/245说明:(1)这个查询首先执行小括号里内部查询,得到一个结果集,再判断外部查询列是否属于这个集合;(2)关键字IN前面只能有一个列,这个列必须与内部查询结果集里各个值含义相同,数据类型兼容。SELECTXMFROMSTU_INFOWHERE(XHIN(SELECT
XH
FROMXK
WHEREKCH=‘090201’))结果集第45页/10/246例4.20查询与刘玉涛在同一个班学习学生SELECTXH,XM,BHFROMSTU_INFOWHERE(BHIN())1、带有in谓词子查询同一个学校刘玉涛可能重名,而且可能不一样班SELECTBHFROMSTU_INFOWHEREXM=‘刘玉涛’第46页/10/2472、带有比较运算符子查询例4.21查询与学号029001学生在同一个班学习学生,按学号排序。SELECTXH,XM,BHFROMSTU_INFOWHERE(BH=())ORDERBYXH明确内查询结果是唯一值时能够使用=SELECTBHFROMSTU_INFOWHEREXH=‘029001’第47页/10/248带有比较运算符子查询举例:从mingdan表中查询成绩最高同学学号,姓名和成绩Select学号,姓名,成绩frommingdanWhere成绩=(selectmax(成绩)frommingdan)Select学号,max(成绩)frommingdanSelect学号,max(成绩)frommingdangroupby学号第48页/10/2493、带有ANY、SOME、ALL比较子查询例4.22查询其它班级中比材物2k01班某个学生年纪小学生姓名和年纪。SELECTXM,NLFROMSTU_INFOWHERENL<ANY(
)ANDBH<>’材物2k01’同义字SELECTNLFROMSTU_INFOWHEREBH=‘材物2k01’第49页/10/2504、带有EXISTS谓词子查询EXISTS是测试子查询是否有数据行返回,假如有则返回TRUE,不然返回FALSE。NOTEXISTS则相反,当结果表为空时,才返回TRUE。
例4.23查询选修了高等数学(KCH=090101)学生姓名等信息
SELECTXM,XBM,BHFROMSTU_INFOWHEREEXISTS(SELECT*FROMXKWHEREXH=STU_INFO.XHANDKCH=‘090101’不需要明确指定列名,这个子查询不一定会执行完,只要发觉匹配条件成立,就退出子查询第50页/10/251例4.24查询没有选修高等数学学生姓名等信息
SELECTXM,XBM,BHFROMSTU_INFOWHERENOTEXISTS(SELECT*FROMKWHEREXH=STU_INFO.XHANDKM='高等数学')第51页/10/252例:在stu_info表中查询选修了090101号课程学生姓名SELECTxmFROMstu_infoWHERE(XHIN(SELECTXHFROMxkWHERE(kch=‘090101')))当查询信息包括一个关系时,嵌套查询和连接查询可交换Selectxmfromstu_info,xkWherestu_info.xh=xk.xhandkch=‘090101’第52页/10/2534.1.7联合查询
多个SELECT语句结果可进行集合操作,SQLServerTransact-SQL语言只提供UNION(并)运算符实现并操作。语法格式:SELECT_1UNION[ALL]SELECT_2{[UNION[ALL]SELECT_3]}…进行并运算子查询第53页/10/254例4.25:有两个数据库表STUFR和STUIS,其结构完全一样,分别存放外语学院和信息学院学生基本信息,现在要查询两个学院女生学号、姓名。
SELECTXH,XMFROMSTUFRWHEREXB='女'UNIONSELECTXH,XMFROMSTUISWHEREXB='女'
第54页/10/255说明:
(1)使用UNION运算符进行联合查询时,要确保各个SELECT语句目标列表示式数量相等、排列次序相互一一对应、数据类型必须兼容。(2)UNION之后假如使用了ALL选项,则显示全部包含重复行,假如没有使用ALL选项,则重复行只显示一行。(3)UNION操作惯用于归档数据,比如归档各个基层部门数据等,运行时将查询数据合并到第一个表中。(4)也能够对结果进行排序或者分组汇总,这是必须把ORDERBY子句或GROUPBY子句放在最终一个SELECT语句后面,而且必须是针对第一个SELECT语句列进行排序或分组。
(5)使用UNION连接全部SELECT语句也能够使用同一张表,此时UNION运算符能够用OR运算符来代替。
第55页/10/256例4.26:将上个例子中两个数据库表STUFR和STUIS数据合并到结构相同全校学生数据表STU中去。SELECT*FROMSTUUNIONALLSELECT*FROMSTUFRUNIONALLSELECT*FROMSTUIS怎样将查询结果保留在当前数据库新建表NEWSTU中?SELECT*INTONEWSTUFROMSTUFRUNIONALLSELECT*FROMSTUIS第56页/10/257例4.27:查询01学院学生及全部本科生
SELECT*FROMSTU_INFOWHEREXSH=‘01’
UNIONSELECT*FROMSTU_INFOWHEREPYCCM=‘本科’
改写
SELECT*FROMSTU_INFOWHEREXSH=’01’
ORPYCCM=‘本科’
第57页/10/2584.1.8使用系统内置函数查询T-SQL提供了三种系统内置函数:行集函数、聚合函数和标量函数。其中聚合函数在4.1.4节进行了介绍。
1、数学函数:对SQLServer提供数字数据(decimal,integer,float,real,money,smallmoney,smallint和tinyint)进行数学运算并返回运算结果。第58页/10/259(2)RAND函数语法格式:RAND([seed])功效:返回0~1之间一个随机值。
(1)ABS函数语法格式:ABS(数值型表示式)功效:返回给定数值表示式绝对值参数seed(种子)为整型表示式
第59页/10/260(1)ASCⅡ函数语法格式:ASCⅡ(字符型表示式)功效:返回字符表示式最左端字符ASCⅡ值。(2)CHAR函数语法格式:CHAR(0~255之间整数
)
功效:将ASCⅡ转换为字符。第60页/10/261(3)LEFT函数语法格式:LEFT(字符型表示式
,整型表示式
)
功效:返回从字符串左边开始指定个数字符
例4.28:查询学号最左边4个字符。SELECTLEFT(XH,4)FROMSTU_INFO2、字符串处理函数第61页/10/262(4)LTRIM函数语法格式:LTRIM(字符型表示式
)功效:删除字符型表示式字符串最左边空格,并返回字符串。
(5)REPLACE函数语法格式:REPLACE(‘字符表示式
1’,’字符表示式
2’,’字符表示式
3’)功效:用字符表示式
3替换字符表示式1中包含字符表示式2,并返回替换后表示式。
第62页/10/263例4.29已知某学校学号(XH,char)前4位是入年,第5位是性别代码,后5位是流水号,如某女生学号:030101。在学生基本情况数据库表STU_INFO中查询全部学生学号、姓名、入年、性别信息。
(6)SUBSTRING函数语法格式:SUBSTRING(expression,整型
,整型
)功效:返回expression中指定部分数据。
能够是字符串、二进制串、text、image字段或表示式
指定从expression第几个字节开始
length指定要返回字节数
SELECTXH,XM,LEFT(XH,4)AS入年,
SUBSTRING(XH,5,1)AS性别码FROMSTU_INFOORDERBYXH第63页/10/264(7)STR函数语法格式:STR(FLOATL类型表示式[,length[,decimal]])功效:将数字数据转换为字符数据。返回值总长度(包含小数点)制订小数点右边位数整数第64页/10/2653、系统函数系统函数用于对SQLServer中值、对象和设置进行操作并返回相关信息。(1)CASE函数①简单CASE函数语法格式:CASE输入表示式
WHEN比较表示式THEN结果表示式
……ELSE表示式
END功效:计算输入表示式值,与每一个WHEN比较表示式值比较,假如相等,则返回对应结果表示式值;不然,返回ELSE之后表示式值,假如省略了ELSE,则返回NULL值。第65页/10/266例4.30:在STU_INFO中查询03学院学生学号、姓名、性别,并将性别分别转换成“男生”、“女生”。SELECTXH,XM,XBM,XBM=
CASE'男'
WHENXBMTHEN'男生'
ELSE'女生'
ENDFROMSTU_INFOWHEREXSH='03'第66页/10/267②CASE搜索函数语法格式:CASEWHEN条件1THEN表示式1WHEN条件2THEN表示式2
……ELSE表示式
END功效:系统将查询出结果进行判断,当满足WHEN某个条件时,则将该结果显示为THEN之后表示式值,假如没有满足条件,则显示ELSE之后表示式值,假如没有指定ELSE子句时,返回NULL值。第67页/10/268例4.31:查询成绩表XK中选修了“090101”课程学生学号、5分制成绩
SELECTXH,'5分制成绩'=
CASEWHENKSCJ<60THEN'不及格'
WHENKSCJ>=60ANDKSCJ<70THEN'及格'
WHENKSCJ>=70ANDKSCJ<80THEN'中等'
WHENKSCJ>=80ANDKSCJ<90THEN'良好'
WHENKSCJ>=90THEN'优异'
ENDFROMXKWHEREKCH='090101'注意:这个查询改变仅仅是查询出结果,而基础表中数据并没有发生转换。第68页/10/269(2)CAST函数语法格式:CAST(表示式AS数据类型)
功效:将表示式值转换为数据类型参数所指定类型。
例4.32:查询成绩表K,其中考试成绩(KSCJ)、XH、XM等数据类型都是CHAR,现要查询考试成绩在50分到60之间学生及成绩,并将成绩加10分显示。
SELECTXH,XM,KSCJ,CAST(KSCJASFLOAT)+10AS加分后成绩FROMKWHEREKSCJLIKE'5_'
第69页/10/270(3)日期时间函数GETDATE语法格式:GETDATE()
功效:按照SQLServer标准内部格式返回当前系统日期和时间。返回值数据类型为datetime型。(4)年、月、日函数语法格式:YEAR(date)
MONTH(date)
DAY(date)其中参数date是数据类型为datetime或smalldatetime表示式。返回值数据类型为int型。
第70页/10/2714.2数据更新主要包含对数据库表数据进行插入、修改、删除操作。INSERTUPDATEDELETE第71页/10/2724.2.1插入数据
插入数据操作有两种形式:(1)使用VALUES子句向数据库基本表表一次插入一个元组;
(2)插入SELECT子查询结果,一次插入一批数据统计。第72页/10/2731、插入单个元组语法格式:INSERTINTO<表名>[(<属性列1>[,<属性列2>..)]VALUES(<常量1>[,<常量2>]…)
说明:(1)属性列与常量必须一一对应,数据类型要一致;(2)在基本表结构定义中未说明为NOTNULL属性列,假如没有出现在INTO子句后,这些列将取空值。已经说明为NOTNULL属性列,则必须出现在INTO子句后面;(3)假如INTO子句后面没有指定任何列,则VALUES子句后面常量个数必须与基本表中列个数相等,且类型、次序一致。第73页/10/274例(在STU_COU数据库中)INSERT
INTOSTU(XH,XM,XB,XSH,NL)VALUES(‘0902090’,’王东方’,‘男’,
‘0019’,22)等价于:INSERTINTOSTUVALUES(‘0902090’,’王东方’,‘男’,
‘0019’,22)(XH,XM,XB,XSH,NL)表中全部列第74页/10/2752、插入子查询结果语法格式:INSERT[INTO]表名[(列名1,……,列名N)]SELECT
兼容列名1,……,兼容列名NFROM
兼容表名WHERE
逻辑表示式一一对应结构一致第75页/10/276例:4.33在STU表中查询出女生学生信息存放在STUIS表中。INSERT
INTOSTUISSELECTXH,XM,XB,XSH,NLFROMSTUWHEREXB=‘女’INSERTintoSTUISSELECT*FROMSTUWHEREXB=‘女’或者第76页/10/2774.2.2修改数据修改数据主要是对数据库表中一个或多个元组某个或一些属性值进行更改。语法格式:UPDATE<表名>SET<列名>=<表示式>[,<列名>=<表示式>,…][WHERE<条件>]第77页/10/2781、修改一个元组值
比如:UPDATESTUSETXSH=‘机械’,NL=NL+1WHEREXH='0501022'
2、修改多个元组值例:将全部课程学分改为2分
UPDATECOURSESETCCREDIT=2例:将女生年纪增加1岁UPDATESTUSETNL=NL+1WHEREXB=‘女’第78页/10/2793、带子查询修改语句4.34:将选修了高等数学90分以下学生成绩加10分(从edu_d库中xk数据表中修改)UPDATEXKSETKSCJ=KSCJ+10WHEREKCH=(SELECTKCHFROMGCOURSEWHEREKM='高等数学')ANDKSCJ<=90提议:使用UPDATE对批量数据进行修改前,先用SELECT语句将要修改统计查询出来,仔细检验无误后,再进行修改。第79页/10/2804.2.3删除数据语法格式:DELETEFROM<表名>[WHERE<条件>]注意:
DELETE命令删除是一个或多个元组(统计、行),而不是某个行中个别列值。不需要某个行个别列值,只能用UPDATE命令修改成NULL值或空格符,不能被删除。第80页/10/2811、删除一个元组比如:DELETEFROMSTU_INFOWHEREXH='050601'2、删除多个元组比如:DELETEFROMSTU_INFOWHEREBH='应0203'
第81页/10/2823、带子查询删除语句
例4.35:将信息学院学生选课信息全部删除
注意:为防止误操作,在日常工作中,通常操作删除语句时,要先查询要删除数据,确认无误后,再将SELECT*部分改成DELETE进行删除操作。DELETEFROMXK,STU_INFOWHERESTU_INFO.XSH=’12’ANDSTU_INFO.XH=XK.XHSELECTXK.*FROMXK,STU_INFOWHERESTU_INFO.XSH=’12’ANDSTU_INFO.XH=XK.XHSELECT*FROMXKWHERE‘12'=(SELECTXSHFROMSTU_INFOWHERESTU_INFO.XH=XK.XH)DELETEFROMXKWHERE‘12'=(SELECTXSHFROMSTU_INFOWHERESTU_INFO.XH=XK.XH)第82页/10/2834.3数据定义SQL数据定义语句是对数据库表、视图、索引等结构和属性进行定义。常见操作方式以下表:表4_3数据操作方式一览表DROPINDEXCREATEINDEX索引DROPVIEWCREATEVIEW视图ALTERTABLEDROPTABLECREATETABLE表修改删除创建操作方法操作对象第83页/10/2844.3.1定义基本表一、语法格式:CREATETABLE
[数据库名]<表名>(<列名><数据类型>[<列级完整性约束条件>][,<列名><数据类型>[<列级完整性约束条件>]]…[,<表级完整性约束条件>])默认为当前数据库
要定义基本表名字组成该表各个属性(列)包括对应属性列完整性约束条件包括一个或多个属性列完整性约束条件第84页/10/285惯用完整性约束主码约束:PRIMARYKEY唯一性约束:UNIQUE非空值约束:NOTNULL参考完整性约束FOREIGNKEY……REFERENCESCHECK约束CHECK默认值
DEFAULT标识列
IDENTITY(seed,inctement)公式
AS第85页/10/286二、数据类型第86页/10/287浮点类型第87页/10/288字符类型第88页/10/289二进制数据类型第89页/10/290时间类型第90页/10/291货币类型第91页/10/292[例1]建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年纪Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一,而且姓名取值也唯一。
CREATETABLEStudent
(SnoCHAR(5)NOTNULL
UNIQUE,
SnameCHAR(20)UNIQUE,
SsexCHAR(1),
SageINT,
SdeptCHAR(15))第92页/10/293[例2]建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno,Cno)为主码。CREATETABLESC(SnoCHAR(5),CnoCHAR(3),Gradeint,
Primarykey(Sno,Cno))第93页/10/294例4.36:定义一个学生成绩表kCREATETABLEk/*表名为K*/(XHvarchar(12)NOTNULL,/*XH(学号)列,不为空*/XMvarchar(8)NULL,/*姓名*/KCHvarchar(8)NOTNULL,/*课程代码*/KSCJvarchar(5)NULL,/*考试成绩8/KKNYvarchar(5)NULL, /*开课时间*/KCXFvarchar(5)NULL, /*课程学分*/KMvarchar(30)NULL, /*课程名称*/KCFZvarchar(1)NULL, /*课程分组*/JSMvarchar(8)NULL, /*任课教师*/BZvarchar(18)NULL) /*备注*/第94页/10/295例4.37:创建表n_jobs。
CREATETABLEn_jobs(job_idsmallintIDENTITY(1,1)
PRIMARYKEYjob_descvarchar(50)NOTNULLDEFAULT
'新部门,暂无职位',min_lvltinyintNOTNULLCHECK(min_lvl>=12),max_lvltinyintNOTNULLCHECK(max_lvl<=250))是表示为PRIMARYKEY约束创建聚集关键字。表示新列是标识列。必须同时指定种子seed和增量increment,或者二者都不指定。假如二者都未指定,则取默认值(1,1)。
设置默认值,默认值能够是常量、NULL或系统函数。
第95页例4.38:创建表new_employees。
CREATETABLEnew_employee(emp_idchar(9)CONSTRAINT
PK_emp_id
PRIMARYKEYNONCLUSTERED
CONSTRAINT
CK_emp_id
CHECK(emp_idLIKE
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'oremp_idLIKE'[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'),/*每个员工编号由三个字符打头,然后是10000-99999某个数字和代表性别字母F或M*/fnamevarchar(20)NOTNULL,minitchar(1)NULL,lnamevarchar(30)NOTNULL,job_idsmallintNOTNULLDEFAULT1REFERENCESjobs(job_id),job_lvltinyintDEFAULT10,pub_idchar(4)NOTNULLDEFAULT('9952')REFERENCESpublishers(pub_id),hire_datedatetimeNOTNULLDEFAULT(getdate())/*使用了获取当前日期函数作为默认值)表示PRIMARYKEY、NOTNULL、UNIQUE、FOREIGNKEY或CHECK约束定义开始
约束名称
外键约束
第96页/10/2974.3.2修改基本表
语法结构:ALTERTABLE<表名>[ADD<新列名><数据类型>[完整性约束]][DROP<完整性约束名>|COLUMN<列名>][ALTERCOLUMN<列名><数据类型>]增加新列和新完整性约束条件删除指定完整性约束条件用于修改列名和数据类型第97页/10/298例4.43向Stu_info表增加“入课时间”列,其数据类型为日期型
ALTERTABLESTU_INFOADDRXSJDATETIME不论基本表中原来是否已经有数据,新增加列一律为空值。1、添加列第98页/10/299例4.44:将教师表XB列改为SMALLINT数据类型
注意:修改原有列定义有可能会破坏已经有数据2、修改列ALTERTABLEGTECHALTERCOLUMNXBSMALLINT第99页/10/21003、删除列例4.45:删除教师表中性别一列。ALTERTABLEGTECHDROP
COLUMNXB
下面列不能除去:被复制列;用在索引中列;用在CHECK、FOREIGNKEY、UNIQUE或PRIMARYKEY约束中列;有相关联默认值(由DEFAULT关键字定义)列或绑定到默认对象列;绑定到规则列。第100页/10/2101[例]删除数据库表new_employee中emp_id检验约束。ALTERTABLEnew_employeeDROP
CK_emp_id
4、删除约束第101页/10/21024.3.3删除基本表语法格式:DROPTABLE<表名>
第102页/10/21034.3.4视图
视图是关系数据库系统提供给用户以各种角度观察数据库中数据主要机制。视图是从一个或多个基本表(或视图)导出表,是个虚表。数据库只存放视图定义,不存放视图对应数据,这些数据仍存放在原来基本表中。所以,视图数据跟随基本表数据而改变。视图一旦被定义,就能够被查询、删除,修改。再定义一个新视图。第103页/10/2104补充说明:视图是一个虚拟表,其内容由查询定义。同真实表一样,视图包含一系列带有名称列和行数据。不过,视图并不在数据库中以存放数据值集形式存在。行和列数据来自由定义视图查询所引用表,而且在引用视图时动态生成。视图允许我们把表结构细节封装起来,这些表可能因你应用进化而改变,而我们却能够经过视图给用户一个一致接口.视图几乎能够在一个真正表能够使用任何地方使用.在其它视图上面再建造视图也是很常见.第104页/10/21051、定义视图(1)用企业管理器建立视图(自学)(2)用SQL数据定义语句createview命令建立视图
语法格式:CREATEVIEW
视图名AS<子查询>[WITHCHECKOPTION]
对视图进行UPDATE,INSERT和DELETE操作时要确保更新、插入或删除行满足视图定义中条件表示式
第105页/10/2106注意问题:(1)只能在当前数据库中创建视图;
(2)一个视图最多能够引用1024个列;(3)视图命名必须符合SQLServer中标识符定义规则;
(4)能够将视图建立在其它视图或者引用视图过程之上,SQLServer中允许最多32层视图嵌套;
(5)不能将规则、默认值定义绑定在视图上;(6)定义视图查询语句中不能包含COMPUTE、COMPUTEBY、ORDERBY子句或是INTO等关键词;
(7)在视图中不能定义全文索引,但能够定义索引;(8)不能创建暂时视图,而且也不能在暂时表上创建视图;第106页/10/2107(9)默认状态下,视图中列继承他们在基表中名称。对于以下情况,在创建视图时需要明确给出每一列名称。①视图中一些列来自表示式、函数或常量;②视图中两个或多个列在不一样表中含有相同名称;③希望在视图中列使用不一样于基表中列名时。
第107页/10/2108A.选择列定义视图例:
CREATEVIEWMYVIEW1AS
SELECTEMP_ID,LNAME,FNAMEFROMEMPLOYEE定义了视图后,能够和表一样,使用SELECT语句访问它。
第108页/10/2109B.基于列表示式定义视图
例:CREATEVIEWMYVIEW2ASSELECTTITLE,ADVANCE,
PRICE*ROYALTY*YTD_SALESASNEWPRICEFROMTITLESWHEREPRICE>$5第109页/10/2110C.选择行定义视图例:CREATEVIEWMYVIEW3ASSELECT*FROMTITLES
WHERETITLELIKE'%SALES%'
第110页/10/2111D.选择行和列例:CREATEVIEWMYVIEW4ASSELECTTITLE_ID,PUB_ID,TITLEFROMTITLESWHERETITLELIKE'%SALES%'
第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年小学成语故事《短小精悍》语言赏析公开课教案
- 审计师(初级)审计理论与实务考前冲刺卷(含答案)
- 初级护师专业知识模拟试题(含评分标准)
- 审计师(中级)审计相关基础知识模拟试卷及答案
- 2027年买房劳动合同二篇
- 2027年楼房遗产合同二篇
- 食品(保健食品)原辅材料买卖合同协议书范本
- 医院反商业贿赂自查自纠报告
- 线上德尔菲法培训服务协议
- 2026年国家职业卫生试题库(新版题库)
- 陕西省2026届九年级初中学业水平预测考试数学试卷(含解析)
- 2026遂溪发展集团有限公司第二批工作人员公开招聘15人考试参考题库及答案详解
- 2026年山东省临沂市重点学校初一入学语文分班考试试题及答案
- 2026秋苏少版小学音乐一年级上册(新教材)教学计划附教学进度表
- 中小学舞蹈社团新生招募活动计划
- CSCO原发性肝癌诊疗指南(2025版)
- AI在酒店智能服务与运营管理中的落地实践
- 通水阶段验收鉴定书
- 工程质量与安全保证措施培训
- GA/T 900-2025城市道路施工作业交通组织规范
- 2026年秋季三年级数学上册教学计划(人教版)
评论
0/150
提交评论