实验五-复杂查询-实验报告

合集下载

复杂查询实验心得

复杂查询实验心得

复杂查询实验心得复杂查询实验心得在数据库的学习过程中,查询是非常重要的一个环节。

而随着数据量的增加和业务的复杂性,简单的查询已经不能满足我们的需求了。

因此,在本次实验中,我们学习了如何进行复杂查询。

首先,我们需要了解什么是复杂查询。

简单来说,复杂查询就是在多个表之间进行联合查询,并且使用各种条件和函数进行筛选和计算。

这种查询方法可以帮助我们更加准确地获取需要的数据,并且可以提高我们的工作效率。

在实验中,我们使用了MySQL数据库,并且学习了一些基本的SQL 语句。

下面是我对于每个实验题目的思路和解决方法:1. 查询课程编号为“01”的课程比“02”课程成绩高的所有学生的学号、姓名、课程编号、成绩。

首先,我们需要从成绩表中找到所有选修了“01”和“02”两门课程的学生信息。

然后,通过比较两门课程成绩来确定哪些学生选修了“01”课程并且成绩更高。

最后,将符合条件的学生信息输出。

SELECT s.id, , sc.course_id, sc.scoreFROM student s, score scWHERE s.id = sc.student_id AND sc.course_id IN ('01','02') AND sc.course_id = '01' AND sc.score > (SELECT score FROM score WHERE student_id = s.id AND course_id = '02');2. 查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩。

这道题目比较简单,只需要通过AVG函数计算每个学生的平均成绩,并且筛选出平均成绩大于等于85的学生信息即可。

SELECT s.id, , AVG(sc.score) AS avg_scoreFROM student s, score scWHERE s.id = sc.student_idGROUP BY s.id, HAVING AVG(sc.score) >= 85;3. 查询选修了全部课程的学生信息。

数据库实验简单和复杂的单表查询

数据库实验简单和复杂的单表查询

实验三实验名称:简单和复杂的单表查询一、实验目的1.熟练掌握用SELECT语句实现简单的单表查询。

掌握SELECT子句、FROM子句、WHERE子句及ORDER BY 子句的用法。

2. 熟练掌握SELECT查询语句中的Group by 子句、Having子句的用法,以及汇总函数的使用。

二、实验原理1.用SELECT语句实现简单的单表查询。

在SELECT子句中用TOP关键字来限制返回到结果集中的记录数目,用DISTINCT关键字从结果集中去掉重复的记录。

WHERE子句中用关系比较符、[NOT] BETWEEN、[NOT] IN、LIKE、IS [NOT]NULL及逻辑运算符构成查询条件,对结果集中的记录进行筛选。

ORDER BY子句将根据查询结果集中一个或多个字段对查询结果进行排序。

2. 在查询语句中用Group by子句进行分组;用Having子句对分组进行筛选。

使用MAX(),MIN(),COUNT(),SUM(),A VG()等函数在查询结果集中生成汇总值。

三、实验设备安装有SQL SERVER 2005的计算机。

四、实验内容运行查询文件company.sql,生成上机必要的数据,然后完成以下操作。

1、查找所有经理的姓名、职称、薪水。

2、在销售主表sales中查找销售金额大于等于10000元的订单。

3、在员工表employee中查找薪水在4000至8000元之间的员工。

4、在员工表employee中查找住址为上海、北京、天津这三个城市的员工。

5、在客户表customer中查找住址不在上海、北京、天津这三个城市的客户。

6、在员工表employee中查找姓“王”用姓名最后一个字为“7、在客户表customer中查找姓“刘”的客户名称、电话。

8、查找出职称为“经理”或“职员”的女工的信息。

9、查找薪水最高的前三条员工记录。

10、查找订单金额最高的前10%的订单记录。

select top 10 percent*from salesorder by tot_amt desc11、查找员工表中所属部门。

实验五大数据查询——复杂查询

实验五大数据查询——复杂查询

实验五数据查询——复杂查询一、实验目的1.掌握SQLServer查询语句的基本语法2.熟练使用SQL的Select语句对多表进行查询3.熟练掌握并运用SQLServer所提供的函数4.熟练使用SQL语句进行复杂的连接操作二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习相关的查询知识点并完成如下内容。

四、实验内容1.在订单数据库orderDB中,完成如下的查询:(1)用子查询查询员工“张小娟”所做的订单信息。

(2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。

(3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。

(4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。

(5)查询既订购了P2*******商品,又订购了P2*******商品的客户编号,订单编号和订单金额(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。

(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。

(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。

(9)查询订购了“52倍速光驱”商品且订货数量界于2~4之间的订单编号,订货数量和订货金额。

(10)在订单主表中查询每个业务员的订单数量(11)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。

(12)在订单明细表中统计每种商品的销售数量和金额,并按销售金额的升序排序输出。

(13)统计客户号为“C20050001”的客户的订单数,订货总额和平均订货金额(14)统计每个客户的订单数,订货总额和平均订货金额。

(15)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。

(16)查找订购了“32M DRAM”的商品的客户编号,客户名称,订货总数量和订货总金额。

实验5实验报告

实验5实验报告

学号:20164477 姓名:陈家凤实验五SQL语言一、目的与要求1.掌握SQL语言的查询功能;2.掌握SQL语言的数据操作功能;3.掌握对象资源管理器建立查询、索引和视图的方法;二、实验准备1.了解SQL语言的查改增删四大操作的语法;2.了解查询、索引和视图的概念;3.了解各类常用函数的含义。

三、实验内容(一)SQL查询功能使用提供的studentdb数据库文件,先附加到目录树中,再完成下列题目,SQL命令请保存到脚本文件中。

1.基本查询(1)查询所有姓王的学生的姓名、学号和性别Select St_Name,St_Sex,St_IDFrom st_infoWhere St_Name like'王%'图5-1(2)查询全体学生的情况,查询结构按班级降序排列,同一班级再按学号升序,并将结果存入新表new中select*into newfrom st_infoorder by Cl_Name desc,st_ID asc图5-2(3)对S_C_info表中选修了“体育”课的学生的平均成绩生成汇总行和明细行。

(提示:用compute汇总计算)因2014版本已不支持compute关键字,所以选择用其他方式。

Select c_no,scoreFrom s_c_infoWhere c_no=29000011group by c_no,score图5-32.嵌套查询(1)查询其他班级中比“材料科学0601班”的学生年龄都大的学生姓名和年龄select st_name,born_datefrom st_infowhere cl_name!='材料科学0601班'and born_date<(select min(born_date) from st_info where cl_name='材料科学0601班')图5-4(2)用exists查询选修了“9710041”课程的学生姓名select st_namefrom st_infowhere exists(select*from s_c_info where c_no=9710041 andst_id=st_info.st_id)图5-5(3)用in查询找出没有选修“9710041”课程的学生的姓名和所在班级。

实验报告五

实验报告五

实验五多表查询1.找出同一天进入公司工作的员工select distinct a.employeeNo,a.employeeName,a.hireDatefrom Employee a,Employee bwhere a.employeeNo!=b.employeeNo and a.hireDate=b.hireDate2.查找与“陈诗杰”在同一个单位工作的员工姓名,性别,部门和职务select a.employeeName,a.sex,a.department,a.headShipfrom Employee a,Employee bwhere a.department=b.department and b.employeeName='陈诗杰'3.在employee表中查询薪水超过员工平均薪水的员工信息select*from Employee awhere a.salary>(select avg(b.salary)from Employee b)4.查找有销售记录的客户编号,名称和订单总额select a.customerNo,a.customerName,b.orderNo,sum(quantity*price) orderSumfrom Customer a,OrderMaster b,OrderDetail cwhere a.customerNo=b.customerNo and b.orderNo=c.orderNogroup by a.customerNo,a.customerName,b.orderNo5.查询没有订购商品的客户编号和客户名称6.使用子查询查找32M DRAM的销售情况,要求显示相应的销售员的姓名,性别,销售日期,销售数量和经济呢,其中性别用“男”和“女”表示select employeeName,case sexwhen'M'then'男'when'F'then'女'end as sex,b.orderDate,c.quantity 销售数量,c.quantity*c.price 金额from Employee a,OrderMaster b,OrderDetail cwhere a.employeeNo=b.salerNo and b.orderNo=c.orderNo and c.productNo in(select f.productNofrom OrderMaster d,OrderDetail e,Product fwhere d.orderNo=e.orderNo and productName='32M DRAM')7.查询OrderMaster表中订单金额最高的订单号及订单金额select orderNo,sum(quantity*price) orderSumfrom OrderDetailgroup by orderNohaving sum(quantity*price)=(select max(orderSum)from(select orderNo,sum(quantity*price) orderSumfrom OrderDetailgroup by orderNo)b)8.在订单主表中查询订单金额大于“E2005002业务员在2008-1-9这天所接的任一张订单的金额”的所有订单信息。

数据库原理实验报告

数据库原理实验报告

实验一数据库管理系统软件的使用一、实验目的(1)认识几种常见的数据库管理系统,熟悉它们的使用界面;(2)熟练掌握建立数据库和表,向数据库输入数据、修改数据和删除数据的操作。

二、实验内容分别在Access 和SQL SERVER2000 中建立数据库并设计各表,输入多条实际数据,并实现数据的增、删、改操作。

三、实验步骤:分别在ACCESS数据库管理系统和SQL SERVR 2005环境下利用图形操作界面(非SQL语句)实现以下操作:1、创建用于学生管理数据库,数据库名为对表中的记录进行浏览、修改、删除操作。

本信息,课程信息和选课信息。

数据库XSGL包含下列3 个表:(l) student:学生基本信息。

(2)course:课程信息表。

(3)sc:学生选课表。

各表的结构分别如表1、表2和表3 所示。

表1 学生信息表:student表2 课程信息表:course表3 学生选课表:sc提示:在不使用SQL语句创建表的情况下,可通过ACCESS中的关系(菜单—工具—关系)和SQL SERVER 2005中的数据库关系图(数据库节点展开—数据库关系图)实现外键的创建。

外键字段和参照字段之间的数据类型以及长度要保持一致。

2、输入表中的记录分别在student表、course表和sc表中输入如下表中的记录:观察输入时有无提示错误,如果有如何修改,体会参照完整性的作用,弄清楚先输入那些表中记录,为什么?3、对表中的记录进行浏览、修改、删除操作。

实验二SQL语言(一) SQL定义语言目的:会用SQL语言进行基本表的结构的定义、修改、删除,会建立与删除索引;内容:用SQL语言进行基本表结构的定义、修改、删除,索引的建立和删除步骤:1、在SQL SERVER 2005中新建查询,建立到服务器的连接2、用SQL语言CREATE TABLE语句创建实验一中学生表student、课程表course 和选课表sc及其相应约束,具体约束如下:表1 学生信息表:student表2 课程信息表:course表3 学生选课表:sc3、向创建的表中输入数据,测试所创建的完整性约束是否起作用4、用SQL语言ALTER语句修改表结构;1) STUDENT表中增加一个字段入学时间scome,2)删除STUDENT表中sdept字段;3)删除创建的SC表中CNO字段和COURSE表CNO字段之间的外键约束;4)重建3)中删除的约束5、重新定义一个简单表,然后用SQL语言DROP语句删除该表结构;6、用SQL语言CREATE INDEX语句定义表STUDENT的SNAME字段的降序唯一索引;7、用SQL语言DROP语句删除索引;实验三SQL(二) SQL语言进行简单查询目的:掌握简单数据查询操作。

数据库实验报告 复杂数据查询

六、调试和测试结果:
七、教师评语与成绩评定:
4
5
(19)查询所开课程的选修情况,包括没有任何学生选修的课程。 SELECT 学号, 课程名, 分数 FROM 成绩 A RIGHT OUTER JOIN 课程 B ON (A.课程编号=B.课程编号)
(20) 查询研究生与其导师的情况。 SELECT * FROM 研究生 A INNER JOIN 教师 B ON A.导师号= B.教工号 也可以写成等价的 SQL 语句: SELECT * FROM 研究生 A,导师 B WHERE A.导师号= B.教工号
(21)查询教师指导研究生的情况,包括不指导研究生的教师。
3
SELECT * FROM 导师 A LEFT OUTER JOIN 研究生 B ON (A.教工号= B.导师) 三、实验平台: Microsoft SQL Sever 四、设计流程: 1、进入查询分析器,参见进入查询分析器演示。 2、在查询分析器的命令编辑窗口输入 SQL 语句,点击执行键 ►,将执行 SQL 语 句。参见执行 SQL 语句的演示。 3、在调试程序过程中,可以用鼠标选择某些要执行的 SQL 语句,再点击执行键, 执行选择的语句。参见执行 SQL 语句的演示。 4、 注意:在各个表中插入数据的顺序,首先在父表中插入数据,然后在子表中 插入数据。另外,由于表的定义中包含完整性约束的定义,所以,当主码重 复,或者外码不是被参照表的有效值时,系统将拒绝插入的数据。 5、保存调试通过的 SQL 程序。 五、程序清单:
(11)根据学生、课程和成绩表,输出“计算机”课程的成绩单,包括姓名和 分数。 SELECT 姓名,分数 FROM 学生 A JOIN 成绩 B ON(A.学号=B.学号) JOIN 课程 C ON(B.课程编号=C.课程编号) WHERE C.课程名称=’计算机’

实验五-复杂查询-实验报告

实验五复杂查询1 实验目的与要求(1) 熟练掌握SQL语句的使用。

(2) 熟练使用SQL语句进行连接操作。

2 实验内容(1)在订单明细表中查询订单金额最高的订单。

select a.*from orderdetail a,ordermaster bwhere a.orderno=b.orderno and ordersum=(select max(ordersum)from ordermaster)(2)找出至少被订购3次的商品编号、订单编号、订货数量和订货金额,并按订货数量的降序排序输出。

select productno 商品编号,orderno 订单编号,quantity 订货数量,quantity*price 订货金额from orderdetailwhere productno in(select productnofrom orderdetailgroup by productnohaving count(*)>=3)order by quantity desc(3)查找销售总额少于5000元的销售员编号、姓名和销售额。

select a.salerno 销售员编号,b.employeename 姓名,sum(ordersum)销售额from ordermaster a,employee bwhere a.salerno=b.employeenogroup by a.salerno,b.employeenamehaving sum(ordersum)<5000(4)找出目前业绩未超过5000元的员工,并按销售业绩的降序排序输出。

select salerno 销售员编号,sum(ordersum)销售业绩from ordermastergroup by salernohaving sum(ordersum)<=5000order by sum(ordersum)desc(5)查询订购的商品数量没有超过10个的客户编号和客户名称。

复杂查询实验报告

复杂查询实验报告江培健 10140421510计教(2)班(1) 查找有销售记录的客户编号、名称和订单总额。

SELECT a.CustomerNo,CustomerName, sum(qua ntity*price) orderSumFROM OrderMaster a,OrderDetail b,Customer cWHERE b.orderNo=a.orderNo AND c.CustomerNo=a.CustomerNo GROUP BY a.CustomerNo,CustomerNameORDER BY a.CustomerNo,orderSum DESC (2) 在订单明细表中查询订单金额最高的订单 (3) SELECT top 1 orderNo,sum(quantity*price)FROM OrderDetail GROUP BY orderNo ORDER BY 订单金额DESC订单金额3查询没有订购商品的客户编号和客户名称SELECT CustomerNo,CustomerNameFROM CustomerWHERE CustomerNo NOT IN (SELECT CustomerNo FROM OrderMaster)(4) (4)找出至少被订购3次的商品编号、订单编号、订货数量和订货金额,并按订货数量的降序排序输出。

SELECT productNo ,orderNo ,qua ntity ,qua ntity *price 订货金额FROM OrderDetailWHERE productNO IN(SELECT productNoFROM OrderDetailGROUP BY productNoHAVING cou nt(*)>=3)ORDER BY productNo desc⑸(5)使用子查询查找16M DRAM的销售情况,要求显示相应的销售员的姓名、性别, 销售日期、销售数量和金额(6) SELECT employeeName,case sex⑺whe n 'F' then ' 女'(8) whe n 'M' then ' 男'end sex,(9) orderDate,qua ntity,qua ntity*price 金额(10) FROM Employee a,OrderMaster b,OrderDetail c(11) WHERE a.employeeNo=b.salerNo AND b.orderNo=c.orderNo(12) AND c.ProductNo IN ((13) SELECT f.ProductNo(14) FROM OrderMaster d,OrderDetail e,Product f(15) WHERE d.orderNo=e.orderNo AND ProductName='32M DRAM')idien ' F* then '玄' when F then '男'end sex,orderDat e, quarrt ity, quant it y*p rice 金额FROM Employee OrderMauSt er b?Or de rDet ail cWHERE a. employeeNo=b. salerNo AND b. orderN^c. or de rNoAND c^Product No IN (SELECT f.PraductNoFROM OrdetMaster dj OtderDetail e f Product fWHERE d. orderNo=e< orderN口AND ProductName=* 32M DRAHI*) IlkSELECT orderNo ,orderSumFROM OrderMasterWHERE orderSum =(SELECT max(orderSum ) FROM OrderMaster )(7) 计算出一共销售了几种商品SELECT COUNT(*)种类FROM (SELECT DISTINCT ProductNo FROM OrderDetail)a(8) 显示OrderDetail表中每种商品的订购金额总和,并且依据销售金额由大到小排序输出。

数据库实验报告:实验五

数据库实验报告:实验五一、实验目的本次数据库实验五的主要目的是深入了解和掌握数据库的高级操作,包括存储过程的创建与使用、视图的定义和应用、以及事务处理的原理和实践。

通过这些实验内容,提高我们对数据库系统的综合运用能力,为解决实际的数据库管理问题打下坚实的基础。

二、实验环境本次实验使用的数据库管理系统是 MySQL 80,开发工具为 Navicat Premium 12。

操作系统为 Windows 10 专业版。

三、实验内容及步骤(一)存储过程的创建与使用1、创建一个名为`get_student_info` 的存储过程,用于根据学生学号查询学生的基本信息(包括学号、姓名、年龄、性别和专业)。

```sqlDELIMITER //CREATE PROCEDURE get_student_info(IN student_id INT)BEGINSELECT FROM students WHERE student_id = student_id;END //DELIMITER ;```2、调用上述存储过程,查询学号为 1001 的学生信息。

```sqlCALL get_student_info(1001);```(二)视图的定义和应用1、创建一个名为`student_grade_view` 的视图,用于显示学生的学号、姓名和平均成绩。

```sqlCREATE VIEW student_grade_view ASSELECT sstudent_id, sname, AVG(ggrade) AS average_gradeFROM students sJOIN grades g ON sstudent_id = gstudent_idGROUP BY sstudent_id, sname;```2、查询上述视图,获取所有学生的平均成绩信息。

```sqlSELECT FROM student_grade_view;```(三)事务处理1、开启一个事务,向学生表中插入一条新的学生记录(学号:1005,姓名:_____,年龄:20,性别:男,专业:计算机科学)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五复杂查询1 实验目的与要求(1) 熟练掌握SQL语句的使用。

(2) 熟练使用SQL语句进行连接操作。

2 实验内容(1)在订单明细表中查询订单金额最高的订单。

select a.*from orderdetail a,ordermaster bwhere a.orderno=b.orderno and ordersum=(select max(ordersum)from ordermaster)(2)找出至少被订购3次的商品编号、订单编号、订货数量和订货金额,并按订货数量的降序排序输出。

select productno 商品编号,orderno 订单编号,quantity 订货数量,quantity*price 订货金额from orderdetailwhere productno in(select productnofrom orderdetailgroup by productnohaving count(*)>=3)order by quantity desc(3)查找销售总额少于5000元的销售员编号、姓名和销售额。

select a.salerno 销售员编号,b.employeename 姓名,sum(ordersum)销售额from ordermaster a,employee bwhere a.salerno=b.employeenogroup by a.salerno,b.employeenamehaving sum(ordersum)<5000(4)找出目前业绩未超过5000元的员工,并按销售业绩的降序排序输出。

select salerno 销售员编号,sum(ordersum)销售业绩from ordermastergroup by salernohaving sum(ordersum)<=5000order by sum(ordersum)desc(5)查询订购的商品数量没有超过10个的客户编号和客户名称。

select a.customerno 客户编号,customername 客户名称from customer a,ordermaster b,orderdetail cwhere a.customerno=b.customerno and b.orderno=c.ordernogroup by a.customerno,customernamehaving sum(quantity)<=10(6)查找订货金额最大的客户名称和总货款。

select customerno 客户名称,sum(ordersum)总货款from ordermastergroup by customernohaving sum(ordersum)=(select max(sumorder)from(select customerno,sum(ordersum)as sumorderfrom ordermastergroup by customerno)b)(7)查找至少订购了3种商品的客户编号、客户名称、商品编号、商品名称、数量和金额。

select a.customerno 客户编号,customername 客户名称,b.productno 商品编号,productname 商品名称,quantity 数量,quantity*price 金额from customer a,product b,ordermaster c,orderdetail dwhere a.customerno=c.customerno and b.productno=d.productno andc.orderno=d.ordernoand d.orderno in(select ordernofrom orderdetailgroup by ordernohaving count(productno)>=3)order by a.customerno(8)找出目前销售业绩超过4000元的业务员编号及销售业绩,并按销售业绩从大到小排序。

select salerno 销售员编号,sum(ordersum)销售业绩from ordermastergroup by salernohaving sum(ordersum)>4000order by sum(ordersum)desc(9)求每位客户订购的每种商品的总数量及平均单价,并按客户号、商品号从小到大排列。

select customerno 客户编号,productno 商品编号,sum(quantity)总数量,avg(price)平均单价from ordermaster a,orderdetail bwhere a.orderno=b.ordernogroup by customerno,productnoorder by customerno,productno(10)查询业绩最好的的业务员号、业务员名及其总销售金额。

select salerno 业务员号, employeename 业务员名,sum(ordersum)销售金额from ordermaster a,employee bwhere a.salerno=b.employeenogroup by salerno,employeenamehaving sum(ordersum)=(select max(salesum)from(select salerno,sum(ordersum)as salesumfrom ordermastergroup by salerno)c)(11)查询订购的商品至少包含了订单“200803010001”中所订购商品的订单。

SELECT a.*FROM OrderMaster a,OrderDetail bWHERE a.orderNo =b.orderNo and productNo IN(SELECT productNo FROM OrderDetailWHERE orderNo='200803010001')(12)查询总订购金额超过“C20070002”客户的总订购金额的客户号、客户名及其住址。

select a.customerNo,a.customerName,a.addressfrom customer a,(select customerNo,sum(orderSum)sumorder from orderMaster group by customerNo) bwhere a.customerNo=b.customerNoand b.sumorder>(select sum(orderSum)sumorderfrom orderMasterwhere customerNo='C20070002'group by customerNo)(13)查询总销售金额最高的销售员编号、订单编号、订单日期和订单金额。

select salerno,b.orderno,orderdate,ordersumfrom employee a,ordermaster bwhere a.employeeno=b.salernoand ordersum=(select max(ordersum)from ordermaster)(14)用存在量词查找没有订货记录的客户名称。

select customernamefrom customer bwhere not exists(select*from ordermaster awhere a.customerno=b.customerno)(15)查询既订购了“52倍速光驱”商品,又订购了“17寸显示器”商品的客户编号、订单编号和订单金额。

select customerno,orderno,ordersumfrom ordermasterwhere customerno in(select customernofrom ordermaster a,orderdetail b,product cwhere a.orderno=b.orderno andb.productno=c.productno and productname='52倍速光驱')and customerno in(select customernofrom ordermaster a,orderdetailb,product cwhere b.productno=c.productno andproductname='17寸显示器')(16)求每位客户订购的每种商品的总数量及平均单价,并按客户号、商品号从小到大排列。

select customerno,productno,sum(quantity)数量,(sum(quantity*price)/sum(quantity))平均单价from ordermaster a,orderdetail bwhere a.orderno=b.ordernogroup by customerno,productnoorder by customerno,productno(17) 实验问题:①存在量词与集合运算IN、连接运算和全称量词之间的关系如何?它们可以互相替换吗?给出你的理由。

答:存在量词EXISTS可以用连接运算或集合运算I N来实现,而SQL中没有全称量词,只能用存在量词和取非运算来实现;②请写出例2.51的执行过程。

SELECT salerNo,employeeName,productName,quantity,priceFROM Employee a,OrderMaster b, OrderDetail c,Product dWHERE a.employeeNo=salerNo AND b.orderNo=c.orderNo ANDc.productNo=d.productNoAND EXISTS(SELECT salerNoFROM OrderMaster e,OrderDetail fWHERE e.orderNo=f.orderNo AND a.employeeNo=salerNoGROUP BY salerNoHAVING count(distinct productNo)>=5)ORDER BY salerNo1. 首先将表Employee a, OrderMaster b, OrderDetail c, Product d进行连接2. 对连接后的记录,取出员工编号,判断是否至少销售了5种商品3. 如果是,将salerNo, employeeName, productName, quantity, price这五个值作为输出结果4.如果不是,舍弃该连接记录5. 取下一条连接记录,转2,直到所有的连接记录处理完毕6. 最将结果输出③存在量词一般用在相关子查询中,请分别给出存在量词用在相关子查询和非相关子查询的查询例子。

相关文档
最新文档