SQLServer2008数据库—创建、建表、查询语句_第1页
SQLServer2008数据库—创建、建表、查询语句_第2页
SQLServer2008数据库—创建、建表、查询语句_第3页
SQLServer2008数据库—创建、建表、查询语句_第4页
SQLServer2008数据库—创建、建表、查询语句_第5页
免费预览已结束,剩余32页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SQLServer200数据库一创建、建表、查询语句一、创建数据库1、利用对象资源管理器创建用户数据库:(1)选择“开始”一“程序 ”MicrosoftSQLServer2008SQLServerManagementStudi品令,打开SQLServerManagementStudio.(2)使用“Windows身份验证”连接至USQLServer2008数据库实例。(3)展开SQLServer实例,右击“数据库”,然后人弹出的快捷菜单中选择“新建数据库存”命令,打开“新建数据库”对话框。(4)在“新建数据库”对话框中,可以定义数据库的名称、数据库的所有者、是否使用全文索引、数据文件和日志文件

2、的逻辑名称和路径、文件组、初始大小和增长方式等。输入数据库名称student。2、利用T-SQLf旬创建用户数据库:在SQLServerManagementStudied,单击标准工具栏的“新建查询”按钮,启动SQL编辑器窗口,在光标处输入T-SQ畸句,单击“执行”按钮。SQL编辑器就提交用户输入的T-SQL吾旬, 然后发送到服务器执行,并返回执行结果。创建数据库student的T-SQLI旬如下:CreatedatabasestudentOnprimary(name=student_data,filename=E:SQLServer2008SQLFULL_CHSMicrosoftSQLstu

3、dent_data.mdf,size=3,maxsize=unlimited,filegrowth=1)Logon(name=student_log,filename=E:SQLServer2008SQLFULL_CHSMicrosoftSQLstudent_log.ldfsize=1,maxsize=20,filegrowth=10%)二、创建数据表1、利用表设计器创建数据表:(1)启动SQLServerManagementStudio连接到SQLServer2008数据库实例。展开SQLServe侯例, 选择数据库student“表”, 单击鼠标右键,然后从弹出的快捷菜单中选择“新建表”命

4、令,打开“表设计器”。(3)在“表设计器”中,可以定义各列的名称、数据类型、长度、是否允许为空等属性。(4)当完成新建表的各个列的属性设置后,单击工具栏上的“保存 ” 按 钮 , 弹 出 “ 选 择 名 称 ” 对 话 框 , 输 入 新 建 表 名stu_info,SQLServe数据库引擎会依据用户的设置完成新表的创建。2、利用T-SQL吾句创建数据表:Createtablestu_info(stu_idchar(10)notnull,namenvarchar(20)notnull,birthdaydatenull,sexnchar(2)null,addressnvarchar(20)nu

5、ll,markintnull,majornvarchar(20)null,sdeptnvarchar(20)null);3、样本数据库student表数据:学生信息表(stu_info)stuijdnameibirthdaysexaddressmarkmajorsdept张元1995-ID-W男河南海州560计苴视利学局信息学嗡200707002张虹1905-01-14女河南开出的计算机科学与信息维2007070103壬明1966-07-08男河南洛阳S70计篁机科学与信息学照2007070104李侪16-0341男河南郑州S64计茸机科学局信息学明200707020U如潮1905-I2-D1

6、女河南平顶山5S7电子商落信息学阂2007070202期恒190斤02-03男河南冏口S66电子福务信且学照3007070203第兰16-04-06立河南洋昌571叱子骑也信息的2007画1QI季作1905-09-12男河南郑州57a或计学缶十维2007080102需册1%5-11-23V河南安阳S73会计学曲霹aoroffifioi8明男河南却阳S力电答片理会计学1院他工皿他工血士课程信息表(course_info):conr$e_idcoursanamecoursetypesursejnkcourse_timepre_courseJdVggn计算机基础计算机基础考试考试350NULL702

7、操操作系统作系统考试考试45口口701703计算机阳考试考试450701704数据库原理数据库原理考查考查3so701706Java考查340704801宏观经济学宏观经济学考试考试qsoULL80Z初级合计考试430603财般学财般学考原考原3SOfVULL604会计电算优会计电算优考查考查3fl/UL米NULLtJLLMLMLNULLNULL学生成绩表(stu_grade)stujdcourse_idgradeLOCI707CH01H701892007C70101702ai2007070101703962007C7U102701852007070102702742007C7010S7031

8、12007070104701912007070104702鸵鸵2007C7U104801792007C80101SOI7900708010180291200708010280137200708010280283200700020190375200708020180432米/ozMJSLL三、完整性与约束数据库中的数据是现实世界的反映,数据库的设计必须能够满足现实情况的实现,即满足现实商业规则的要求,这也是数据完整性的要求。在数据库的管理系统中,约束是保证数据库中数据完整性的重要方法。1、完整性: 数据完整性是数据库设计方面一个非常重要的问题,数据完整性代表数据的正确性、一致性和可靠性。实施数据

9、完整性的目的在于确保数据的质量。在SQLServer中,根据数据完整性措施所作用的数据库对象和范围不同,可以将数据完整性分类为实体完整性、域完整性和参照完整性。实体完整性把数据表中的每行看作一个实体,它要求所有的行都具有唯一的标识;域完整性要求数据表中指定列的数据具有正确的数据类型、格式和有效的数据范围;参照完整性维持被参照表和参照表之间的数据一致性。2、约束:约束是数据库中的数据完整性实现的具体方法。在SQLServe用,包括5种约束类型:primarykey约束、foreignkey约束、unique约束、check约束和default约束。四、数据查询1、查询语句:查询就是根据客户端的要

10、求,数据库服务器搜寻出用户所需要的信息资料,并按用户规定的格式进行整理后返回给客户端。查询语句select在SQLServer中是使用频率最高的语句, 可以说select语句是SQL语言的灵魂。select语句的语法结构:selectselect_listintonew_tableFromtable_sourcewheresearch_conditiongroupbygroup_by_expressionhavingsearch_conditionOrderbyorder_expressionasc|desc参数说明如下:Select子句:指定由查询结果返回的列。Into子句:将查询结果存储到

11、新表或视图中。From子句:用于指定数据源,即使用的列所在的表或视图。如果对象不止一个,那么它们之间必用逗号分开。Where子句:指定用于限制返回的行的搜索条件。如果select语句没有where子句,dbms假设目标表中的所有行都满足搜索条件。Groupby子句:指定用来放置输出行的组)并且如果select子句select_list中包含聚合函数,则计算每组的汇总值。Having子句:指定组或聚合函数的搜索条件。Having通常与groupby子句一起使用。Orderby子句:指定结果集的排序方式。ASC关键字表示升序排列结果,DES或键字表示降序排列结果。如果没有指定任何一个关键字,那么A

12、SCB是默认的关键字。如果没有orderby子句,DBMS各根据输入表中的数据的存放位置来显示数据。在这一系列的子句九select子句和from子句是必需的,其他的子句根据需要都是可选的。2、简单查询:2.1、查询列:(1)查询指定列:数据表中有很多列,通常情况下并不需要查看全部的列,因为不同的用户所关注的内容不同。在指定列的查询中,列的显示顺序由select子句指定,与数据在表中的存储顺序无关;同时,在查询多列时,用“:将各字段隔开。例7-1、查询所有同学学号、姓名和成绩信息。Selectstu_id,name,markfromstu_info查询结果如下:E 结果岛消息stu_idname

13、mark112007070101i张元56022007070102张红5S532007070103王明57042007070104李伟56452007070201郑澜567E2007070202赵恒赵恒56672007070203张兰571g2007080101李伟57B32007080102钱丽5731020070B0201独楠独楠01(2)查询所有列:使用“*”通配符,查询结果将列出表中所有列的值,而不必指明各列的列名,这在用户不清楚表中各列的列名时非常有用。服务器会按用户创建表格时声明列的顺序来显示所有的列。例7-2、查询所有同学的所有信息。select*fromstu_info查询结果

14、如下:力给桌心消息Inamebirthdaysexaddressmarkmajor$dept1t20070701011张元1985-10-09男河南郑州560计篁机科学与技术信息学院22007070102随198501-14安河南开封565计篁机科学与技术信息学院32007070103王明198807-08男河南洛阳570计算机科学与技术信息学院42007070104季伟198S0311男河南郑州564计苴机科学与技术信息学院52007070201郑澜1985-12-01女河南平顶山567电子商务信息学院E2007070202赵恒1986-02-03男河南周5GE电子商若信息学院1200707

15、0203张兰1986-04-06女河南许昌571电子商务信息学院82007080101李伟190509-12男河南郑州578会计学会计学院S2007080102钱明1985-1123女河南安阳573会计学会计学隘102007060201孙楠1966-11-19男河南南阳577耐冬管理会计学院(3)使用运算列:YEAR为系统函数,获取指定日期的年份;GEDDATE()为系统函数,获取当前日期和时间。例7-3、查询所有同学的年龄信息。Selectstu_id,name,YEAR(getdate()-YEAR(birthday)fromstu_info查询结果如下:I国第果I6品息stu_idnam

16、e抚列名)1120070701011张元2522007070102张红2532007070103王明2442007070104李伟2452007070201郑澜2562007070202赵恒2412007070203张兰24820D70E0101李伟25920U70E01口Z钱丽25102007060201孙楠24(4)改变列标题显示:通常在查询结果显示的列标题就是创建表时所使用的列名,但是,这在实际使用中往往会带来一些不便,因此,可以利用列标题列名或as列标题来根据需要修改列标题的显示。例7-4、查询所有同学的年龄信息。Selectnameas姓名,YEARgetdate()-YEAR(bi

17、rthday)as年龄fromstu_info查询结果如下:结窠J艮 i 消息通年龄-Ul-IIJIUIdlUI-1i张元i252张红253王明244李伟245郑澜256越恒247张兰248李伟253钱丽25110 孙楠24(5)除去结果的重复信息:使用distinct关键字能够从返回的结果数据集合中删除重复的行,使返回的结果更简洁。例7-5、查询所有的院系信息。Selectdistinctsdeptfromstu_info查询结果如下:强结果岛消息jdepi1g会计学院!2信息学院(6)返回查询的部分数据:在SQLServer2008K提供了top关键字让用户指定返回一定数量的数据。Topn

18、表示返回最前面的n行,n表示返回的行数;topnpercent表示返回前面的n%行。例7-6、查itj前5位同学的学号、姓名和成绩信息。Selecttop5stu_id,name,markfromstu_info查询结果如下:仁a结巢由清息I$tu_idnamemark1i2007070101,张元56022007070102随56532007070103王明57042007070104李伟56452007070201郑澜567例7-7、查询60%同学的学号、姓名和成绩信息。Selecttop60percentstu_id,name,markfromstu_info查 询 结果如下:苫结果I出

19、消息$tu_idnamemark1I2007070101!张元56022007070102张红56532007070103王明57042007070104李伟5S452007070201郑澜5S7S2007070202赵恒5SB2.2、选择行:Where子句用于指定查询条件,使得select语句的结果表中只包含那些满足查询条件的记录。在使用时,where子句必须紧跟在from子句后面。Where子句中的条件表达式包括算术表达式和逻辑表达式两种,SQLServe对Where子句中的查询条件的数目没有限制。(1)使用比较表达式:例7-8、查询所有的男同学学号、姓名、生日和性别信息。Selectst

20、u_id,name,birthday,sexfromstu_infowheresex=男查询结果如下:国结果10消息Jstu_idnamebirthdaysex1j2007070101|!R|UIBMUI张元198510)9男22007070103王明19860708男32007070104李伟196603-11男42007070202制恒198&02-03男520070801QI李伟198509-12男62007080201孙楠1986-11-19男例7-9、查询所有的总分大于550分的同学学号、姓名、生日和性别信息。Selectstu_id,name,birthday,sexfro

21、mstu_infowheremark550查询结果如下:结果消息,idnacnebirthdaysex1?2007U7D101?张元1935-10-03男L22007070102张红1335-01-14女32007070103王明198S-07-03男42007070104李伟19SS-03-11男52007070201郑澜1985-12-口1女62007070202赵恒1996-02-03男72007070203张兰11996-04-05女82007090101李伟1995-09-12男92007080102钱丽198511-23女102007080201孙楠19851W9男(2)使用逻辑比

22、较表达式:例7-10、查询所有总分大于550的男同学信息Selectstu_id,name,birthday,sexfromstu_infowheremark550andsex=男查询结果如下:|目结果|岛消息$tu_idnamebirthdaysex120070701L)1!张元1985-1009男22007070103壬明1986-07-08男32007070104李仲19880311男42007070202超恒19660203男52007060101李侑198509-12男62017080201孙楠198&-11-19男例7-11、查询所有总分大于550分或男同学信息Select

23、stu_id,name,birthday,sexFromstu_infoWheremark550orsex=男查询结果如下:结果一10消息stujdnamebirthdaysex1j2007070101j张元1965-10-09男22007070102张虹19650114女32007070103王明19时。7,。8男42DO7O7O104李伟19B&09-11男52007070201郑澜1S85-12-01女62007070202制恒1躺以。2,03男72007070203张兰19G604E女82007080101李伟198&09-12男920070B0102钱丽1905-1V

24、23女1020070B0201孙福1986-1VI9男为了增强程序可读性,一般采用括号()来实现需要的执行顺序,而不考虑其默认的优先级顺序。例7-12、查询所有信息学院和会计学院并且总分大于550分的同学信息。select*fromstu_infowhere(sdept=信息学院orsdept=会计学院)andmark550查询结果如下:| |回结果国消息回结果国消息式u_idnamebHhd叩MXaddrewmarkmajorsdept1!2007070101!张元1995-10-09男河南郑州560计算机科学与技术信息学院21995-01-14女计算机科学与技术2007070102张江河南

25、开过565信息学院132007070103王明1986-07-08男河南洛阳571计算机科学与技术信息学院42007070104李伟1986-03-11男河南郑州5G4计算机科学与技术信息学院52007070201知澜安河南平顶山567电子商务信息学院E2007070202越恒1936-02-03男河南周口565电子商务信息学院72007070203张兰1386叫06安河南许昌571电子商理信息学院82007090101李伟1935mi2男河南郑州573合计学会计学院92007030102钱丽1985-11-23女河南安阳573金计学会计学院102007080201孙植1386-11-19男河

26、南南阳577财务管理会计学院(3)空值(null)的判断:如果在创建数据表时没有指定notnull约束,那么数据表中某些列的值就可以为null。所谓null就是空,在数据库中,其长度为0。例7-13、查询所有籍贯为空的同学信息。select*fromstu_infowhereaddressisnull查询结果如下::司结果1雷消息slu_kdnamebirthdays郎add岭於markmaiorsdupl(4)限定数据范围:使用between限制查询数据范围时同时包括了边界值,效果完全可 以 用 含 有 “= 和 “”和“”的逻辑表达式来代替。例7-14、查询总分在530560之间的同学信息

27、。select*fromstu_infowheremarkbetween530and560查询结果如下:IR结果I为消息对u_idnamebiflhdaysewaddressmarkmajor( (fep|1为方而而而,:张元19051009男河南郑州560讨算机科学与技术信息学院5BIBIMIBIMMIBIMIBIMIIiaiBIMIBIHlia(5)限制检索数据的范围:对于列值不在一个连续的取值区间,而是一些离散的值,利用between关键字就无能为力了,可以利用SQLServer提供的另一个关键字IN在大多数情况下,OR运算符与IN运算符可以实现相同的功能例7-15、查询所有在信息学院或

28、会计学院就读的同学信息。select*fromstu_infowheresdeptin(信息学院,会计学院)查询结果如下:也结藏|玄消息si:u_idnamebirthdaysexaddie群markmajorsdepl12007070101:张元1385-10OS男河南郑州50计算机科学与技术信息学院22007070102张红1985-01-14女河南开封565计算机科学与技术信息学院32007070103王明1986-07-00男河南洛阳570计算机科学与技术信息学院42007070104李伟1986-03-11男河南郑州564计算机科学与技术信息学院52007070201郑澜1905-1

29、251女河南平顶山567电子商务信息学院62007070202题恒1906吨3男河南周口566电子商务信息学院72007070203张兰19060406女河南详昌571电子商务信息学院82007090101李伟1985-09-12男河南郑州578会计学会计学院92007090102钱丽1995-11-23女河南安阳573会计学会计学院102007090201孙楠1996-11-19男河南南阳577财务管理会计学院(6)模糊查询:在实际的应用中,用户不会总是能够精确的给出查询条件。因此,经常需要根据一些并不确切的线索来搜索信息。SQLServe提供了like子句来进行这类模糊搜索。Like子句在

30、大多数情况下会与通配符配合使用。所有通配符只有在like子句中才有意义, 否则通配符会被当作普遍字符处理。各通配符也可以组合使用,实现复杂的模糊查询。(通配符”表示任意字符的匹配; 通配符“_只能匹配任何单个字符;通配符“口”用于指定范围(如a-z)或集合(如abcdef)中的任何单个字符;通配符“ , ”用于匹配没有在方括号中列出的字符。 ) 在使用like进行模糊查询时,当“”、二”和“口”符号单独出现时,都会被作为通配符进行处理。但是有时可能需要搜索的字符串包含量一个或多个特殊通配符,例如,数据表中可能存储含百分号()的折扣值。 若要搜索作为字符而不是通配符的百分号, 必须提供escap

31、e关键字和转义符, 例如,like%B%escapeB就是使用了escape关键字定义了转义字符B,将字符串“B%中的第二个百分号 ()作为实际值,而不是通配符。例7-16、查询所有姓“张”的同学信息。select*fromstu_infowherenamelike张查询结果如下:弹结禀词1_stu_idnamebirthdaysewaddressmarkmajorsdept1 口口而而而而:张元19351009男河南郑州5G0计算机科学与技术信息学院2药方行而应“张红1935-01-14女河南开封565讨篁机科学与技术信息学院32007070203张兰1986406女河南详昌571电子面莠信

32、息学院例7-17、查询所有姓“张”,而且姓名是两个字的同学信息。select*fromstu_infowherenamelike张查询结果如下:口结果I消息stu_idnamebirthdaysexmarkmajorsdept1!zoo加加isi张元1985-1009男河南郑州seo计菖机科学与技术信息学院22007070102张红1965-01-14女河南开封565计算机科学与技术信息学院32007070203张兰19B6-040B立河南许昌571电子商务信息学院例7-18、查询所有姓“张”或姓“王”的同学信息select*fromstu_infowherenamelike张王%查询结果如下

33、:结果 务消息$tu_idnamebitthdav含exaddressmarkmajorsdept1!2007070101?张元1985-10-09男22007070102张红1995-01-14文32007070103王明193E-07-0E男42007070203米兰1996-04-0E女例7-19、 查询所有不姓息。河南郑州560H篁机科学与技术信息学院河南开封565讨篁机科学与技术信息学际河南洛阳570讨算机科学与技术信息学吭河南许昌571电子商务信息学除张”也不姓“王”的同学信select*fromstu_infowherename查询结果如下:like八张王;|%r展i0消息sti

34、Lidnamebijthd剪sexaddessmark.dept|2007070104j李伟1996-03-11男河南郑州564计算机科学与技术信息学院22007070201郑澜19851?01女河南平顶山567电子商务信息学院32007070202赵恒19SS-02T3男河南周口56S电子商务信息学院42007030101李伟1335-09-12男河南郑州573会计学会讨学院52007030102钱丽1385-11-23安河南潮日573合计学会计学院62007080201孙植1386-11-19男河南南阳577财务管理会i十学院2.3、排序查询结果:在SQL语句中,orderby子句用于排序

35、。Orderby子句总是在where子句(如果有的话)后面说明的,可以包含一个或多个列,每个列之间以逗号分隔。可以选择使用asc|desc关键字指定按照升序|降序排序。如果没有特别说明,值是以升序列进行排序的,即默认情况下使用的是asc关键字。例7-20、查询所有同学课程编号701的课程成绩,并按由大到小的顺序输出。select*fromstu_gradewherecourse_id=701orderbygradedesc查询结果如下:消息stu_jdCQU均ejdgradeaiiiiiaiBiiaiBiiaiBiiB1|2007070104j701912、0而而而70189320070701

36、0270185使用orderby子句也可以根据两列或多列的结果进行排序, 并用逗号分隔开不同的排序关键字。 其实际排序结果是根据orderby子句后面列名的顺序确定优先级的。即查询结果首先以第一列的顺序进行排序,而只有当第一列出现相同的信息时,这些相同的信息再按第二列的顺序进行排序,依此类推。例7-21、查询所有同学课程编号701的课程成绩,并按由大到小的顺序输出,如果成绩相同,则按学号由小到大排序。select*fromstu_gradewherecourse_id=701orderbygradedesc,stu_id查询结果如下:Orderby子句除了可以根据列名进行排序外,还支持根据列的

37、相对位置(即序号)进行排序。例7-22、查询所有同学课程编号701的课程成绩,并按由大到小的顺序输出,如果成绩相同,则按学号由小到大排列。Selectstu_id,course_id,gradeFromstu_gradeWherecourse_id=701orderby3desc,1查询结果如下:口结果也呵软u_idcour$e_idgiade126070761041701912、5口而沅而27018932007070102701852.4、分组与汇总:(1)聚合函数:聚合函数是TSQL所提供的系统函数,可以返回一列,几列或全部列的汇总数据,用于计数或统计。这类函数(除count外)仅用于数值

38、型列,并且在列上使用聚合函数时,不考虑null值。例7-23、统计学生信息表中学生人数。SelectCOUNT*)as学生人数Fromstu_info查询结果如下:而结藏ILj消息学生人数1fW-irq例7-24、统计学生成绩表中学号为2007070102同学的最高分、最低分、平均分和总分。SelectMAX(grade),MIN(grade),AVG(grade),SUM(grade)Fromstu_gradeWherestu_id=2007070102,查询结果如下:I国结果肖息无列名)抚列名)因列却田列名)11里!再圉如6(2)分组汇总:使用聚合函数只返回单个汇总,而在实际应用中,更多的

39、是需要进行分组汇总数据。使用groupby子句可以进行分组汇总,为结果集中的每一行产生一个汇总值。Groupby子句与聚合函数有密切关系,在某种意义上说,如果没有聚合函数,groupby子句也没有多大用处了。Groupby关键字后面跟着的列名称为分组列,分组列中的每个得复值将被汇总为一行。如果包含where子句, 则只对满足where条件的行进行分组汇总。例7-25、统计学生成绩表中每个同学的最高分、最低分、平均分和总分。Selectstu_id,MAX(grade),MIN(grade),AVG(grade),SUMgrade)Fromstu_gradeGroupbystu_id例7-26、

40、统计学生成绩表中每个同学的最高分、最低分、平均分和总分,80分以下的成绩不参与统计。Selectstu_id,MAX(grade),MIN(grade),AVG(grade),SUMgrade)Fromstu_gradeWheregrade=80Groupbystu_id查询结果如下:F 给果感消息id无列名)无列名)/列名)优列智1|2007070101:96B1S743922007070102B7E385255320D7C70104印B839179(3)分组筛选:如果使用groupby子句分组, 则还可用having子句对分组后的结果进行过滤筛选。Having子句通常与groupby子句一

41、起使用, 用于指定组或合计的搜索条件,其作用与where子句相似,二者的区别如下:作用对象不同:where子句作用于表和视图中的行,而having子句作用于形成的组。Where子句限制查找的行,having子句限制查找的组。执行顺序不同。若查询句中同时有where子句和having子句, 执行时, 先去掉不满足where条件的行, 然后分组,分组后再去掉不满足having条件的组。Where子句中不能直接使用聚合函数, 但having子句的条件中可以包含聚合函数。例7-27、统计学生成绩表中每个同学的最高分、最低分、平均分和总分,并输出平均分大于87分的信息。Selectstu_id,MAX(

42、grade),MIN(grade),AVG(grade),SUMgrade)Fromstu_gradeGroupbystu_idHavingAVG(grade)87查询结果如下:严僦L的疝鼠1stu.id优列名)比列名)无列名)命列名)1j2007070104imea的179,r 一e-tel,rrl,r 一 l*r1(4)明细汇总:使用groupby子句对查询数据进行分组汇总,为每一组产生一个汇总结果, 每个组只返回一行, 无法看到详细信息。 使用compute和computeby子句既能够看到统计经营部的结果又能够浏览详细数据。例7-28、使用compute子句对所有学生的人数进行明细汇总

43、。select*fromstu_infocomputecount(stu_id)查询结果如下:wtyjdnannebirthdaysexaddfmarkmapradept12007070101|张元1986-1009男河南郑州576计算机科学与技术信息学院22007070102张红1985-0114女河南开封565计算机科学与技术信息学院32007070103王明1996-07-08男河南洛阳570计算机科学与技术信息学院420C7070104季伟1936-03-11男河南郑州564计箕机科学与技术信息学院52009070105李澜199G-1241女河南平顶山567电子商务信息学院S2009

44、07010G赵恒1936-02-03男河南周口5E6电子商务信息学院72009070107张兰1936-04W女河南许昌571电子商资信息学院32009070100李伟1935-0912男河南郑州578会计学会计学院32009070109钱丽199511-23女河南安阳57b会计学会计学院102009070110孙楠1986rliJ9男河南支阳573会计学会计学院在使用compute和computeby时,需要注意以下几点:Computeby子句不能与selectinto子句一起使用。Compute子句中的列必须在select子句的字段列表中出现。Computeby表示按指定的列进行明细汇总,

45、使用by关键字时必须同时使用orderby子句, 并且computeby中出现的列必须具有与orderby后出现的列相同的顺序,且不能跳过其中的列。例7-29、使用computeby子句按照院系对所有学生的人数进行明细汇总。select*fromstu_infoorderbysdeptbysdept查询结果如下:飞3结算出消息stu_i dnamebirthdaysexaddrmarkmaprsdept12009070108李伟19E5-O9-12男河南郑州578会计学会计学院22009070109钱明19E5-11-23女男河南安阳576会计学会计学院会计学会计学院32009070110孙楠

46、1966-11-19河南安阳5731ent31stujdBllillBIHIJIIBIKIIBIBIKIIBI2007070101riame张元birthdav1986-10-09网男addr河南郑州mark576major计萱机科学与技术sdept信息学院22007070102张红19B5-01-14女河南开封5G5计篁机科学与技术信息学院32007070103壬明19860703男河南洛阳570讨篁机科学与技术信息学院42007070104李伟19660311男河南郑州564计菖机科学与技术信息学院52009070105李澜19S6-1201女河南平567电子商务信息学院620090701

47、06赵恒1986-0203男河南周口566电子商务信息学院72009070107张兰19E60405女河南许昌571电子商务信息学院1ent;73、连接查询:前面介绍的查询都是针对单一的表,而在数据通库管理系统中,考虑到数据的冗余度低、数据一致性等问题,通常对数据表的设计要满足范式的要求,因此也会造成一个实体的所有信息保存在多个表中。当检索数据时,往往在一个表中不能够得到想要的信息,通过连接操作,可以查询出存放在多个表中同一实体的不同信息,给用户带来很大的灵活性。多表连接实际上就是实现如何使用一个表中的数据来选择另一个表中的行。而连接条件则主要通过以下方法定义两个表在查询中的关联方式:指定每个

48、表中要用于连接的列。典型的连接条件在一个表中的指定外键,在另一个表中指定与其关联的键。指定比较各列的值时要使用的比较运算符(=、冷)。表的连接的实现可以通过两种方法:利用select语句的where子句;在from子句中使用join(innerjoin,crossjoin,outerjoin,leftouterjoin,fullouterjoin等)关键字。例7-30、查询所有选修课程编号701的同学学号、姓名和成绩。Selectstu_info.stu_id,name,markFromstu_info,stu_gradeWherestu_info.stu_id=stu_grade.stu_i

49、dandcourse_id=701查询结果如下:结果b消息$tq_idnamemark.12007070101|张元57E张红565李伟5642320070701022007070104例7-31、查询所有选修课程的同学选修课程的成绩。Selectstu_info.stu_id,name,course_name,gradeFromstu_info,stu_grade,course_infoWherestu_info.stu_id=stu_grade.stu_idandcourse_info.course_id=stu_grade.course_id查询结果如下:|词结果展消息Lstu_idna

50、mecouisenamegrade1|20070701011张元计篁机基础E922007070101张元操作系统E1320070701UI张元计篁机网绍9E42007070102张虹计篁机基础G552007070102张虹操作系统74E2007070102张虹计篁机网绍7772007070104李伟计篁机基础9182007070104李伟操作系统G892007070101张元宏观经瞽学91102007070102张虹宏观经济学83112C07070101张元初级合计75122007070101张元财政学E2132007070101张元合计电苴化G2有时表名比较烦琐,使用起来很麻烦,为了程序的简

51、洁明了,在SQL中,也可以通过AS关键字为表定义别名。例7-32、查询所有同学所有课程的成绩。SelectA.stu_id,name,course_name,markFromstu_infoasA,stu_gradeasB,course_infoasCWhereA.stu_id=B.stu_idandB.course_id=C.course_id查询结果如下:|H结果&消息stu_idnamecou电jnamEmark12007070101张元计篁机基础57622007070101张元操作系统57632007070101张元计篁机网络57642007070102张红计篁机基础55552

52、007070102张虹操作系统55562007070102张虹计篁机网络55572007070104李伟计篁机基础564a2007070104李伟噪作系统56492007070101张元宏观经济学576102007070102张红宏观经济学5S5112007070101张元初级合计576122007070101张元财政学576132007070101张元合计电篁化576在select语句的from子句中, 通过指定不同类型的join关键字可以实现不同的表的连接方式,而在on关键字后指定连接条件。例7-33、查询所有选修课程的同学学号、姓名和成绩。Selectstu_info.stu_id,na

53、me,markFromstu_infoinnerjoinstu_gradeOnstu_info.stu_id=stu_grade.stu_id查询结果如下:口结果ns?stu_idnamemark1pooTnzoioi1张元57622C07070101张元57632007070101张元57642007070102张红5E5520C7U70102张虹5E562007070102张红5E572007070104李伟5E482007070104李伟5E492007070101张元576102007070101张元576112007070102张红565122007070102张红565132007

54、070101张元576142007070101张元576例7-34、 从stu_info表中查询入学分数比学号为如07070101同学高的所有同学信息。SelectR1.stu_id,R1.name,R1.markFromstu_infoasR1innerjoinstu_infoasR2OnR2.stu_id=200707010TandR1.markR2.mark查询结果如下:飞3结果14消息1:2009070108I李伟578例7-35、查询所有同学的选修课程信息。Selectstu_info.stu_id,name,markFromstu_infoleftouterjoinstu_grad

55、e查询结果如下:结果3消息xtu_idnamemark1:2007070101?!-张元57622007070101强元57632007070101张元57E42007070101张元57E52007070101张元57E62007070101张元57E72007070101张元57882007070102张红5E592007070102张红5E51020C7U70102张红5E5H2007070102张红5E5122007070102张红565132007070103王明570142007070104李伟5E4152007070104李伟564162009070105李澜5671720090

56、70106赵恒566182009070107张兰571192009070108李伟578202009070109钱丽576212009070110孙楠573例7-36、查询所有同学的选修课程信息。Selectstu_info.stu_id,name,markFromstu_graderightouterjoinstu_Onstu_info.stu_id=stu_grade.stu_id查询结果如下:infostui_idnamemark1i2007070101i张元57622007070101张元57632007070101张元57E42007070101张元57B52007070101张元5

57、7E62007070101张元57672007070101张元57682007070102张红5E592007070102张红5E5102007070102张红565112007070102张红565122007070102张红565132007070103壬明570142007070104李伟564152007070104季伟5642009070105李澜567172009070106赵恒5EE1S2009070107鬃兰57119200907010G李佬57g202009070109钱丽576212009070110孙植5734、嵌套查询:所谓嵌套查询指的是在一个select查询语句中包含

58、另一个 (或多个)select查询语句。其中,外层的select查询语句叫外部查询,内层的select查询语句叫子查询。嵌套查询的执行过程:首先执行子查询语句,得到的子查询结果集传递给外层主查询语句,作为外层主查询的查询项或查询条件使用。子查询也可以再嵌套子查询。4、1单列单值嵌套查询:例7-37、查询选修“计算机基础”的学生成绩信息selectfromstu_gradewherecourse_id=(selectcourse_idFromcourse_infoWherecourse_name=计算机基础,)查询结果如下:回结果13消息stu_idcaurse_idgrade1I2007070

59、101f701S9220070701oe701S5320070701C470191例7-38、查询比“2007070101”同学年龄大的同学信息。select*fromstu_infowherebirthday(selectbirthdayFromstu_infoWherestu_id=2007070101)查询结果如下口蜜打3消息sbu_idnamebirthdaysexaddrjriaikmajorsdept1(2007070102;张红196501-14女河南开封565计篁机科学与技术信息学院22007070103壬明19060700男河南洛阳570计篁机科学与技术信息学院32007070104抖138603-11男河南郑州564计篁机科学与技术信息学院42009070106赴恒1966-02-03男河南周口566电子商务信息学院

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论