zoukankan      html  css  js  c++  java
  • 数据库小结(二)

    运行以下代码:

    drop table OrderProduts2014;

    drop table OrderProduts2015;

    drop table Produts;

    drop table MasterUser;

    create table Produts ( id int identity(1,1) primary key, ProdutName nvarchar(100), UnitPrice money, ) ;

    insert into Produts select N'安钹维',120

    union all select N'波利维',90

    union all select N'金维他',50

    union all select N'令特适',46

    union all select N'易善复',200;

    create table MasterUser ( id int identity(1,1) primary key, UserName nvarchar(100), Sex bit, Hospital nvarchar(100) );

    insert into MasterUser select N'张山',1,N'北京医大'

    union all select N'李娜',0,N'武汉医大'

    union all select N'刘翔',1,N'上海医大'

    union all select N'韩德军',1,N'大连医大';

    create table OrderProduts2014 ( id int identity(1,1) primary key, UserID int, ProductId int, Amout int, OrderDate datetime );

    insert into OrderProduts2014 select 1,2,5,'2014-05-06'

    union all select 2,3,4,'2014-06-06'

    union all select 3,4,10,'2015-06-06';

    create table OrderProduts2015 ( id int identity(1,1) primary key, UserID int, ProductId int, Amout int, OrderDate datetime );

    insert into OrderProduts2015 select 2,3,6,'2015-05-06'

    union all select 3,3,7,'2015-06-06'

    union all select 4,5,8,'2015-10-23' ;

    --查询2014出年和2015年都购买了产品的医生,并且最大一笔消费超过300的医生所在的医院

    1、select max(o14.amout*p.UnitPrice),max(o15.amout*p.UnitPrice),

      mu.username, mu.hospital from MasterUser mu

       inner join OrderProduts2014 o14 on mu.id = o14.userid

      inner join OrderProduts2015 o15 on mu.id = o15.userid

      inner join Produts p on o14.ProductId= p.id 

      inner join Produts p1 on o15.ProductId= p1.id

      where o14.userid =o15.userid  

      group by mu.username,mu.hospital,o14.OrderDate,o15.OrderDate

      having max(o14.amout*p.UnitPrice)>300 or max(o15.amout*p.UnitPrice)>300

      注:group by与having的使用方式

        inner join与left join的使用:在大量重复或为空的数据中,取不为空的数据应用inner join

    2、 select distinct mu.username, mu.hospital from MasterUser mu

       inner join OrderProduts2014 o14 on mu.id = o14.userid

      inner join OrderProduts2015 o15 on mu.id = o15.userid

      inner join Produts p on o14.ProductId= p.id

      inner join Produts p1 on o15.ProductId= p1.id

      where o14.userid =o15.userid 

      and( (o14.amout*p.UnitPrice)>300 or (o15.amout*p.UnitPrice)>300 )

      注:当使用join时,会出现大量的重复数据,若此时去重复,只能使用distinct

    3、select hospital from MasterUser where id in(

      select userid from OrderProduts2014 o14

      inner join Produts p

      on o14.ProductId= p.id

      where o14.amout*p.UnitPrice>300

      intersect

      select userid from OrderProduts2015 o15

      inner join Produts p1

      on o15.ProductId= p1.id

      where o15.amout*p1.UnitPrice>300)

      注:此时按题目要求,不输出重复的值可使用intersect函数,取其交集再进行输出

    4、注意:当14表与15表和Products表进行连接时,注意条件的连接,当分别相关时当join两次Products表

         若只取一次,则又进行了14与15表的关联!

         inner join Produts p on o14.ProductId= p.id and o15.ProductId= p.id

      cf  :

        inner join Produts p on o14.ProductId= p.id   inner join Produts p1 on o15.ProductId= p1.id

  • 相关阅读:
    近期工作中应用Python的一些经验总结
    自测是保证开发提交代码质量的最基本方法和最低要求
    Python,如何将元组中的元素作为参数传入函数
    与医院RIS进行数据对接时的方式
    HIS-门急诊模块之系统集成工作摘要
    AngularJS基础知识
    MySQL服务启动报错
    Pre-architecture读书笔记
    第八周进度总结
    Python学习(七)文件操作
  • 原文地址:https://www.cnblogs.com/Yida-Tingting/p/4443420.html
Copyright © 2011-2022 走看看