五、设计题(共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分)

解决方案 »

  1.   

    安装个 sql server 2000或其它版本
    然后再创建表,然后右键——选择生成 sql 代码, 全出来了修改  编号为100002的医生职称为‘主任医师’
    update 医生资料表  set 职称 = '主任医师' where 编号 = '100002'这些都是最基本的知识,相信你玩两 天的 sql server  就会搞定的
      

  2.   

    第一题做完,剩下的等等:
    ---建库
    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 [医生表]([编号])
      

  3.   

    都给你了,你看看试试,应该可以的,我都已经执行过了的。祝你不挂科哈哈--第一题
    ---建库
    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 [医生表].编号=[病历表].医生编号--第八题
    没看懂
      

  4.   

    第一题病人表那里民族不能用date     大神,要细心噢
      

  5.   

    6. 写出查询1970年以前出生的医生(4分)。
    select * 医生表 where 出生日期< '1970-01-01'
      

  6.   

    2.将下列医生信息添加到医生表的代码
     编号   姓名 性别 出生日期 职称
    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'
      

  7.   


    有错???你的SQL 版本是多少?
    我的是2008 R2 ,上面的代码写完之后,我都执行过的,没报错滴呀如果你的SQL 版本低于2008 ,那就不能用date ,date类型是2008以后加入的,如果是2008以前的版本那就直接用varchar(10)好了
      

  8.   

    DATE改成DATETIME就行了
      

  9.   

    --第八题
    没看懂补充六楼
    -- 创建一个默认,并将其绑定到医生表的成绩职称列上,默认值为“医师”。(4分)
    create default doc as '医师'sp_bindefault 'doc','医生表.成绩职称'