• 1. 数据库系统原理与应用 第三讲
  • 2. 上节课的回顾选择关系运算 投影关系运算 连接关系运算 除关系运算 关系代数运算在查询中 创建和使用数据库
  • 3. 课堂练习设学生和选课关系中数据如下, 学生 选课学号姓名年龄1001李强201003周扬21学号课程名成绩1001数据库811001单片机921003微积分77
  • 4. 学生.学号姓名年龄选课.学号课程名成绩1001李强201001数据库811001李强201001单片机921001李强201003微积分771003周扬211001数据库811003周扬211001单片机921003周扬211003微积分77
  • 5. 学生.学号姓名年龄选课.学号课程名成绩1001李强201001数据库811001李强201001单片机921003周扬211003微积分77
  • 6. 学号姓名年龄课程名成绩1001李强20数据库811001李强20单片机921003周扬21微积分77
  • 7. 第八章 创建和使用表8.1 表的概念 8.2 创建表 8.3 修改表结构(自学) 8.4 建立数据库关系图 8.5 更改表名(自学) 8.6 删除表(自学) 8.7 记录的新增和修改
  • 8. 8.1 表的概念一、表 数据库中,表是反映现实世界某类事务的数学模型,现实世界中事务的属性对应表的列——字段,而数据类型则是指定列所保存数据的类型。
  • 9. 数据类型 类型 描             述 bit 整型 其值只能是0、1或空值。如Yes 或No、True 或Fa lse int 整型 存储从- 231(-2147483648)到231 (2147483 647)之间的整数。这种数据类型在数据库里占用4个字节 smallint 整型 存储从- 215(-32768)到215(32767)之间整数。占用2 字节空间 tinyint 整型 能存储从0到255 之间的整数。占用1 个字节 decimal 精确数值型 用来存储从-1038-1到1038-1的固定精度和范围的数值型数据。p (有效位数),有效位数必须是 1 至最大有效位数 38 之间的值。预设有效位数是 18. s (小数位数) 小数点右侧所能储存的最大十进位数。小数位数必须是从 0 到 p 的值。预设小数位数是 0.money 货币型 表示钱和货币值。这种数据类型能存储从-9220亿到9220 亿之间的数据,精确到货币单位的万分之一
  • 10. 数据类型 类型 描             述 real 近似数值型 可以表示数值在-3.40E+38到3.40E+38之间的浮点数 datetime 日期时间型 表示日期和时间。这种数据类型存储从1753年1月1日到9999年12月3 1日间所有的日期和时间数据char 字符型 用来存储指定长度的定长非统一编码型的数据。此数据类型的列宽最大为8000 个字符 varchar 字符型 同char类型一样,用来存储非统一编码型字符数据。与char 型不一样,此数据类型为变长。 text 字符型 用来存储大量的非统一编码型字符数据。这种数据类型最多可以有231-1或20亿个字符 image 二进制数据类型 用来存储变长的二进制数据,最大可达231-1或大约20亿字节
  • 11. 8.1 表的概念二、表中数据的完整性 1.规则 指表中数据应满足的一些基本条件 2.默认值 指表中数据的默认取值 3.约束 指表中数据应满足的一些强制条件 非空约束、检查约束、唯一约束、主键约束、外键约束
  • 12. 8.2 创建表一般有两种方法: SQL Server Management Studio管理器 T-SQL命令语句书上例8.1 在school数据库中建立student表
  • 13. 8.2 创建表
  • 14. 8.2 创建表提高 用户创建一个表后,SQL Server系统表sysobjects中会有一条相应的记录,其中name列就是该表的表名,type列为对象类型,这里为“U”。
  • 15. 8.4 建立数据库关系图一个数据库中存在多个表,而表和表之间存在着一些关联关系 SQL Server Management Studio管理器 T-SQL命令语句书上例8.3 在school数据库中,对表student、表score、表teacher、表course建立关联关系
  • 16. 8.4 建立数据库关系图
  • 17. 8.4 建立数据库关系图
  • 18. 8.4 建立数据库关系图
  • 19. 8.7 记录的新增和修改数据库中的记录一般都是通过T-SQL来进行添加、修改和删除的,当然少量数据也可以通过SQL Server管理控制器来进行。 前者是利用设计人员编写的相关程序来实现;后者是操作员手工进行输入,因此要根据表之间的关联性,注意输入数据的先后次序。
  • 20. 选择要添加数据的表名,按鼠标右键,在弹出的快捷菜单中选择打开表8.7 记录的新增和修改
  • 21. 8.7 记录的新增和修改关系图窗格条件窗格SQL窗格结果窗格
  • 22. 8.7 记录的新增和修改关系图窗格条件窗格SQL窗格结果窗格
  • 23. 8.7 记录的新增和修改如书上例8.6中,对school数据库中,添加表student、表score、表teacher、表course内的数据。1)先添加表student和表teacher的记录 2)再添加表course内的数据 3)最后添加表score内的内容
  • 24. 查询设计 ( 参考教科书《第12章 视图》)
  • 25. 教材上示例中已建三张数据表: 学生表 Student 课程表 Course 成绩表 Score
  • 26. 查询1学生表 Student成绩表 Score
  • 27. 使用SQL Server管理控制器创建视图(书P207-210)
  • 28. 使用SQL Server管理控制器创建视图(书P207-210)
  • 29. 使用SQL Server管理控制器创建视图(书P207-210)关系图窗格网格窗格SQL窗格结果窗格
  • 30. 使用SQL Server管理控制器创建视图(书P207-210)问题:右边的查询应该怎么处理?学生表 Student成绩表 Score课程表 Course源表:
  • 31. 步骤1右击“视图”钮,再选“新建视图”使用SQL Server管理控制器创建视图(书P207-210)
  • 32. 步骤2在“添加表”窗中,选择三张表添加到查询2的“关系图窗格”中后“关闭”。使用SQL Server管理控制器创建视图(书P207-210)
  • 33. 步骤3把学号、姓名、课程名、成绩字段拖入下方网格窗口的列中,做为输出字段。
  • 34. 使用SQL Server管理控制器创建视图(书P207-210)步骤4若要查看效果,可击“!”钮。我们看到字段名没有符合我们的要求
  • 35. 使用SQL Server管理控制器创建视图(书P207-210)步骤5在网格窗格中对每个字段输入一个要显示的别名。
  • 36. 使用SQL Server管理控制器创建视图(书P207-210)步骤6还可以在“筛选器”中设置筛选条件,如输入<70
  • 37. 较复杂的筛选表达式,如查80~90之间的成绩:使用SQL Server管理控制器创建视图(书P207-210)
  • 38. 第九章 T-SQL基础9.1 SQL 9.2 T-SQL语句的执行(自学) 9.3 数据定义语言 9.4 数据操纵语言 9.5 数据查询语言 9.6 T-SQL程序设计基础
  • 39. ●当前最常用的关系数据库系统, 通过称为SQL的语言对数据库进行查询和更新。 SQL全称是Structure Query Language,即结构化查询语言。 尽管SQL的许多重要的特征己经超越了关系代数的范畴, 例如聚合运算(如求和、统计)以及数据库更新等, 但是SQL的重要核心是和关系代数等价的。 ●SQL是一种非过程性语言,使用时只需告诉数据库需要什麽数据,怎样显示就可以了,不必关心其内部操作。9.1SQL
  • 40. ● SQL语言不止是查询, 它包括:数据查询语言(DQL)、数据定义语言( DDL)、数据操纵语言( DML)、数据控制语言( DCL) 。 ●SQL现已成为关系数据库领域中一个主流语言, SQL语句能够嵌入到各高级语言程序中, 并呈现统一的语法结构。9.1 SQL
  • 41. 9.3 数据定义语言CREATE DATABASE database_name [ [ON [filespec] ] [LOG ON [filespec] ] ] 其中filespec定义为 [ NAME = logical_file_name , ] FILENAME = ‘os_file_name’ [ , SIZE = size ] [ , MAXSIZE = { max_size | UNLIMITED } ] [ , FILEGROWTH = growth_increment ] 一、数据库的操作语句 1.创建数据库
  • 42. 例:CREATE DATABASE [school] ON ( NAME = 'school', FILENAME = 'c:\MSSQL\DATA\school.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = 'school_log', FILENAME = 'c:\MSSQL\DATA\school_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)9.3 数据定义语言
  • 43. 9.3 数据定义语言ALTER DATABASE database_name { ADD FILE filespec | ADD LOG FILE filespec | REMOVE FILE logical_file_name | MODIFY FILE filespec | MODIFY NAME = new_dbname } 其中filespec定义为 [ NAME = logical_file_name , ] FILENAME = ‘os_file_name’ [ , SIZE = size ] [ , MAXSIZE = { max_size | UNLIMITED } ] [ , FILEGROWTH = growth_increment ] 2.修改数据库
  • 44. 9.3 数据定义语言USE database_name3.使用数据库DROP DATABASE database_name4. 删除数据库
  • 45. 9.3 数据定义语言CREATE TABLE table_name ( column_name1 data_type [ NULL | NOT NULL] [ PRIMARY KEY | UNIQUE ] [ FOREIGN KEY [ (column_name) ] REFERENCES [ (ref_column) ] ] [ , column_name2 data_type … ] … )二、表的操作语句 1.表的创建
  • 46. 例:CREATE TABLE [teacher]( [tno] [char](5) NOT NULL PRIMARY KEY , [tname] [char](10) NULL, [tsex] [char](2) NULL, [tbirthday] [datetime] NULL, [prof] [char](10) NULL, [depart] [char](16) NULL)9.3 数据定义语言CREATE TABLE [course]( [cno] [char](6) NOT NULL PRIMARY KEY, [cname] [char](16) NULL, [tno] [char](5) NULL FOREIGN KEY REFERENCES teacher(tno) )
  • 47. 9.3 数据定义语言SELECT column_names INTO 表1 FROM 表22. 由其他表来创建新表例:从school数据库中把student表的所有内容复制到studentdup表中。 USE school SELECT * INTO studentdup FROM student或者 USE school SELECT sno,sname,ssex,sbirthday,sclass INTO studentdup FROM student
  • 48. 9.3 数据定义语言3. 修改表结构ALTER TABLE table_name ADD [column_name data_type ] [ PRIMARY KEY | CONSTRAINT ] [ FOREIGN KEY (column_name) REFERENCES (ref_column) ] DROP [ CONSTRAINT ] constraint_name | column_name
  • 49. 9.3 数据定义语言ADD子句为增加列 DROP子句为删除列或限制例在表studentdup中添加一个民族的字段(snation 可变长度字符 最长为30) USE school ALTER TABLE studentdup ADD snation varchar(30)
  • 50. 9.3 数据定义语言4.删除表DROP TABLE table_name
  • 51. 9.4 数据操纵语言INSERT [ INTO ] 表或视图名称 [ (列表名) ] VALUES (数据值)主要包括数据的添加、修改和删除 1.INSERT语句注意: 1)各数据项间必须用逗号隔开 2)字符型和日期型数据要用单引号括起来 3)数据值的次序必须和列名表次序相符 4)如没有列名表,则数据值的次序必须和表中各列次序一致
  • 52. 例:向student表中插入一条学生记录,其内容为(‘200’,’曾雷’,’女’,1978-2-3’, ’05001’)9.4 数据操纵语言USE school INSERT INTO student VALUES (‘200’, ’曾雷’,’女’,’1978-2-3’, ’05001’)或者INSERT INTO student (sno,sname, ssex,sbirthday,sclass) VALUES (‘200’, ’曾雷’,’女’,’1978-2-3’, ’05001’)
  • 53. 9.4 数据操纵语言UPDATE 表或视图名称 SET 列名1=数据值1 [ ,列名2=数据值2 ,… ] [ WHERE 条件 ]2.UPDATE语句例:将student表中学号为200的学生性别改为男。 USE school UPDATE student SET ssex=‘男’ WHERE sno=‘200’
  • 54. 9.4 数据操纵语言DELETE 表或视图名称 [ WHERE 条件 ]3.DELETE语句例:将student表中学号为200的学生删除。 USE school DELETE student WHERE sno=‘200’
  • 55. 建立数据库的目的是为了查询数据, 因此, 可以说数据查询是数据库的核心操作。 而SQL的核心语句, 是执行查询操作的SELECT语句。 该语句具有灵活的使用方式和丰富的功能, 其一般格式为:SELECT [ ALL | DISTINCT] 列名表 FROM 表名或视图名 [ WHERE 条件表达式] [ GROUP BY 分组表达式 [ HAVING 分组表达式 ] ] [ ORDER BY 次序表达式 [ ASC ┃DESC ] ]9.5 数据查询语言
  • 56. 根据WHERE子句的条件表达式, 从FROM子句指定的数据表或视图中, 找出满足条件的元组, 再按SELECT子句中的目标列表达式, 选出元组中的属性值形成结果表。 如果有GROUP子句, 则将结果按列名1的值进行分组, 该属性列值相等的元组为一个组。 如果GROUP子句带有HAVING短语, 则只有满足指定条件的组才予输出。 如果有ORDER子句, 则结果表还要按列名2的值升序或降序排序。含义是:SELECT语句的一般格式
  • 57. 一、投影查询9.5 数据查询语言 选择查询表的全部列或部分列,列名之间用“,”分隔。 选择全部列时可以不写列名,用“*”代替。 如果要在结果中去除重复行的话,需要在列名前加上关键字DISTINCT。
  • 58. 本例对以下购进凭证表 进行SQL查询操作。9.5 数据查询语言
  • 59. SELECT * FROM 购进凭证表选表中的所有字段显示:SELECT * FROM 表名一个最简单的SELECT查询语句9.5 数据查询语言
  • 60. SELECT 商品编号, 单价, 数量 FROM 购进凭证表●选表中的部分字段输出显示: SELECT 购进凭证表.商品编号, 购进凭证表.单价, 购进凭证表.数量 FROM 购进凭证表●字段前也可标明表名:选择若干字段(投影查询)9.5 数据查询语言
  • 61. SELECT 商品编号, 单价, 数量 AS 购进数量 FROM 购进凭证表可以为输出的字段另外取名(但不会改变原表字段名):为输出字段另外取名9.5 数据查询语言
  • 62. 二、选择查询9.5 数据查询语言 按照一定的查询条件,从表中提取符合条件的记录。 条件要放在关键字WHERE后面。 多个条件可以用逻辑运算符AND、OR、NOT来连接。
  • 63. SELECT * FROM 购进凭证表 WHERE 大类名 = ‘饼干’ 只显示购进凭证表中“饼干”大类的记录9.5 数据查询语言
  • 64. 三、排序查询9.5 数据查询语言 对从表中查询出来的结果,按一个列或多个列进行排序。 排序的列名要放在关键字ORDER BY后面。 默认排序方式为升序,关键字是ASC,也可指定为降序,关键字为DESC。
  • 65. SELECT 商品编号, 大类名, 单价, 数量 FROM 购进凭证表 ORDER BY 大类名, 单价 DESC SELECT * FROM 购进凭证表 ORDER BY 大类名 ●显示时相同大类名排在一起 ●对多字段排序, 并逐个指定升降序 输出时相同大类名排在一起, 同一大类商品, 按单价降序排序 降序默认ASC 升序9.5 数据查询语言
  • 66. 近期自学与上机安排
  • 67. 自学与上机通知 ●自学与上机内容: 自学第9、10章 完成上机实习:做完上机练习2 ●要求: 在上机时,显示你的练习2的结果。
  • 68. (本页无文本内容)