当前位置: 首页 > news >正文

SQL server 多表查询与视图的使用

use Saijie   
create table goods1(
   商品编号  int primary key identity(1,1),--主键,自增
   商品名称  varchar(20) unique,  --唯一键
   商品价格  decimal(5,1)  check(商品价格>0),


);
drop table member 
create table member(
   会员编号   int primary key identity(100,1),
   会员姓名  varchar(20),
   性别      varchar(4) default('女')
);
drop table orders 
create table orders(
    订单编号 int primary key identity(0000000,1),
会员编号  int foreign key references  member(会员编号),
商品编号  int  foreign  key references  goods1(商品编号),
    下单时间  smalldatetime,
数量  int
);


insert into goods1 values('棒棒糖',0.5);
insert into goods1 values('奶茶',1.0);
insert into goods1 values('可口可乐',3.5);
insert into goods1 values('雪碧',3.0);
insert into goods1 values('怡宝',2.0);
insert into goods1 values('铅笔',1.0);
insert into goods1 values('酸奶',3.5);
insert into goods1 values('啤酒',3.0);
insert into goods1 values('纸巾(袋装)',1.0);
insert into goods1 values('纸巾(卷)',3.0);
insert into goods1 values('信纸',2.0);
insert into goods1 values('水性笔',3.5);
insert into goods1 values('橡皮擦',1.0);


select * from goods1


insert into member values('文雅','女');
insert into member  values('李双龙','男');
insert into member values('贺志玉','女');
insert into member  values('黄成','男');
insert into member values('蔡文鹏','男');
insert into member  values('王艳芳','女');


select * from member 


insert into orders values (100,1,getdate(),12);
insert into orders values (102,1,getdate()-1,1);
insert into orders values (100,2,getdate()+1,12);
insert into orders values (102,4,getdate()-1,1);
insert into orders values (100,7,getdate(),12);
insert into orders values (101,10,getdate(),4);
insert into orders values (103,9,getdate(),9);
insert into orders values (105,6,getdate()-1,17);


select * from orders ;
/*创建视图*/
 create view  test2 as 
SELECT  dbo.goods1.*, dbo.goods1.商品编号, dbo.goods1.商品名称, dbo.goods1.商品价格, dbo.member.会员编号, dbo.member.会员姓名, dbo.orders.订单编号, 
               dbo.orders.下单时间
FROM     dbo.goods1 INNER JOIN
               dbo.orders ON dbo.goods1.商品编号 = dbo.orders.商品编号 INNER JOIN
               dbo.member ON dbo.orders.会员编号 = dbo.member.会员编号


  select * from test2;


--查询最近三天销售额占前两位的商品编号,名称及销售额


select  top 2 商品编号,商品名称,sum(商品价格*数量) as 销售额 from test2 
group by 商品编号, 商品名称 order by 销售额 desc;






--多表查询
--1. 交叉查询:查询原理:将A表,B表中d数据相互交叉组合,一共有M*N种结合结果。
--1.1 隐式交叉查询:
select goods1.商品编号, 商品名称, 商品价格, 数量,下单时间 from goods1,orders where 会员编号=100;


  --1.2 显式交叉查询
select  goods1.商品编号,商品名称,商品价格,数量,下单时间 from goods1 cross join orders;


--2. 内链接查询:查询原理:将A表,B表中的数据根据某种条件链接起来,
--将符合条件的数据查询显示
--2.1 隐式内链接查询
select 会员编号 ,goods1.商品编号,商品名称,商品价格,数量,下单时间 from goods1,orders where goods1.商品编号=orders.商品编号
 and 会员编号=101;
  --2.2 显式内链接查询
select goods1.商品编号, 商品名称,商品价格,数量,下单时间 from goods1 inner join orders on goods1.商品编号=orders.商品编号
where 会员编号=102;



--左链接查询:查询原理:以左边的表为主,右边的表为辅,将左表和右边中的数据根据某种条件链接起来,
--将符合条件的数据查询显示。
select goods1.商品编号, 商品名称,商品价格,数量,下单时间 from goods1 left join orders on goods1.商品编号=orders.商品编号 where 会员编号=103;


--查询销售额占前两位的商品编号,名称及销售额
select top 2 goods1.商品编号,商品名称,sum(商品价格*数量) as 消费总额 from goods1 inner join orders on goods1.商品编号=orders.商品编号
  group  by goods1.商品编号 ,商品名称  order by 消费总额 desc;
  
  --查询会员单次消费的总额
  select 会员编号,sum(商品价格*数量) as 消费总额 from goods1 inner join orders on goods1.商品编号=orders.商品编号 
  group  by 商品名称 , 会员编号 ;


  --查询会员消费的总额
  select 会员编号,sum(商品价格*数量) as 消费总额 from goods1 inner join orders on goods1.商品编号=orders.商品编号 
  group  by  会员编号 ;


  --查询最近两天天销售额占前两位的商品编号,名称及销售额
select top 2 goods1.商品编号,商品名称,sum(商品价格*数量) as 消费总额 from goods1 inner join orders 
on goods1.商品编号=orders.商品编号 where 下单时间 between GETDATE()-2 and GETDATE()
group by goods1.商品编号,商品名称 order by 消费总额 desc;




--查询如下信息:
/*   1.查询某人的消费总额   */
select sum(商品价格*数量) as 消费总额 from goods1 left join orders
 on goods1.商品编号=orders.商品编号 where 会员编号=101;


/* 2.查询每个人的消费总额,按照会员编号排序   */
select 会员编号,sum(商品价格*数量) as 消费总额 from goods1 inner join orders on goods1.商品编号=orders.商品编号 
  group  by  会员编号 ;


 /* 3.查询某个时间段的消费总额  */
 select  会员编号,sum(商品价格*数量) as 消费总额 from goods1 inner join orders 
on goods1.商品编号=orders.商品编号 where 下单时间 between GETDATE()-2 and GETDATE()
group by 会员编号 order by 消费总额 desc;




/* 4.查询某人购买次数最多的商品名称  */
select  商品名称, max(数量) as 数量 from goods1 left join orders  
 on goods1.商品编号=orders.商品编号    where 会员编号=101 group by 商品名称;


/* 5.查询某个商品的销售额  */
select  商品名称,sum(商品价格*数量) as 销售额 from goods1 left join orders  
 on goods1.商品编号=orders.商品编号    where goods1.商品编号=10 group by 商品名称;


/*  6.查询每个商品的销售额,按照商品销售额排序,商品编号排序  */
select  goods1.商品编号 ,商品名称, sum(商品价格*数量) as 销售额 from goods1 left join orders  
 on goods1.商品编号=orders.商品编号   group by goods1.商品编号,  商品名称 order by 销售额 desc ,goods1.商品编号 asc ;

相关文章:

  • 浅谈JS中this
  • eclipse如何导入jar包
  • 你所忽略的HashMap
  • 随想
  • Java中的Base64(源码)
  • Java中Base64(实例)
  • Java数据类型及运算符
  • SQL server基本使用示例一
  • SQL Server基本使用示例三
  • Oracle12c的安装
  • 编程一
  • Java链接数据库
  • 编程二
  • 设计一个一百亿的计算器
  • Java技术体系和学习纲要
  • [PHP内核探索]PHP中的哈希表
  • 【个人向】《HTTP图解》阅后小结
  • CSS实用技巧干货
  • Docker下部署自己的LNMP工作环境
  • ESLint简单操作
  • js如何打印object对象
  • Laravel 菜鸟晋级之路
  • Rancher如何对接Ceph-RBD块存储
  • vue 个人积累(使用工具,组件)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • win10下安装mysql5.7
  • windows下使用nginx调试简介
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 猴子数据域名防封接口降低小说被封的风险
  • 检测对象或数组
  • 前端自动化解决方案
  • 如何使用 JavaScript 解析 URL
  • 数据可视化之 Sankey 桑基图的实现
  • 听说你叫Java(二)–Servlet请求
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 整理一些计算机基础知识!
  • #stm32驱动外设模块总结w5500模块
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (NSDate) 时间 (time )比较
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二十四)Flask之flask-session组件
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CLR基本术语
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net core 控制台应用程序读取配置文件app.config
  • .NET框架