五、设计题(共50分)
现有关系数据库如下:
数据库名:医院数据库
医生表(编号,姓名,性别,出生日期,职称)
病人表(编号,姓名,性别,民族,身份证号)
病历表(ID,病人编号,医生编号,病历描述)
用SQL语言实现下列功能的sql语句代码:
1. 创建上述三表的建库、建表代码;
要求使用:主键(师医生表.编号,病人表.课号)、外键(病历表.医生编号,病历表.病人课号)、非空(职称,姓名)、检查(性别),自动编号(ID) (16分)
2. 将下列医生信息添加到医生表的代码
编号 姓名 性别 出生日期 职称
100001 杜医生 男 1963-5-18 副主任医师
100002 郭医生 女 1950-7-26 副主任医师
100003 刘医生 男 1973-9-18 医师
修改 编号为100002的医生职称为‘主任医师’
删除 编号为100003的医生信息 (8分)
3. 写出创建:医疗表视图(医生编号,姓名,病人姓名,病历)的代码;(4分)
4. 写出所有病人编号、姓名、病历、以及病人所对应的医生编号的查询语句;(4分)
5. 写出创建: 输出某医生(根据医生编号即可)看病人数存储过程以及执行过程(要求输入医生姓名的参数,输出病人数)(6分)。
6. 写出查询1970年以前出生的医生(4分)。
7. 检索有病人的医生信息。(4分)
8. 创建一个默认,并将其绑定到医生表的成绩职称列上,默认值为“医师”。(4分)
现有关系数据库如下:
数据库名:医院数据库
医生表(编号,姓名,性别,出生日期,职称)
病人表(编号,姓名,性别,民族,身份证号)
病历表(ID,病人编号,医生编号,病历描述)
用SQL语言实现下列功能的sql语句代码:
1. 创建上述三表的建库、建表代码;
要求使用:主键(师医生表.编号,病人表.课号)、外键(病历表.医生编号,病历表.病人课号)、非空(职称,姓名)、检查(性别),自动编号(ID) (16分)
2. 将下列医生信息添加到医生表的代码
编号 姓名 性别 出生日期 职称
100001 杜医生 男 1963-5-18 副主任医师
100002 郭医生 女 1950-7-26 副主任医师
100003 刘医生 男 1973-9-18 医师
修改 编号为100002的医生职称为‘主任医师’
删除 编号为100003的医生信息 (8分)
3. 写出创建:医疗表视图(医生编号,姓名,病人姓名,病历)的代码;(4分)
4. 写出所有病人编号、姓名、病历、以及病人所对应的医生编号的查询语句;(4分)
5. 写出创建: 输出某医生(根据医生编号即可)看病人数存储过程以及执行过程(要求输入医生姓名的参数,输出病人数)(6分)。
6. 写出查询1970年以前出生的医生(4分)。
7. 检索有病人的医生信息。(4分)
8. 创建一个默认,并将其绑定到医生表的成绩职称列上,默认值为“医师”。(4分)
然后再创建表,然后右键——选择生成 sql 代码, 全出来了修改 编号为100002的医生职称为‘主任医师’
update 医生资料表 set 职称 = '主任医师' where 编号 = '100002'这些都是最基本的知识,相信你玩两 天的 sql server 就会搞定的
---建库
create database [医院数据库] on primary
(NAME = N'MH_Test', FILENAME = N'D:\Program Files\医院数据库.mdf')
LOG ON
(NAME = N'MH_Test_log', FILENAME = N'D:\Program Files\医院数据库.ldf')---建表
create table [医生表]
(
[编号] varchar(100) not null,
[姓名] varchar(100) not null,
[性别] varchar(5) not null,
[出生日期] date not null,
[职称] varchar(100) not null,
constraint [PK_医生表_编号] primary key clustered
(
[编号] ASC
)
) on [primary]create table [病人表]
(
[编号] varchar(100) not null,
[姓名] varchar(100) not null,
[性别] varchar(5) not null,
[民族] date not null,
[身份证号] varchar(100) not null,
CONSTRAINT [PK_病人表_编号] PRIMARY KEY CLUSTERED
(
[编号] asc
)
) on [primary]
create table [病历表]
(
ID int identity(1,1) not null,
[病人编号] varchar(100) not null,
[医生编号] varchar(100) not null,
[病历描述] varchar(1000) not null
) --建外键
alter table [病历表] add constraint [FK_病人编号] foreign key ([病人编号]) references [病人表]([编号])
alter table [病历表] add constraint [FK_医生编号] foreign key ([医生编号]) references [医生表]([编号])
---建库
create database [医院数据库] on primary
(NAME = N'MH_Test', FILENAME = N'D:\Program Files\医院数据库.mdf')
LOG ON
(NAME = N'MH_Test_log', FILENAME = N'D:\Program Files\医院数据库.ldf')---建表
create table [医生表]
(
[编号] varchar(100) not null,
[姓名] varchar(100) not null,
[性别] varchar(5) not null,
[出生日期] date not null,
[职称] varchar(100) not null,
constraint [PK_医生表_编号] primary key clustered
(
[编号] ASC
)
) on [primary]create table [病人表]
(
[编号] varchar(100) not null,
[姓名] varchar(100) not null,
[性别] varchar(5) not null,
[民族] date not null,
[身份证号] varchar(100) not null,
CONSTRAINT [PK_病人表_编号] PRIMARY KEY CLUSTERED
(
[编号] asc
)
) on [primary]
create table [病历表]
(
ID int identity(1,1) not null,
[病人编号] varchar(100) not null,
[医生编号] varchar(100) not null,
[病历描述] varchar(1000) not null
) --建外键
alter table [病历表] add constraint [FK_病人编号] foreign key ([病人编号]) references [病人表]([编号])
alter table [病历表] add constraint [FK_医生编号] foreign key ([医生编号]) references [医生表]([编号])--第二题
insert into [医生表] ---插入医生信息
select '100001','杜医生','男','1963-5-18','副主任医师' union all
select '100002','郭医生','女','1950-7-26','副主任医师' union all
select '100003','刘医生','男','1973-9-18','医师'update [医生表] set [职称]='主任医师' where [编号]='100002' --修改 编号为100002的医生职称为‘主任医师’
delete [医生表] where [编号]='100003' --删除 编号为100003的医生信息--第三题
create view [医疗表]
as
select
[医生表].[编号] as [医生编号],
[医生表].[性别] as [医生姓名],
[病人表].[姓名] as [病人姓名],
[病历表].[病历描述] as [病历]
from
[医生表] inner join [病历表] on [医生表].[编号]=[病历表].[医生编号]
inner join [病人表] on [病人表].[编号]=[病历表].[病人编号]
--第四题
select
[病人表].[编号] as [病人编号],
[病人表].[姓名] as [病人姓名],
[病历表].[病历描述] as [病历],
[医生表].[编号] as [医生编号]
from
[病人表] inner join [病历表] on [病人表].[编号]=[病历表].[病人编号]
inner join [医生表] on [医生表].[编号]=[病历表].医生编号
--第五题
create proc sp_proc_get_detail
@name varchar(100),
@cnt int
as
set nocount on
begin
select
@cnt=COUNT(distinct [病历表].[病人编号])
from [医生表] inner join [病历表] on [医生表].编号=[病历表].医生编号
where [医生表].姓名=@name
select @cnt
return
end
--第六题
select * from [医生表] where [出生日期]<'1970-01-01'--第七题--感觉这一题逻辑不严谨(有病历就算有病人?还是必须要对应到病人表)
select [医生表].* from [医生表] inner join [病历表] on [医生表].编号=[病历表].医生编号--第八题
没看懂
select * 医生表 where 出生日期< '1970-01-01'
编号 姓名 性别 出生日期 职称
100001 杜医生 男 1963-5-18 副主任医师
100002 郭医生 女 1950-7-26 副主任医师
100003 刘医生 男 1973-9-18 医师
insert into 医生表(编号,姓名,性别,出生日期,职称) values ('100001','杜医生','男','1963-5-18','副主任医师')
insert into 医生表(编号,姓名,性别,出生日期,职称) values ('100002','郭医生','女','1950-7-26','副主任医师')
insert into 医生表(编号,姓名,性别,出生日期,职称) values ('100003','刘医生','男','1973-9-18','医师')
修改 编号为100002的医生职称为‘主任医师’update 医生表 set 职称 = '主任医师' where 编号='100002'
删除 编号为100003的医生信息 delete from 医生表 where 编号='100003'
有错???你的SQL 版本是多少?
我的是2008 R2 ,上面的代码写完之后,我都执行过的,没报错滴呀如果你的SQL 版本低于2008 ,那就不能用date ,date类型是2008以后加入的,如果是2008以前的版本那就直接用varchar(10)好了
没看懂补充六楼
-- 创建一个默认,并将其绑定到医生表的成绩职称列上,默认值为“医师”。(4分)
create default doc as '医师'sp_bindefault 'doc','医生表.成绩职称'