如何执行和理解实验二中的表连接查询以及表综合查询操作?

时间: 2024-11-27 11:17:46 浏览: 4
DOC

Oracle实验二-SQL语句综合应用

star5星 · 资源好评率100%
### 实验二:表连接查询及表综合查询 #### 一、实验目的与要求 1. **掌握表连接查询的使用方法**: - 内连接(INNER JOIN) - 左外连接(LEFT OUTER JOIN) - 右外连接(RIGHT OUTER JOIN) - 交叉连接(CROSS JOIN) 2. **掌握子查询的使用方法**: - 能够使用上述连接方法解决具体的问题 4. **熟悉系统函数的使用**: - 如聚合函数、字符串处理函数等 5. **熟练应用SQL语句**: - SELECT语句及其相关子句(如 WHERE, GROUP BY, ORDER BY 等) 6. **综合应用能力**: - 将SELECT与系统函数、IF ELSE、WHILE等语句结合,解决复杂问题 #### 二、实验内容 1. **查找每个供应商供应的商品名称**: ```sql SELECT S.SupplierName, P.ProductName FROM Suppliers S INNER JOIN Products P ON S.SupplierID = P.SupplierID; ``` 2. **查找与“李云”签订采购单的供应商名称**: ```sql SELECT S.SupplierName FROM Suppliers S INNER JOIN PurchaseOrders PO ON S.SupplierID = PO.SupplierID INNER JOIN PurchasingAgents PA ON PO.AgentID = PA.AgentID WHERE PA.AgentName = '李云'; ``` 3. **使用IN关键字完成相同查询**: ```sql SELECT SupplierName FROM Suppliers WHERE SupplierID IN ( SELECT SupplierID FROM PurchaseOrders WHERE AgentID = (SELECT AgentID FROM PurchasingAgents WHERE AgentName = '李云') ); ``` 4. **使用左外连接查找所有采购员签订的采购合同详细信息**: ```sql SELECT * FROM PurchasingAgents A LEFT OUTER JOIN PurchaseOrders B ON A.AgentID = B.AgentID LEFT OUTER JOIN Contracts C ON B.ContractID = C.ContractID; ``` 5. **查找所有客户购买的商品详细信息**: ```sql SELECT C.CustomerName, P.ProductName, O.Quantity, P.UnitPrice FROM Customers C LEFT OUTER JOIN Orders O ON C.CustomerID = O.CustomerID LEFT OUTER JOIN Products P ON O.ProductID = P.ProductID; ``` 6. **使用内连接查找每个供应商供应的商品种类**: ```sql SELECT S.SupplierName, COUNT(DISTINCT P.ProductCategory) AS CategoryCount FROM Suppliers S INNER JOIN Products P ON S.SupplierID = P.SupplierID GROUP BY S.SupplierName; ``` 7. **查找购买了编号为‘A001’的供应商供应的商品的客户名称**: ```sql SELECT C.CustomerName FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID INNER JOIN Products P ON O.ProductID = P.ProductID WHERE P.SupplierID = (SELECT SupplierID FROM Suppliers WHERE SupplierCode = 'A001'); ``` 8. **查找销售员‘王良’在2005年签订的销售合同详细信息**: ```sql SELECT * FROM SalesAgents SA INNER JOIN SalesContracts SC ON SA.AgentID = SC.AgentID WHERE SA.AgentName = '王良' AND YEAR(SC.ContractDate) = 2005; ``` 9. **查询所有供应‘鲜橙多’的供应商的最低报价**: ```sql SELECT MIN(P.UnitPrice) FROM Suppliers S INNER JOIN Products P ON S.SupplierID = P.SupplierID WHERE P.ProductName = '鲜橙多'; ``` 10. **查找销售员‘王良’在2005年签订的所有销售合同中每一类商品的总金额**: ```sql SELECT P.ProductCategory, SUM(O.TotalAmount) AS TotalAmount FROM SalesAgents SA INNER JOIN SalesContracts SC ON SA.AgentID = SC.AgentID INNER JOIN OrderDetails OD ON SC.OrderID = OD.OrderID INNER JOIN Products P ON OD.ProductID = P.ProductID WHERE SA.AgentName = '王良' AND YEAR(SC.ContractDate) = 2005 GROUP BY P.ProductCategory; ``` 11. **汇总由姓名为‘刘明’的采购员在2004年采购的‘数码相机’的总金额**: ```sql SELECT SUM(PO.TotalAmount) AS TotalAmount FROM PurchasingAgents PA INNER JOIN PurchaseOrders PO ON PA.AgentID = PO.AgentID INNER JOIN Products P ON PO.ProductID = P.ProductID WHERE PA.AgentName = '刘明' AND YEAR(PO.PurchaseDate) = 2004 AND P.ProductName = '数码相机'; ``` 12. **汇总由姓名为‘刘明’的采购员在2005年采购的各类商品的数量**: ```sql SELECT P.ProductCategory, SUM(PO.Quantity) AS TotalQuantity FROM PurchasingAgents PA INNER JOIN PurchaseOrders PO ON PA.AgentID = PO.AgentID INNER JOIN Products P ON PO.ProductID = P.ProductID WHERE PA.AgentName = '刘明' AND YEAR(PO.PurchaseDate) = 2005 GROUP BY P.ProductCategory; ``` 13. **查找没有供应任何一类商品的供应商的名字**: ```sql SELECT S.SupplierName FROM Suppliers S LEFT OUTER JOIN Products P ON S.SupplierID = P.SupplierID WHERE P.ProductID IS NULL; ``` 14. **查找在2006年各个客户购买商品的总金额,并按总金额降序排序**: ```sql SELECT C.CustomerName, SUM(O.TotalAmount) AS TotalAmount FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID WHERE YEAR(O.OrderDate) = 2006 GROUP BY C.CustomerName ORDER BY TotalAmount DESC; ``` 15. **使用左连接查找每个销售人员销售的商品详细信息**: ```sql SELECT SA.AgentName, SC.ContractID, C.CustomerName, P.ProductName, OD.Quantity, P.UnitPrice FROM SalesAgents SA LEFT OUTER JOIN SalesContracts SC ON SA.AgentID = SC.AgentID LEFT OUTER JOIN OrderDetails OD ON SC.OrderID = OD.OrderID LEFT OUTER JOIN Products P ON OD.ProductID = P.ProductID LEFT OUTER JOIN Customers C ON SC.CustomerID = C.CustomerID; ``` 16. **查找每个采购员和每个供应商签订的合同的总金额**: ```sql SELECT PA.AgentName, S.SupplierName, SUM(PO.TotalAmount) AS TotalAmount FROM PurchasingAgents PA INNER JOIN PurchaseOrders PO ON PA.AgentID = PO.AgentID INNER JOIN Suppliers S ON PO.SupplierID = S.SupplierID GROUP BY PA.AgentName, S.SupplierName; ``` #### 三、自我测试 1. **使用右外连接查找所有采购员签订的采购合同详细信息,没有签订采购单的采购员也要显示**: ```sql SELECT * FROM PurchaseOrders PO RIGHT OUTER JOIN PurchasingAgents PA ON PO.AgentID = PA.AgentID LEFT OUTER JOIN Contracts C ON PO.ContractID = C.ContractID; ``` 2. **查找购买了名称为‘联想集团’的供应商供应的商品的客户名称**: ```sql SELECT C.CustomerName FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID INNER JOIN Products P ON O.ProductID = P.ProductID WHERE P.SupplierID = (SELECT SupplierID FROM Suppliers WHERE SupplierName = '联想集团'); ``` 3. **查找编号为‘A002’的供应商没有供应的商品的名称**: ```sql SELECT P.ProductName FROM Products P LEFT OUTER JOIN Suppliers S ON P.SupplierID = S.SupplierID WHERE S.SupplierCode = 'A002' AND P.ProductID IS NULL; ``` 4. **分别使用UNION和INNER JOIN关键字完成以下查询:查询由‘三高计算机公司’和‘联想集团’供应商的所有商品的商品ID**: ```sql -- Using UNION SELECT ProductID FROM Products WHERE SupplierID IN ( SELECT SupplierID FROM Suppliers WHERE SupplierName = '三高计算机公司' ) UNION SELECT ProductID FROM Products WHERE SupplierID IN ( SELECT SupplierID FROM Suppliers WHERE SupplierName = '联想集团' ); -- Using INNER JOIN SELECT P.ProductID FROM Products P INNER JOIN Suppliers S ON P.SupplierID = S.SupplierID WHERE S.SupplierName IN ('三高计算机公司', '联想集团'); ``` 通过这些示例,可以更好地理解和应用各种表连接查询和综合查询技术,从而解决实际数据库管理中的复杂问题。
阅读全文

相关推荐

最新推荐

recommend-type

实验二表的连接和嵌套查询实验

以上是针对实验二中给出的查询任务的详细解答,这些查询涵盖了连接查询(JOIN)和子查询(嵌套查询)的基本用法,对于理解多表关系的处理和数据检索具有重要的实践意义。通过这些练习,学生能够更好地掌握SQL语言在...
recommend-type

MYSQL锁表问题的解决方法

总之,解决MySQL锁表问题需要综合运用多种策略,包括优化事务处理、选择合适的隔离级别、数据库设计优化以及实施监控和自动化处理。通过这些方法,可以有效减少锁表的发生,提高系统的稳定性和并发性能。
recommend-type

信号与系统考研指导(北邮第二版)勘误表

《信号与系统考研指导》是...同时,考生还应结合其他资料,如《信号白皮书》等,进行多角度的学习和验证,以提高理解和应用的深度。在面对教材中的错误时,保持批判性思维,主动求证,这样才能在备考过程中不断进步。
recommend-type

FPGA之时钟相位的理解

时钟相位的精确控制对于FPGA设计中的时序分析和时钟树综合至关重要。时钟树是FPGA内部时钟信号分配的结构,它需要确保每个逻辑单元都能在正确的时间接收到时钟信号,以避免时钟偏斜(Skew)和时钟抖动(Jitter)导致...
recommend-type

操作系统实验指导书(用c语言实现了操作系统里的几个经典算法!)

在实验二中,学生需要理解作业控制块(JCB)的结构,并实现如先来先服务(FCFS)、短作业优先(SJF)和高响应比优先(HRN)等调度算法。这些算法的目标是优化系统效率和作业完成时间。 2. **进程调度模拟**: 实验...
recommend-type

Angular实现MarcHayek简历展示应用教程

资源摘要信息:"MarcHayek-CV:我的简历的Angular应用" Angular 应用是一个基于Angular框架开发的前端应用程序。Angular是一个由谷歌(Google)维护和开发的开源前端框架,它使用TypeScript作为主要编程语言,并且是单页面应用程序(SPA)的优秀解决方案。该应用不仅展示了Marc Hayek的个人简历,而且还介绍了如何在本地环境中设置和配置该Angular项目。 知识点详细说明: 1. Angular 应用程序设置: - Angular 应用程序通常依赖于Node.js运行环境,因此首先需要全局安装Node.js包管理器npm。 - 在本案例中,通过npm安装了两个开发工具:bower和gulp。bower是一个前端包管理器,用于管理项目依赖,而gulp则是一个自动化构建工具,用于处理如压缩、编译、单元测试等任务。 2. 本地环境安装步骤: - 安装命令`npm install -g bower`和`npm install --global gulp`用来全局安装这两个工具。 - 使用git命令克隆远程仓库到本地服务器。支持使用SSH方式(`***:marc-hayek/MarcHayek-CV.git`)和HTTPS方式(需要替换为具体用户名,如`git clone ***`)。 3. 配置流程: - 在server文件夹中的config.json文件里,需要添加用户的电子邮件和密码,以便该应用能够通过内置的联系功能发送信息给Marc Hayek。 - 如果想要在本地服务器上运行该应用程序,则需要根据不同的环境配置(开发环境或生产环境)修改config.json文件中的“baseURL”选项。具体而言,开发环境下通常设置为“../build”,生产环境下设置为“../bin”。 4. 使用的技术栈: - JavaScript:虽然没有直接提到,但是由于Angular框架主要是用JavaScript来编写的,因此这是必须理解的核心技术之一。 - TypeScript:Angular使用TypeScript作为开发语言,它是JavaScript的一个超集,添加了静态类型检查等功能。 - Node.js和npm:用于运行JavaScript代码以及管理JavaScript项目的依赖。 - Git:版本控制系统,用于代码的版本管理及协作开发。 5. 关于项目结构: - 该应用的项目文件夹结构可能遵循Angular CLI的典型结构,包含了如下目录:app(存放应用组件)、assets(存放静态资源如图片、样式表等)、environments(存放环境配置文件)、server(存放服务器配置文件如上文的config.json)等。 6. 开发和构建流程: - 开发时,可能会使用Angular CLI来快速生成组件、服务等,并利用热重载等特性进行实时开发。 - 构建应用时,通过gulp等构建工具可以进行代码压缩、ES6转译、单元测试等自动化任务,以确保代码的质量和性能优化。 7. 部署: - 项目最终需要部署到服务器上,配置文件中的“baseURL”选项指明了服务器上的资源基础路径。 8. 关于Git仓库: - 压缩包子文件的名称为MarcHayek-CV-master,表明这是一个使用Git版本控制的仓库,且存在一个名为master的分支,这通常是项目的主分支。 以上知识点围绕Angular应用“MarcHayek-CV:我的简历”的创建、配置、开发、构建及部署流程进行了详细说明,涉及了前端开发中常见的工具、技术及工作流。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

深入剖析:内存溢出背后的原因、预防及应急策略(专家版)

![深入剖析:内存溢出背后的原因、预防及应急策略(专家版)](https://d8it4huxumps7.cloudfront.net/uploads/images/65e82a01a4196_dangling_pointer_in_c_2.jpg?d=2000x2000) 参考资源链接:[Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结](https://wenku.csdn.net/doc/6412b784be7fbd1778d4a95f?spm=1055.2635.3001.10343) # 1. 内存溢出的概念及影响 内存溢出,又称
recommend-type

Java中如何对年月日时分秒的日期字符串作如下处理:如何日期分钟介于两个相连的半点之间,就将分钟数调整为前半点

在Java中,你可以使用`java.time`包中的类来处理日期和时间,包括格式化和调整。下面是一个示例,展示了如何根据给定的日期字符串(假设格式为"yyyy-MM-dd HH:mm:ss")进行这样的处理: ```java import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; public class Main { public static void main(String[] args
recommend-type

Crossbow Spot最新更新 - 获取Chrome扩展新闻

资源摘要信息:"Crossbow Spot - Latest News Update-crx插件" 该信息是关于一款特定的Google Chrome浏览器扩展程序,名为"Crossbow Spot - Latest News Update"。此插件的目的是帮助用户第一时间获取最新的Crossbow Spot相关信息,它作为一个RSS阅读器,自动聚合并展示Crossbow Spot的最新新闻内容。 从描述中可以提取以下关键知识点: 1. 功能概述: - 扩展程序能让用户领先一步了解Crossbow Spot的最新消息,提供实时更新。 - 它支持自动更新功能,用户不必手动点击即可刷新获取最新资讯。 - 用户界面设计灵活,具有美观的新闻小部件,使得信息的展现既实用又吸引人。 2. 用户体验: - 桌面通知功能,通过Chrome的新通知中心托盘进行实时推送,确保用户不会错过任何重要新闻。 - 提供一个便捷的方式来保持与Crossbow Spot最新动态的同步。 3. 语言支持: - 该插件目前仅支持英语,但开发者已经计划在未来的版本中添加对其他语言的支持。 4. 技术实现: - 此扩展程序是基于RSS Feed实现的,即从Crossbow Spot的RSS源中提取最新新闻。 - 扩展程序利用了Chrome的通知API,以及RSS Feed处理机制来实现新闻的即时推送和展示。 5. 版权与免责声明: - 所有的新闻内容都是通过RSS Feed聚合而来,扩展程序本身不提供原创内容。 - 用户在使用插件时应遵守相关的版权和隐私政策。 6. 安装与使用: - 用户需要从Chrome网上应用店下载.crx格式的插件文件,即Crossbow_Spot_-_Latest_News_Update.crx。 - 安装后,插件会自动运行,并且用户可以对其进行配置以满足个人偏好。 从以上信息可以看出,该扩展程序为那些对Crossbow Spot感兴趣或需要密切跟进其更新的用户提供了一个便捷的解决方案,通过集成RSS源和Chrome通知机制,使得信息获取变得更加高效和及时。这对于需要实时更新信息的用户而言,具有一定的实用价值。同时,插件的未来发展计划中包括了多语言支持,这将使得更多的用户能够使用并从中受益。