• 数据库小结(二)


    运行以下代码:

    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

  • 相关阅读:
    转 UICollectionView 详解
    springboot配置ssl证书
    服务器ganglia安装(带有登录验证)
    eureka配置说明
    Servlet中获取请求参数问题
    apidoc学习(接口文档定义取代word)
    markdown语法
    JVM分析
    ftp上传或下载文件工具类
    ubuntu命令安装
  • 原文地址:https://www.cnblogs.com/Yida-Tingting/p/4443420.html
Copyright © 2020-2023  润新知