哈工大数据库系统 实验:练习并熟练掌握交互式 SQL 语言
- 实验目的:基于给定的 OrderDB 数据库, 练习并熟练掌握交互式 SQL 语言
实验环境:sql sever 2008
- 附:OrderDB 表结构及表间的关系
- /* 1 查询职工工资按高低排序的前20%的职工编号、职工姓名和工资。 ok */
- select top 20 percent employeeNo , employeeName , salary
- from Employee
- order by salary DESC
- /* 2 查询 业务科 或 财务科 的 职工姓名、性别和所在部门 ,仅显示前面5位职工。 ok */
- select top 5 employeeName , gender , department from Employee
- where department = '业务科' or department = '财务科'
- /* 3 查询1973年9月份出生且为职员的员工编号、姓名、出生日期以及所在部门,并按出生日期的降序输出。ok */
- select employeeNo , employeeName , birthday , department from Employee
- where year(birthday) = 1973 and month(birthday) = 9 and headShip = '职员'
- order by birthday desc
- /* 4 查询所有姓张的职工姓名、部门和性别(要求性别以中文显示)。ok */
- select employeeName , department ,
- case when gender = 'M' then '男' when gender = 'F' then '女'
- end gender from Employee
- where employeeName like '张%'
- /* 5 查询姓张且全名为两个字的职工姓名。ok */
- select employeeName from Employee
- where employeeName like '张_'
- /* 6 查询不同性别员工的人数 ok */
- select
- case when gender = 'M' then '男' when gender = 'F' then '女'
- end gender, count(gender) as '數目' from Employee
- group by gender
- /* 7 查询全体职工的姓名、年龄、所属部门,并且用汉语显示表头信息。 ok */
- select employeeName 姓名 ,datediff(year,Birthday,getdate()) 年龄, department 所属部门
- from Employee
- /* 8 查询工资在3000以下,3000至5000,以及5000以上的员工人数 ok */
- select
- (
- case when salary<3000 then '3000以下'
- when salary>=3000 and salary<=5000 then '3000至5000'
- when salary>5000 then '5000以上'
- end
- ) 工资 , count(*) as 员工人数
- from Employee
- group by
- case when salary<3000 then '3000以下'
- when salary>=3000 and salary<=5000 then '3000至5000'
- when salary>5000 then '5000以上'
- end
- /* 9 查询薪水在2000到3000之间的职工编号、姓名、所在部门以及薪水。ok */
- /* 职工编号 姓名 所在部门 薪水 */
- select employeeNo , employeeName , department , salary from Employee
- where salary between 2000 and 3000
- /* 10 查询1991年被雇佣的职工号、姓名、性别、电话号码、出生日期以及年龄
- (如果电话号码为空,显示“未知”,出生日期按yyyy-mm-dd显示)。ok */
- /* 职工号 姓名 性别 电话号码 出生日期 年龄 */
- select employeeNo , employeeName , gender , isnull(telephone,'未知') as 'telephone' ,
- convert(char(10),birthday,120) as 出生日期 ,
- datediff(year,Birthday,getdate()) as 年龄 from Employee
- where year(hireDate) = 1991
- /* 11 查询每个客户的订单编号、客户名称、订单金额。ok */
- select o.orderNo , c.customerName , o.orderSum from OrderMaster o , Customer c
- where c.customerNo = o.customerNo
- /* 12 查询住址在上海的员工所做的订单,输出员工编号、姓名、住址、订单编号、客户编号
- 和订单日期,并按客户编号排序输出。ok */
- /* 员工编号 姓名 住址 订单编号 客户编号 订单日期 */
- select e.employeeNo , e.employeeName , e.address , o.orderNo , o.customerNo , o.orderDate
- from Employee e , OrderMaster o
- where e.address like '上海%' and e.employeeNo = o.employeeNo
- order by o.customerNo
- /* 13 查找与“吴浮萍”不在同一个部门工作的员工姓名、所属部门、性别和出生日期,并按所属部门排序输出。ok */
- /* 员工姓名 所属部门 性别 出生日期 */
- select employeeName , department , gender , birthday from Employee
- where department not in(
- select department from Employee
- where employeeName = '吴浮萍'
- )
- order by department
- /* 14 查找订购了“32M DRAM”的商品的客户编号、客户名称、订单编号、订货数量和订货金额,
- 并按客户编号排序输出 ok */
- /* 客户编号 客户名称 订单编号 订货数量 订货金额 */
- select om.customerNo , c.customerName , od.orderNo , od.quantity , od.price*od.quantity 订货金额
- from OrderDetail od , OrderMaster om , Customer c , Product p
- where om.customerNo = c.customerNo and om.orderNo = od.orderNo and od.productNo = p.productNo
- and p.productName = '32M DRAM'
- order by om.customerNo
- /* 15 查询销售总量大于4的商品编号、商品名称以及销售数量。 ok */
- /* 商品编号 商品名称 销售数量 */
- select P.productNo , P.productName , X.sales as '销售数量' from Product P , (
- select Y.productNo , Y.sales from(
- select OD.productNo , sum(OD.quantity) as sales from OrderDetail OD
- group by OD.productNo
- )Y
- where Y.sales > 4
- )X
- where X.productNo = P.productNo
- /* 16 查询员工“张小娟”所做的 订单编号,客户名称,订单总金额以及发票号。 ok */
- /* 订单编号 客户名称 订单总金额 发票号 */
- select om.orderNo , c.customerName , om.orderSum , om.invoiceNo
- from OrderMaster om , Customer c , Employee e
- where om.employeeNo = e.employeeNo and c.customerNo = om.customerNo and e.employeeName = '张小娟'
- /* 17 查询没有订购商品的且在北京地区的客户编号、客户名称和邮政编码,并按邮政编码降序排序。ok */
- /* 客户编号 客户名称 邮政编码 */
- select customerNo , customerName , zip from Customer
- where address = '北京市' and customerNo not in(
- select customerNo from OrderMaster
- )
- order by zip DESC
- /* 18 查询订购了“32M DRAM”商品的订单编号、订货数量和订货单价。 ok */
- /* 订单编号 订货数量 订货单价 */
- select od.orderNo , od.quantity , od.price from OrderDetail od , Product p
- where p.productNo = od.productNo and p.productName = '32M DRAM'
- /* 19 查询与员工编号E2008005在同一部门的员工编号、姓名、性别、所属部门。ok */
- /* 员工编号 姓名 性别 所属部门 */
- select employeeNo , employeeName , gender , department from Employee
- where employeeNo <> 'E2008005' and department in(
- select department from Employee where employeeNo = 'E2008005'
- )
- /* 20 查询既订购了P20050001又订购了P20050003商品的客户编号及订单号。 */
- /* 按照不同的理解,这条语句应该有两种答案 */
- /* 客户编号 订单号 */ /* 同一个客户在同一份订单中购买了两份商品 */
- select OM.customerNo , OD.orderNo from OrderDetail OD , OrderMaster OM
- where OM.orderNo = OD.orderNo and OD.productNo = 'P20050001'
- and OM.customerNo in(
- select OM_1.customerNo from OrderDetail OD_1 , OrderMaster OM_1
- where OD_1.orderNo = OM_1.orderNo and OD_1.orderNo = OD.orderNo
- and OD_1.productNo = 'P20050003'
- )
- /* 客户编号 订单号 */ /* 同一个客户允许在不同订单中购买了该两件商品 */
- select OM_1.customerNo , OM_1.orderNo
- from OrderMaster OM_1 , OrderDetail OD_1 , OrderMaster OM_2 , OrderDetail OD_2
- where OD_1.orderNo = OM_1.orderNo and OD_2.orderNo = OM_2.orderNo and OM_1.customerNo = OM_2.customerNo
- and OD_1.productNo = 'P20050001' and OD_2.productNo = 'P20050003'
- union
- select OM_1.customerNo , OM_1.orderNo
- from OrderMaster OM_1 , OrderDetail OD_1 , OrderMaster OM_2 , OrderDetail OD_2
- where OD_1.orderNo = OM_1.orderNo and OD_2.orderNo = OM_2.orderNo and OM_1.customerNo = OM_2.customerNo
- and OD_1.productNo = 'P20050003' and OD_2.productNo = 'P20050001'
- /* 21 查询没有订购“52倍速光驱”或“17寸显示器”的客户编号、客户名称。 ok */
- /* 客户编号 客户名称*/
- select customerNo , customerName from Customer
- where customerNo not in(
- select OM.customerNo from OrderMaster OM
- where OM.orderNo in(
- select OD.orderNo from OrderDetail OD , Product P
- where P.productNo = OD.productNo and (P.productName = '52倍速光驱' or P.productName = '17寸显示器' )
- )
- )
- /* 22 查询订单金额最高的订单编号、客户姓名、销售员姓名和相应的订单金额。ok */
- /* 订单编号 客户姓名 销售员姓名 订单金额 */
- select om.orderNo , c.customerName , e.employeeName , om.orderSum
- from OrderMaster om , Customer c , Employee e
- where c.customerNo = om.customerNo and om.employeeNo = e.employeeNo
- and om.orderSum >= all(
- select om1.orderSum from OrderMaster om1
- )
- /* 23 查询商品“52倍速光驱”的订购数量、订购平均价和订购总金额。ok */
- /* 订购数量 订购平均价 订购总金额 */
- select sum(OD.quantity) as '订购数量', avg(OD.price) as '订购平均价', sum(OM.orderSum) as '订购总金额'
- from OrderMaster OM , OrderDetail OD , Product P
- where P.productNo = OD.productNo and OD.orderNo = OM.orderNo and P.productName = '52倍速光驱'
- group by P.productNo
- /* 24 查询所有业务员的订单数量(给出 业务员编号,姓名,及订单数量)。ok */
- /* 业务员编号 姓名 订单数量*/
- select EM.employeeNo 业务员编号 , EM.employeeName 姓名 ,
- isnull((
- select count(*) from OrderMaster OM
- where OM.employeeNo = EM.employeeNo
- group by OM.employeeNo
- ),0) 订单数量
- from Employee EM
- where EM.department = '业务科'
- /* 25 统计在业务科工作且在1973年出生的员工人数和平均工资。 ok */
- /* 员工人数 平均工资 */
- select count(*) as '员工人数' , avg(salary) as '平均工资' from Employee
- where year(birthday) = 1973 and department = '业务科'
- /* 26 统计每种商品的销售数量和销售总金额。(给出商品编号及名称,并按金额的升序排序)。ok */
- /* 商品编号 名称 销售数量 销售总金额 */
- select P.productNo 商品编号 , P.productName 名称,
- isnull ( (
- select sum(OD_1.quantity) from OrderDetail OD_1
- where OD_1.productNo = P.productNo
- ) , 0) 销售数量 ,
- isnull ( (
- select sum(OD_1.quantity* OD_1.price) from OrderDetail OD_1
- where OD_1.productNo = P.productNo
- ) , 0) 销售总金额
- from Product P
- order by 销售总金额
- /* 27 统计每个客户的订单数、订货总额和平均订货金额。 */
- select C.customerNo , C.customerName ,
- count(OM.orderNo) 订单数 ,
- isnull(sum(OM.orderSum),0) 订货总额 ,
- isnull(avg(OM.orderSum),0) 平均订货金额
- from Customer C left join OrderMaster OM on C.customerNo = OM.customerNo
- group by C.customerNo , C.customerName
- /* 28 查询每个客户订购的 商品所属类别、同类别商品数量及对应的订货金额。
- (结果显示客户名称、商品所属类别、商品数量及订货金额,并按客户编号升序和按订货金额的降序排序输出) */
- /* 客户名称 商品所属类别 同类别商品数量 订货金额 */
- select C.customerName , X.productClass , X.num 同类别商品数量 , X.tot 订货金额
- from Customer C , (
- select Y.productClass , Y.customerNo , Y.num , Y.tot from (
- select P.productClass , OM.customerNo , sum(OD.quantity) num , sum(OD.quantity*OD.price) tot
- from OrderDetail OD , OrderMaster OM , Product P
- where OD.orderNo = OM.orderNo and P.productNo = OD.productNo
- group by P.productClass , OM.customerNo
- )Y
- )X
- where X.customerNo = C.customerNo
- /* 29 查找至少有2次销售的业务员名单和销售日期。ok */
- /* 业务员名单 销售日期 */
- select EM.employeeNo , EM.employeeName , OM.orderDate
- from Employee EM , OrderMaster OM , (
- select employeeNo from OrderMaster
- group by employeeNo
- having count(employeeNo) >= 2
- )X
- where EM.employeeNo = OM.employeeNo and EM.employeeNo = X.employeeNo
- /* 30 查找销售总额少于5000元的销售员编号、姓名和销售额。ok */
- /* 销售员编号 姓名 销售额*/
- select EM.employeeNo , EM.employeeName , isnull( sum(OM.orderSum) , 0 ) 销售额
- from Employee EM left join OrderMaster OM on EM.employeeNo = OM.employeeNo
- where EM.department = '业务科'
- group by EM.employeeNo , EM.employeeName
- having isnull( sum(OM.orderSum),0 )<5000
- /* 31 计算每一商品每月的销售总金额。(给出商品编号、商品名称以及销售总额,并将结果首先按销售月份升序
- 然后按总金额降序排序输出) */
- /* 商品编号 商品名称 月份 销售总额 */
- select P.productNo ,
- P.productName ,
- isnull(month(OM.orderDate),0) 月份 ,
- isnull( sum(OD.price*OD.quantity) , 0 ) 销售总额
- from Product P left join OrderDetail OD on P.productNo = OD.productNo
- left join OrderMaster OM ON OM.orderNo = OD.orderNo
- group by P.productNo , P.productName , isnull( month(OM.orderDate) , 0)
- order by isnull( month(OM.orderDate) , 0) , isnull( sum(OD.price*OD.quantity) , 0 ) desc
- /* 32 查询没有订购“键盘”商品的客户编号及名称(要求使用存在量词not exists)。ok */
- /* 客户编号 名称*/
- select c.customerNo , c.customerName from Customer c
- where not exists(
- select * from OrderDetail OD , OrderMaster OM , Product P
- where OD.productNo = P.productNo and OD.orderNo = OM.orderNo and P.productName = '键盘'
- and c.customerNo = OM.customerNo
- )
- /* 33 查询没有订购过任何商品的客户编号和客户名称(要求使用存在量词not exists)。ok */
- /* 客户编号 客户名称 */
- select c0.customerNo , c0.customerName from Customer c0
- where not exists(
- select * from Customer c , OrderMaster om
- where om.customerNo = c.customerNo and c.customerNo = c0.customerNo
- )
哈工大数据库系统 实验:练习并熟练掌握交互式 SQL 语言的更多相关文章
- 练习并熟练掌握交互式 SQL 语言
哈工大数据库系统 实验:练习并熟练掌握交互式 SQL 语言 实验目的:基于给定的 OrderDB 数据库, 练习并熟练掌握交互式 SQL 语言实验环境:sql sever 2008 附:Order ...
- 数据库原理实验指导(三)使用SQL语言进行简单查询【转载csdn】
--1.查询全体学生的学号和姓名select sno,sname from student --2.查询全体学生的详细记录select * from student --3.查询软件学院的学生姓名,年 ...
- 数据库系统学习(九)-嵌入式SQL语言之基本技巧
第九讲 嵌入式SQL语言之基本技巧 901 什么是嵌入式SQL语言 交互式SQL语言的局限性 嵌入式SQL语言 交互式和嵌入式语言的对比 高级语言中使用嵌入式语言需要解决的问题 902 程序与数据库连 ...
- SQL 语言 - 数据库系统原理
SQL 发展历程 从 1970 年美国 IBM 研究中心的 E.F.Codd 发表论文到 1974 年 Boyce 和 Chamberlin 把 SQUARE 语言改为 SEQUEL 语言,到现在的 ...
- 研究实验1_搭建一个精简的C语言开发环境(包含部分经典的前言)
综合研究: 在这部分内容中,将启示我们如何进行独立研究和深度思考(一定要注意这一点,相应的调整自己的学习思想).同时使我们: (1)认识到汇编语言对于深入理解其他领域知识的 ...
- Spark GraphX宝刀出鞘,图文并茂研习图计算秘笈与熟练的掌握Scala语言【大数据Spark实战高手之路】
Spark GraphX宝刀出鞘,图文并茂研习图计算秘笈 大数据的概念与应用,正随着智能手机.平板电脑的快速流行而日渐普及,大数据中图的并行化处理一直是一个非常热门的话题.图计算正在被广泛地应用于社交 ...
- 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\
1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...
- IDL(Interactive Data Language——交互式数据语言)
Interactive Data Language——交互式数据语言 目前,图像处理常用的ENVI就是用IDL开发的经典软件 广泛支持的平台: Microsoft Windows Open VMS S ...
- 数据库系统学习(六)-SQL语言基本操作
第六讲 SQL语言概述 基本命名操作 关系代数是集合的思想 关系演算是逻辑的思想(数学公式) SQL-86,SQL-89,SQL-92,SQL-99,SQL-2003,2008...发展过程标准 SQ ...
随机推荐
- Web开发的发展
领导以前是做C的,没有做过Web开发,就问我,Web技术发展的大致过程,我就是简单的说了开发过程的演化,下来后有自己找些资料补充下,如下所示:(着这是个简单的说明,感兴趣的可以再自己找找资料). 1. ...
- 移动端App混合开发问题 汇总
1.IOS系统,双击页面,页面会向上移动一节,无法滑动复原. //阻止用户双击放大 var agent = navigator.userAgent.toLowerCase(); //检测是否是ios ...
- VMware vCloud与Zend Server实现PHP应用程序自动化交付
在巴塞罗那2013年VMworld大会上,开发商VMware公司和zend公司在云管理市场上大放异彩.两家公司的产品VMware vCloud和Zend Server组合,实现了PHP程序自动化交付. ...
- Floodlight 启动过程分析
1. 在Main中先是载入模块,启动REST服务,而后构建一个实现了IFloodlightProviderService接口的实例(即Controller)并执行: 2. 接下来进入Control ...
- 通过改变viewport 实现网站自适应
var phoneWidth = parseInt(window.screen.width); var phoneScale = phoneWidth/640; var userAgent = nav ...
- WCF连接被意外关闭
WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭 在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于W ...
- NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用
NET框架SOA解决方案(集Windows服务.WinForm形式与IIS形式发布)-分布式应用 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.N ...
- jsonp跨域+ashx
jsonp跨域+ashx(示例) 前言 做B/S项目的时候,我们一般使用jquery+ashx来实现异步的一些操作,比如后台获取一些数据到前台,但是如果ashx文件不在本项目下,引用的是别的域下的文件 ...
- iOS基础 - 单元测试
单元测试(unit testing):对软件中最小可测试单元进行检查和验证.一般面向过程的语言中,基本单元为函数,面向对象的语言中,基本单元通常是类,其实对于一个手机上的app来说基本单元也可以是一个 ...
- NoSql数据库使用
NoSql数据库使用半年后在设计上面的一些心得 NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么 ...