Download - 第四章 关系数据库的建立

Transcript
Page 1: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第四章 关系数据库的建立

SQL 概述 数据库的创建与管理 基本表的创建与管理 数据查询 数据更新 视图的创建与管理

Page 2: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第一节 SQL 概述

一、 SQL 的特点与功能

二、 SQL Server概述

三、 SQL Server 2000的主要组件

Page 3: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一、 SQL 的特点与功能

1.功能

除了查询(Query),还包括操纵(Manipulation)、定义( Definition)和控制( Control)。

2.特点:(1) 高度非过程化(2) 面向集合的操作方式(3) 简洁易学,灵活易用(4) 使用方式灵活方便

Page 4: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

标准 SQL语言只能完成数据库的大部分操作,仍然有小部分操作标准 SQL语言无法胜任,许多数据库厂商针对自己的数据库软件版本做了某些扩充和修改,增加了一些非标准的 SQL 语言。

经扩充后的 SQL语言称为扩展 SQL语言。应用于Microsoft公司的数据库产品 SQL Server中的Transact-SQL 语言就是一种典型的扩展 SQL 语言。

Page 5: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

二、 SQL Server 概述

1. SQL Server 的发展简史

2. SQL Server 2000 的特点(1) 与 Internet 的紧密结合

(2) 可扩展性和可用性

(3) 企业级数据库

(4) 简单、友好的操作方式

(5) 数据仓库支持

Page 6: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

3. SQL Server 2000的体系结构(1) 客户机/服务器( C/S )体系结构(2) 数据库体系结构(3) 关系数据库引擎体系结构

Page 7: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

1. SQL Server 2000的服务器端组件 ( 1) SQL Server Service

( 2) SQL Server Agent

( 3)MS DTC (Microsoft Distributed Transaction Coordinator Service,微软分布式事务协调器( 4)Microsoft Search Service

2. SQL Server 2000客户端组件( 1) 企业管理器:可以完成几乎所有操作。

( 2)查询分析器:编辑和执行 SQL语句。

三、 SQL Server 2000的主要组件

Page 8: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第二节 数据库的创建与管理

一、 SQL Server 数据库的构成

二、创建数据库

三、修改数据库

四、删除数据库

Page 9: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一、 SQL Server数据库的构成

1. SQL Server的数据库文件( 1)主数据文件 用于存储数据库数据,并包含数据库的启动信息。扩展名是 .mdf 。( 2 )辅助数据文件 用于存储不能置于主数据文件中的所有数据。扩展名是 .ndf 。( 3)日志文件 用于存储对数据库中数据的操作记录。扩展名是 .ldf 。

Page 10: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. SQL Server 2000的默认数据库( 1)系统数据库 master--记录了 SQL Server所有的服务器级系统信息,所有的注册账户和密码以及所有的系统设置信息,所有用户定义数据库的存储位置和初始化信息。 model--记录了所有的临时表格、临时数据和临时创建的存储过程 empdb--建立新数据库的模板,包含了将复制到每个数

据库中的系统表 msdb -- 被 SQL Server Agent用于进行复制、作业调

度以及管理报警等活动

Page 11: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 2)示例数据库 pubs--模仿一个图书出版公司建立的数据库模型。有出版者 (publishers)、出版物( titles)、作者( authors)、书店( stores)、员工 (employee)

等表 。 Northwind--模仿一个贸易公司的数据库模型。雇员( Employees) ,顾客( Customers),运输商( Shipper),供货商( Supplier),销售区( Territories),订单( Order )等表 。

Page 12: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

1. 使用企业管理器创建数据库

2. 使用 Transact-SQL语句创建数据库 CREATE DATABASE 数据库名[ ON

[ < 数据文件定义 1 > [ ,<数据文件定义 2>,...]]

[ , < 文件组 1 > [ ,<文件组 2> ] ]

[ LOG ON { < 日志文件定义 1 > [ ,< 日志文件定义 2>,…]}]

二、创建数据库

Page 13: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

例 4.1 要创建一个名为 pubs1数据库,指定数据库初始大小为10MB,最大容量为 50MB,数据库文件的增量为 5MB,并同步建立事务日志。

CREATE DATABASE pubs1ON ( NAME = pubs_dat, FILENAME = 'c:\data\pubs1dat.mdf', SIZE = 10 MB, MAXSIZE = 50 MB, FILEGROWTH = 5 MB )LOG ON( NAME = 'pubs_log', FILENAME = 'c:\data\pubs1log.ldf', SIZE = 5 MB, MAXSIZE = 25 MB, FILEGROWTH = 5 MB )

Page 14: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. 使用 Transact-SQL语句修改数据库ALTER DATABASE 数据库名{ ADD FILE <数据文件定义 1 > [ ,< 数据文件定义 2>,... ] | ADD LOG FILE < 日志文件定义1 > [ ,<日志文件定义

2>,…] | REMOVE FILE 数据文件名| MODIFY FILE < 数据文件定义 > | MODIFY NAME = 新数据库名}

三、修改数据库

1. 使用企业管理器修改数据库

Page 15: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

例 4.3 将 pubs1数据库的容量扩充到 80MB。ALTER DATABASE pubs1 MODIFY FILE (NAME = pubs_dat, SIZE = 80MB)例 4.4 向 pubs1 数据库添加一个 5 MB 大小的辅助数据文件。ALTER DATABASE pubs1ADD FILE ( NAME = pubsdat2, FILENAME = 'c:\Data\pubsdat2.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB)

Page 16: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

DROP DATABASE 数据库名例 4.5 删除 Archive 数据库。 DROP DATABASE Archive

四、删除数据库

1. 使用企业管理器删除数据库2. 使用 Transact-SQL语句删除数据库

Page 17: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第三节 基本表的创建与管理

一、创建基本表

二、修改基本表

三、删除基本表

四、建立与删除索引

Page 18: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一、创建基本表

1. 基本表结构的定义

( 1)使用企业管理器定义基本表的结构 ( 2)使用 SQL的 CREATE TABLE 语句定义基本表CREATE TABLE <表名 > (<列名 1><数据类型 >[列级完整性约束条件 ]

[,<列名 2><数据类型 >[列级完整性约束条件 ]]…

[,<表级完整性约束条件 >])

Page 19: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

例 4.6 创建表 4-5所示的 publishers表。CREATE TABLE publishers (

pub_id char(4) NOT NULL UNIQUE, /*列级完整性约束, pub_id 取值唯一,不许取空值 */

pub_name varchar (40) ,

city varchar (20) ,

state char (2),

country varchar(30) DEFAULT ‘USA’ )

Page 20: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. 基本表数据的输入( 1)用企业管理器为表输入数据( 2)使用 SQL的 INSERT语句为表输入数据INSERT INTO <表名 > [<列名列表 >] VALUES( <值列表 >)表例 4.7 向 employee表中插入一条新员工记录’( PMA42628M’, ‘Accorti’, 13, 35, ‘0877’, 1992-08-

27)。INSERT INTO employee VALUES(‘PMA42628M’,’Accorti’,13,35,’0877’,’1992-08-27’)

Page 21: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

用 SQL的 ALTER TABLE语句修改基本表的一般格式为:

ALTER TABLE<表名>[ADD <新列名><数据类型>[<完整性约束>]][ADD PRIMARY KEY <列名>][ADD FOREIGN KEY <列名> REFERENCES <表名

>(<列名>) ][DROP <完整性约束>][DROP COLUMN <列名>][ALTER COLUMN <列名><新数据类型>]

二、修改基本表

Page 22: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

例 4.9 为 employee表增加新列 fname,数据类型为 20个可变长字符,并为 pub_id列添加外键约束。

ALTER TABLE employee ADD fname varchar(20) ADD FOREIGN KEY (pub_id) REFERENCES

publishers(pub_id)例 4.10 将 publishers表中的 state列的数据类型改为 10个可变长字符。

ALTER TABLE publishersALTER state varchar(10)

Page 23: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

三、删除基本表

用 SQL的 DROP TABLE语句删除基本表的一般格式是:

DROP TABLE <表名 >

例 4.11 删除原来创建的 employee表。DROP TABLE employee

Page 24: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

( 1)建立索引 CREATE [UNIQUE][CLUSTER]INDEX<索引名 > ON <表名 >( <列名 >[<次序 >][,<列名 >[<次序 >]]

…)例:在 employee表中的 lname 列上建立一个聚簇索引

CREATE CLUSTER INDEX ind-lname ON employee(lname)

( 2 )删除索引 DROP INDEX <索引名 > 例 4.12 删除 employee表中的 ind-lname索引。 DROP INDEX ind-lname

四、建立与删除索引

Page 25: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第四节 数据查询

一、单表查询

二、连接查询

三、嵌套查询

Page 26: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一、单表查询

1.选择表中的若干列查询指定列例 4.12 查询 employee表中全体员工的工号、姓和名。

SELECT emp_id,fname,lname FROM employee 查询全部列例 4.13 查询全体员工的详细记录。SELECT * FROM employee

查询经过计算的值 例 4.14 查询全体员工的工号和姓名。SELECT emp_id, fname+‘ ’ +lname emp_name FROM employee

Page 27: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

2. 选择表中的若干元组在 SELECT语句中加入WHERE 子句例 4.16 ’查询所有公司编号为 0877’ 且级别大于 35的员工工号。SELECT emp_id FROM employee WHERE pub_id=’0887’ AND job_lvl>35 例 4.17 ’查询所有在 1991-1-1’ ’到 1996-12-31’之间聘用的员工工号与聘用时间。SELECT emp_id, hire_date FROM employee WHERE hire_date BETWEEN ’1991-1-1’ AND ’1996-12-31’

Page 28: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

例 4.18 “查询所有位于 Boston” “和 New York”的出版公司的公司名和城市。SELECT pub_name,city FROM publishers WHERE city IN (‘Boston’,’New York’)

例 4.19 ’查询所有工号以 P’开头的员工工号和姓名。 SELECT emp_id, fname, lname FROM employee WHERE emp_id LIKE ‘P%’

例 4.20 查询所有州为空的出版公司的信息。 SELECT * FROM publishers WHERE state IS NULL

注意这里的 IS不能用等号 (= ) 代替。

Page 29: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

消除取值重复的行:在 SELECT语句中加入DISTINCT关键字例 4.21 查询 employee表中所有员工的级别及所在出版公司的编号。SELECT job_lvl, pub_id FORM employee比较:SELECT DISTINCT job_lvl, pub_id FORM employee

Page 30: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

3.对查询结果排序 在 SELECT语句中加入 ORDER BY子句 例 4.22 查询 employee ’表中所有公司编号为 9952’的员工信息。结果以聘用时间按升序排列。

SELECT * FROM employee WHERE pub_id=’ 9952’ ORDER BY hire_date

4.使用计算函数汇总数据 在 SELECT后使用表 4-10给出的函数 例如:查询 employee表中 job_id的最大值和最小值 SELECT MAX(job_id),MIN(job_id) FROM

employee注:计算函数不能与其它未使用函数的列混合出现,也不能出现在

WHERE子句中。

Page 31: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

5.对查询结果分组 在 SELECT语句中加入 GROUP BY子句例 4.23 查询 employee表中同一出版公司的人数。SELECT pub_id, COUNT(*) num FROM employee GROUP BY pub_id 如果分组后,还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,要用HAVING代替WHERE子句。例 4.24 查询 employee表中人数超过 3人的出版公司编号。SELECT pus_id FROM employee GROUP BY pus_id HAVING COUNT(*)>3注:查询列要么是分组依据列,要么是计算函数。

Page 32: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

连接查询中用来连接两个表的条件称为连接条件,其一般格式为:

[<表名 1>.<列名 1><比较运算符 >[<表名 2>.]<列名 2>

例 4.25 查询各员工所对应的公司情况,要求显示员工工号、对应的公司名、公司所在城市。

SELECT employee.emp_id, publishers.pub_name, publishers.city FROM

employee, publishers WHERE employee.pub_id=publishers.pub_id … 还可以使用: FROM 表 1 JOIN 表 2 ON 连接条件

包括内连接: INNER JOIN 外连接: LEFT OUTER JOIN, RIGHT OUTER

JOIN, FULL OUTER JOIN

二、连接查询

Page 33: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

三、嵌套查询

在 SQL —语言中, 个 SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或 HAVING短语条件中的查询称为嵌套

查询。例 4.26 查询与姓 Accorti具有相同公司编号的所有员工(但不包括 Accorti)的信息。SELECT * FROM employee

WHERE pub_id IN ( SELECT pub_id FROM employee where lname=’Accorti’)

AND lname!=’Accorti’

Page 34: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

嵌套查询可实现多表之间相关内容的查询。例 4.27 查询级别为 35的员工所对应的出版公司的名称与所在城市。

SELECT pub_name, city FROM publishersWHERE pub_id IN ( SELECT pub_id FROM

employee where job_lvl=35)

Page 35: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第五节 数据更新

一、插入数据

二、修改数据

三、删除数据

Page 36: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

一、插入数据

插入单个元组 见第三节(使用 SQL的 INSERT语句为表输入数据) 插入子查询结果INSERT INTO 表名 [(<属性列 1>[, <属性列名 2>]..)] 子查询

例 4.28 将 employee表中所有级别大于 100的员工工号、姓名存入一个新表 emp1( emp_id, name)中。

INSERT INTO emp1

SELECT emp_id, fname+ ‘ ’+lname FROM employee WHERE job_lvl>100

Page 37: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

二、修改数据

UPDATE <表名 >

SET <属性列 1>=<表达式 1>[, <属性列 2>=<表达式2>]…

[WHERE<条件表达式 >] 修改一个元组的值 修改多个元组的值 带子查询的修改语句

Page 38: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

例 4.29 将 employee ’表中员工号为 PMA42628M’的员工的聘用’日期改为 1992-08-30’。

UPDATE employee SET hire_date=’1992-08-30’

WHERE emp_id=’PMA42628M’

例 4.30 将所有员工的级别上调 1级。UPDATE employee SET job_lvl= job_lvl+1

例 4.31 ’将对应出版公司名为 Binnet&Hardley’的员工的工作等级修改为 12。

UPDATE employee SET job_id=12

WHERE pub_id = (SELECT pub_id FROM publishers WHERE pub_nameid=’Binnet&Hardley’)

Page 39: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

三、删除数据

DELETE FROM 表名 [WHERE<条件表达式 >] 删除一个元组的值 删除多个元组的值 带子查询的删除语句

Page 40: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

例 4.32 ’ 由于员工号为 PMA42628M’的员工离职,需要在员工表 employee中将其删除。

DELETE FROM employee WHERE emp_id=’ PMA42628M’

例 4.33 删除所有出版公司的元组。DELETE FROM publishers例 4.34 ’删除对应出版公司所在州为 NY’的员工的记录。

DELETE FROM employee WHERE pub_id IN (SELECT pub_id FROM publishers

WHERE state=’NY’)

Page 41: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

第六节 视图的创建与管理 一、创建视图

CREATE VIEW <视图名 >[<列名 1>[, <列名 2>]…]AS <子查询 >[WITH CHECK OPTION] 例 4.35 创建一个只包括公司编号为 '9952'的员工信息的视图 v_employee。

CREATE VIEW v_employee AS SELECT

emp_id,fname,lname,job_id,job_lvl,hire_date, pub_id FROM employee WHERE pub_id= '9952'

WITH CHECK OPTION

Page 42: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

二、查询视图同查询表

三、更新视图类似更新表(1) 若视图是由两个以上基本表导出的,则此视图不允许更新。(2) 若视图的字段来自字段表达式或常数,则不允许对此视图执行

Insert和 Update操作,但允许执行 Delete操作。(3) 若视图定义中含有 Group By或 Distinct子句,则此视图不允许更新。

(4) 若视图中有嵌套查询,并且内层查询的 From子句涉及的表也是导出该视图的基本表,则此视图不允许更新。

(5) 一个不允许更新的视图上定义的视图也不允许更新。

Page 43: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

五、视图的作用 ( 1)为用户集中数据,简化用户的数据查询和处理。( 2 )屏蔽数据库的复杂性,有利于数据库的重构。( 3)简化用户权限的管理,加强对机密数据的安全保

护。( 4 ) 多角度看待同一数据,有利于数据共享。

四、删除视图DROP VIEW <视图名>

Page 44: 第四章 关系数据库的建立

韩耀军等 编著

数据库系统原理与应用数据库系统原理与应用 机械工业出版社机械工业出版社

复习思考题3、 4、 6、 8、 10 (双)