MY SQL 实验四:

一、实验目的

     通过该实验掌握较复杂的SQL 查询数据库方法,包括嵌套查询,相关与不相关子查询,连接的多种方法等。

 二、实验原理

   数据库查询是数据库的核心操作。SQL语言提供了SELECT语句进行数据库的查询。

   SELECT[ALL|DISTINCT]<目标列表达式〉[,<目标列表达式〉]...

   FROM<表名或视图名〉[,<表名或视图名〉]...

   [WHERE<条件表达式>]

   [GROUP BY<列名1〉[HAVING<条件表达式>]]

   [ORDERBY<列名2〉[ASC|DESC]]

  三、实验条件

     windows7 操作系统, mysql5.6 数据库服务器,可视化管理平台:Mysql Workbench5.2 。

  四、实验内容和方法

    (一) 建立实验数据库

        根据上一次实验用脚本TradeDBSQL.txt创建数据库Trade.

   (二) 安装及使用Mysql Workbench (如果没有安装Mysql Workbench 可按以前的实验方法在命令窗口进行)       

     MySQL Workbench 综合了SQL 开发,服务器管理及数据库设计等功能的综合性可视化平台。MySQL Workbench为数据库管理员、程序开发者和系统规划师提供可视化设计、模型建立、以及数据库管理功能。

     将老师提供的压缩包(免安装版),放置在e:根目录下,解压缩 -> 双击MySQLWorkbench.exe -> 将出现一个界面。

     界面包括三个部分:

        1. SQL Development (用于连接现有的数据库,运行SQL脚本,管理数据库对象等)

2. Data Modeling (用于数据库的建模设计,将来涉及)

3. Server Administration (管理数据库服务器,导入导出数据库,及用户安全性等)

  本次实验采用第一部分SQL Development

    1.建立与数据库服务器的连接,连接名con1

   1) 点击 ‘New Connection' 按钮,跳出配置窗口

   2) 在Connection Name 命名 连接名例如con1,其他都按默认的方式,password部分:点击Store in Vault..,在跳出的窗口中的password输入密码,无就按回车。

   3) 在Default Schema:中可以保持空,或者直接输入缺省数据库名,例如Trade

           4) 按 Test Connection 测试是否连接成功。如果成功,按ok按钮。

   

    2. 进入数据库服务器

       在连接名con1上按鼠标右键有两个重要选项: 1.Query Database (连接数据库);2.Start Command Line Client (进入命令行窗口,与以前的实验一样)。

       1)点击'Query Database'进入可视化窗口,显示已有的数据库清单。

       2)在右边的'Query"的窗口,可以输入sql 语句,运行查询结果。

       3)输入use Trade; 按执行按钮,将数据库切换到trade中。

       4)输入查询语句,例如 select * from orders; 将在下方窗口出现查询结果,可以将查询结果导出到外部文件中(点击Export按钮)

   

   (三) 高级查询方法

    1.自连接

     一张表可以拆分为多张表,并且用别名表示。

    例如 查找员工上级(经理)的姓名 (参考教科书例子 查询每一门课的间接先修课(即先修课的先修课))

  SELECT

  CONCAT(y.LastName , ' ', y.FirstName) AS `经理`,

  CONCAT(x.LastName, ' ', x.FirstName) AS `员工`

FROM

  employees x, employees y

 where  x.ReportsTo = y.employeeID

  order by y.employeeID;

   其中CONCAT为字符串函数,连接字符串.  

 

 

  2. 交叉连接 cross join , 笛卡尔积

     比较下列两个查询结果

     1) select * from products cross join Categories;

     2) select * from products,Categories;

  3. 内连接, inner join , 等值连接

      比较下列两个查询结果

   select * from products inner join Categories on products.CategoryID=Categories.CategoryID;

           select * from products , Categories where products.CategoryID=Categories.CategoryID    

  4. 外连接,左、右连

      

    查询没有下过定单的客户名称  

  select customers.companyname,orderID

    from customers left join orders on customers.customerID=orders.customerID

   where orderID is null;

     写出等价的右连查询(提示right join)

 

  5. any, all 谓词

   类别2各个产品的库存量与类别1各个产品的库存量比较

   select productName from Products where categoryID='2' and UnitsinStock >=any (select unitsinStock from Products where categoryID='1');

   执行此查询语句,说明">=any"谓词修饰符的含义。

  分别用下列谓词修饰符,代替 ">=any" 并说明比较结果。  

   > ANY 大于子查询结果中的某个值

      

   > ALL 大于子查询结果中的所有值

   < ANY 小于子查询结果中的某个值

     < ALL 小于子查询结果中的所有值

   >= ANY 大于等于子查询结果中的某个值

      >= ALL 大于等于子查询结果中的所有值

   <= ANY 小于等于子查询结果中的某个值

       <= ALL 小于等于子查询结果中的所有值

   = ANY 等于子查询结果中的某个值   

   =ALL 等于子查询结果中的所有值(通常没有实际意义)

   !=(或<>)ANY 不等于子查询结果中的某个值

   !=(或<>)ALL 不等于子查询结果中的任何一个值

  6.理解下列查询的意义,写出具体的查询要求

  1)  

  SELECT DISTINCT

   Customers.CustomerID,

   Customers.CompanyName,

   Customers.City

FROM Customers

   JOIN Orders ON Customers.CustomerID = Orders.CustomerID

WHERE Orders.OrderDate BETWEEN '1997-01-01' And '1997-12-31';

查询发货日期从1997-01-01到1997-12-31的客户ID,公司名称,客户城市.

  2)

  SELECT

   OrderDetails.OrderID,

   Sum(ROUND(OrderDetails.UnitPrice*Quantity*(1-Discount))) AS 订购额  

  FROM OrderDetails

  GROUP BY OrderDetails.OrderID   limit 2\G;

根据订单ID查询该ID下的订购总额,并以订单额命名.

  3)

  select orders.customerID,count(orderdetails.productID)

  from orders,orderdetails

  where orders.orderID=orderdetails.orderID

  group by orders.customerID

  having count(orderdetails.productID)>20

  order by orders.customerID;

根据客户ID查询客户ID,客户订单总量大于20的所有客户ID和该客户订单总量

   4)

     select suppliers.CompanyName,Customers.CompanyName,suppliers.city,customers.city

     from suppliers,customers

     where suppliers.city=customers.city;

查询运货商公司的城市=客户公司城市的运货商城市名称和城市,客户公司名称和城市

  

  7.思考题  

   

    1)查找至少订购了订单ID为10251订购的全部产品的订单ID

  第一种:select OrderDetails.OrderID , count(distinct OrderDetails.ProductID) from Products,OrderDetails

       where OrderDetails.ProductID=Products.ProductID and OrderDetails.OrderID='10251'

      group by OrderDetails.OrderID

      having count(distinct OrderDetails.ProductID)>= (select count(distinct ProductID) from OrderDetails where OrderID='10251' );

 第二种:SELECT DISTINCT OrderID

       FROM OrderDetails OrderDetailsx

       WHERE NOT EXISTS

                     (SELECT *

                      FROM OrderDetails OrderDetailsy

                      WHERE OrderDetailsy.OrderID = '10251'  AND

                                    NOT EXISTS

                                    (SELECT *

                                     FROM OrderDetails OrderDetailsz

                                     WHERE OrderDetailsz.OrderID=OrderDetailsx.OrderID AND

                                                   OrderDetailsz.ProductID=OrderDetailsy.ProductID));

     

     提示:

   参考教材“查询至少选修了学生200215122选修的全部课程的学生号码。”

   SELECT DISTINCT Sno

       FROM SC SCX

       WHERE NOT EXISTS

                     (SELECT *

                      FROM SC SCY

                      WHERE SCY.Sno = '200215122'  AND

                                    NOT EXISTS

                                    (SELECT *

                                     FROM SC SCZ

                                     WHERE SCZ.Sno=SCX.Sno AND

                                                   SCZ.Cno=SCY.Cno));

   等价SQL

     select x.sno, count(distinct x.cno) from sc x,sc y

       where x.cno=y.cno and y.sno='200215122'

      group by x.sno

      having count(distinct x.cno)>= (select count(distinct cno) from sc where sno='200215122' );

    2)查找1996年8月份,订购量最大的公司名称及所在的城市。

select Suppliers.CompanyName,Suppliers.City,Products.ProductID,sum(round(OrderDetails.Quantity)) from OrderDetails,Products,Suppliers, Orders where Products.ProductID=OrderDetails.ProductID and Suppliers.SupplierID=Products.SupplierID and year(Orders.OrderDate)=1996 and month(Orders.OrderDate)=8 group by OrderDetails.ProductID order by sum(round(OrderDetails.Quantity)) desc;

    3)查找1996年销售最好的产品名称及相关产品的供应商名称。

select Products.ProductName,Suppliers.CompanyName,sum(UnitsOnOrder+ReorderLevel) from Products,Suppliers,Orders,OrderDetails where Products.SupplierID=Suppliers.SupplierID and OrderDetails.ProductID=Products.ProductID and year(Orders.OrderDate)=1996 group by Products.ProductID order by sum(UnitsOnOrder+ReorderLevel) desc;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/838341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

enable_shared_from_this 实现原理

前言 enable_shared_from_this 可以帮助我们用 this 指针安全地创建 shared_ptr。 enable_shared_from_this 假设我们的程序使用 shared_ptr 管理 Widget 对象&#xff0c;我们用一个 vector 来记录已经处理过的 Widget 对象&#xff1a; std::vector<std::shared_ptr&l…

OSError: [WinError 1455] 页面文件太小,无法完成操作 的问题

实质问题是报错&#xff1a;caffe2_detectron_ops.dll“ or one of its dependencies 还需要安装一个包&#xff1a; pip install intel-openmp 安装之后顺利测试通过。

使用可接受gitlab参数的插件配置webhook

jenkins配置 安装Generic Webhook Trigger 配置远程触发令牌 勾选Print post content和Print contributed variables用于打印值 配置gitlab 选择新增webhook 配置webhook http://JENKINS_URL/generic-webhook-trigger/invoke,将JENKINS_URL修改成自己的jenkins地址 先保存…

【考研数学】准备开强化,更「张宇」还是「武忠祥」?

数一125学长前来回答&#xff0c;选择哪位老师的课程&#xff0c;这通常取决于你的个人偏好和学习风格&#xff01; 张宇老师和武忠祥老师都是非常有经验的数学老师&#xff0c;他们的教学方法各有特点。 张宇老师的教学风格通常被认为是通俗易懂&#xff0c;善于将复杂的概念…

【JS】基于原生JavaScript的大文件切片上传及断点续传实现

基于原生JavaScript的大文件切片上传及断点续传实现 在现代Web应用中,大文件上传是一个常见但具有挑战性的功能。随着文件大小的增加,如何高效可靠地上传文件至服务器成为亟待解决的问题。在本文中,我将介绍如何使用原生JavaScript实现大文件切片上传及断点续传功能。 为什…

嵌入式开发十四:按键输入实验

前面两个实验&#xff0c;我们介绍了 STM32F4 的 IO 口作为输出的使用&#xff0c;这一次&#xff0c;我们将向大家介绍如何使用 STM32F4 的 IO 口作为输入用。我们将利用板载的 4 个按键&#xff0c;来控制板载的两个 LED 的亮灭和蜂鸣器。通过本次的学习&#xff0c;你将了解…

C语言输出符

C语言输出符 以下是C语言中一些常用的格式化输出的格式控制符及其对应的数据类型&#xff1a; 格式控制符描述对应数据类型%d十进制有符号整数int%ld长整型long int%lld长长整型long long int%u十进制无符号整数unsigned int%lu无符号长整型unsigned long int%llu无符号长长整…

从独立开发者到成为SeaTunnel社区的贡献者,我做对了哪些事儿?

个人介绍 大家好&#xff0c;我是闫成雨&#xff0c;目前是一名独立开发者。专注于数据开发、机器学习、资源调度算法和分布式系统。 GitHub ID: CheneyYin 个人主页&#xff1a;https://cheneyyin.github.io/ 为社区做了哪些贡献 加强了Spark引擎和Flink引擎对SeaTunnel数据…

2024年最新软件测试面试题必问的1000题!

我了解的测试理论和方法包括以下几个方面&#xff1a; 黑盒测试与白盒测试&#xff1a; 黑盒测试&#xff1a;基于对软件系统外部行为进行测试&#xff0c;独立于内部代码实现细节。黑盒测试关注输入与输出之间的关系以及软件功能是否符合预期。白盒测试&#xff1a;基于对软件…

如何实现Linux双网卡同时连接内网和外网的配置?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Day29

回溯算法part03 LC39组合总和(未掌握) 未掌握分析&#xff1a;被数组中的元素可以被重复选取误导&#xff0c;同时没有想到暴力解法来理解回溯 暴力解法肯定是for循环遍历candidates中的每个元素&#xff0c;下一层子循环不像之前的组合题目那样从i1开始&#xff0c;该题目元…

Linux系统 的持续学习

昨天学习了目录结构、补充命令和配置网络&#xff0c;其中配置网络用了nat方法&#xff0c;今天学习用桥接方法&#xff0c;通配符、正则表达式的一部分内容。 桥接模式 如果重网卡失败&#xff1a; 1.检查配置文件是否正确 2.检查虚拟器编辑器有没有选对&#xff08;网卡类…

jiebaNET中文分词器

最近我接手了一个有趣的需求&#xff0c;需要对用户评价进行分词&#xff0c;进行词频统计和情绪分析&#xff0c;并且根据词频权重制成词云图以供后台数据统计&#xff0c;于是我便引入了jieba分词器,但是我发现网上关于jiebaNET相关文档实在太少了&#xff0c;甚至连配置文件…

弘君资本:降准降息利好哪些板块?

降准是指下降存款准备金率&#xff0c;降息是指下调存款利率&#xff0c;他们是一种宽松的货币政策&#xff0c;对股市来说是一种利好&#xff0c;其间利好以下板块&#xff1a; 1、券商板块 降准降息会影响投资渠道的扩宽&#xff0c;降低资金入市的机会成本&#xff0c;将更…

CyclicBarrier的 常用场景及使用示例

CyclicBarrier的 常用场景及使用示例 CyclicBarrier是Java并发编程中的另一种同步辅助工具&#xff0c;它用于控制多个线程相互等待&#xff0c;直到所有线程都到达一个共同的屏障点&#xff0c;然后所有线程才会继续执行。与CountDownLatch不同的是&#xff0c;CyclicBarrier…

python的转义序列和占位符

1.占位符 1.%s&#xff1a;用于插入字符串 name "Alice" message "Hello, %s!" % name print(message) # 输出&#xff1a;Hello, Alice!%d&#xff1a;用于插入整数 age 25 message "I am %d years old." % age print(message) # 输出…

chrome命令的使用

Chrome浏览器&#xff0c;也称为Google Chrome&#xff0c;是由Google公司开发的一款设计现代、快速且安全的网页浏览器。Chrome浏览器基于开源的Chromium项目&#xff0c;并增加了Google自己的一些独特功能。Chrome浏览器以其简洁的界面、快速的浏览速度和丰富的扩展程序而广受…

Linux 文本编辑相关指令、指令参数、使用例子

一些常见的Linux文本编辑和处理相关的指令&#xff0c;以及它们的参数和使用例子&#xff0c;以表格形式列出&#xff1a; 序号指令名称指令参数及说明指令使用例子及说明1cat-n: 显示每行的行号cat -n filename 显示文件内容及行号2less-i: 交互模式&#xff0c;允许搜索less…

付费解锁隐藏动力和续航,订阅制又被特斯拉玩出花了

我们知道&#xff0c;「订阅制」早已成互联网领域各路大厂玩烂的操作。 上到程序订阅付费使用&#xff08;例如 Offics、Adobe&#xff09;&#xff0c;下到各类功能服务订阅&#xff08;如影视会员、网盘会员等&#xff09;。 甚至于某东、某宝等网购平台也整出了 VIP 订阅服…

原地去重问题和合并有序数组问题

原地去重问题 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。这是leetcode上的一道题 这里我们用…