MySQL——链表

主键:非空 唯一(针对整列数据而言) 为了方便管理一般主键都是设置为自增
外键:一张表中的一列的值是另一张表的主键,使用外键建立两张数据表的数据关系

一、两张表连接

将两张表格拼接成一个表

1、格式:select 列A,列B from 表A,表 where 表A.列C=表B.列C

 2、格式:select 列A,列B from 表A inner join表B on 表A.列C=表B.列C  #效率不高

二、多表连接

三张表相连ABC AC没有相同的列名

***格式:select 表A。列a,表C。列b from 表A,表B,表C where 表A列A=表B列A and 表B列B=表C列C ;

 格式2  #了解

 格式3嵌套多表查询  #了解

数据表别名

好处 :
1. 简化 SQL 语句
2. 方便在同一 SELECT 语句下反复进行表的调用

 三、外联

可以将表设置别名,在链表时使用

强制使用数据列

格式:select 列A列B  from 表A RIGHT OUTER JOIN 表B ON 表A列A=表B列A  #没有值显示为unll /有数据直接消失

RIGHT OUTER 右边的表强制

LEFT OUTER    左边的表强制

【数据库内、外、左、右连接详解 - CSDN App http://t.csdnimg.cn/ILTsgicon-default.png?t=N7T8http://t.csdnimg.cn/ILTsg
使用联表条件的注意事项:
1. 注意选择正确的联表方式,大部分情况下,我们要做的都是内联,但是偶尔也会有外联适用的情况
2. 注意连表查询时使用的字段(列),否则可返回错误的数据
3. 确保提供了正确的联表条件,否则会得到一个笛卡尔积
4. 在实践中,联表查询时可能使用多种联表方式。虽然这样写是完全没问题的,但是为了避免数据调
试等麻烦,建议先单独测试每一个联表的操作。

全外连接:

也称联合查询,用来合并查询结果可以合并同一张的表的查询记录(不同表的查询记录也可合并要求查询时,多个select语句查询表头个数必须一样UNION关键字默认去重,可以使用UNI0N ALL包含重复项

格式:

(SELECT语句) UNION (SELECT语句); 去重

(SELECT语句) UNION  ALL (SELECT语句); 不去重

四、练习1

1.编写一条 5OL语句,从数据库中返回客户名称(cust name)订单表中的客户表和相关订单号(order num),并按客户名称和订单号对结果进行排序。实际上,请尝试两次:一次使用简单的等连接语法,然后使用INNER JOIN

select o.order_num,c.cust_name  from customers as c,orders as o where c.cust_id = o.cust_id order by c.cust_name,o.order_num  ;select o.order_num,c.cust_name  from customers as c inner join orders as o on c.cust_id = o.cust_id order by c.cust_name,o.order_num  ;

2.让我们让之前的挑战变得更有用。除了返回客户名称和订单号 添加名为0rderTotal的第三列,其中包含每个订单的总价格。有两种方法可以执行此操作:您可以使用0rderitems表上的子查询创建OrderTotal列,或者可以将Orderltems表连接至现有表并使用坚合匪数。
这里有一个提示:请注意需要使用完全限定列名的地方。

select o.order_num,c.cust_name,oi.quantity * oi.item_price as ordertotalfrom customers as c 
inner join orders as o on c.cust_id = o.cust_id inner join orderitems as oi on oi.order_num = o.order_num
order by c.cust_name,o.order_num  ;select c.cust_name,o.order_num,
( select sum( oi.quantity * oi.item_price ) 
from orderitems as oi where 0.order_num = oi order_num group by oi.order_num ) as ordertotal 
from customers as c,orders as o where c.cust_id = o.cust_id;

3.让我们回顾第 14 章中的挑战 2,编写一条 SQL语句来检索订购产品 BR01 的日期,但这次使用联接和简单的等值联接语法。输出应该与第 14 章挑战中的输出相同。

select o.order_date from orders as o, orderitems as oi where o.order_num = oi.order_num and oi.prod_id = 'ANV01';


4.那很有趣,让我们再试一次。重新创建您为第 14 章中的挑战3编写的 SQL,但这次使用ANSI INNER JOIN语法。您在那里编写的代码使用了两个嵌套子查询。要重新创建它,您需要两个INNER JOIN语句 ,每个语句的格式都类似于本章前面的INNERJOIN示例。并且不要忘记按 prod_id 过滤的WHERE子句。

select c.cust_emailfrom customers as c, orderitems as oi,orders as o 
where oi.order_num = o.order_num and  o.cust_id = c.cust_idand oi.prod_id = 'ANV01';


5.另外 ,为了让事情变得更有趣,我门将混合连接、聚合匪数,以及分组。准备好?回型第 13 章,我要求你找到所有值为 1000 或以上的订单号。这些结果很有用,但更有用的是下了至少该金额订单的客户的姓名。因此,编写一条SQL语句,使用联接从Customers表中返回客户名称(cust_name),并从Orderltems表中返回每个订单的总价格。这里有一个提示:要连接这些表,您还需要包含0rders表(因为Customers与Orderltems不直接相关,Customers与Orders相关,而Orders与0rderltems相关)不要忘记GROUPBY和HAMNG,并确保按客户名称对结果进行排序。您可以为此使用简单的等值连接或 ANSI INNER JOIN语法。或者,如果你有勇气,可以尝试用两种方式写。

select c.cust_name,sum(oi.quantity * oi.item_price) as 订单金额
from customers as c, orderitems as oi,orders as o 
where oi.order_num = o.order_num and  o.cust_id = c.cust_id
group by oi.order_num having 订单金额 < 1000;

五、练习2

1.使用INNERJOIN编写一条 SOL 语句来检索客户名称(cust_name in客户)以及每个订单的所有订单号(订单中的order num )

select c.cust_name,o.order_num from customers as c,orders as o 
where o.cust_id = c.cust_id ;

2.修改您刚刚创建的 SOL 语句以列出所有客户,甚至是那些没有客户的客户命令。

select c.cust_name,o.order_num from  orders as o
RIGHT OUTER JOIN  customers as c
on o.cust_id = c.cust_id ;


3.使用OUTER JOIN连接Products和Orderitems表,并返回与每个表关联的产品名称(prod name)和订单号(order num)的排序列表。

select p.prod_name,oi.order_num from orderitems as oi
RIGHT OUTER JOIN products as p
on p.prod_id = oi.prod_id
order by oi.order_num;


4.修改在上一个挑战中创建的 SOL语句,使其返回每个商品的订单总数(而不是订单号)。

select p.prod_name,oi.quantity from orderitems as oi
RIGHT OUTER JOIN products as p
on p.prod_id = oi.prod_id
order by oi.quantity;

5.编写一条 SOL语句,列出供应商(Vendors中的vend id )以及他们拥有的产品数量,包括没有产品的供应商。您将需要使用OUTER JOIN和COUNT()聚合函数来计算Products表中每个产品的产品数量。注意:vend id列出现在多个表中,因此每次引用它时,都需要对其进行完全限定。

select v.vend_id,count(p.prod_id) as total_offer
from vendors as v LEFT OUTER JOIN products as p ON v.vend_id = p.vend_id group by v.vend_id;

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

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

相关文章

爬虫 | 网易新闻热点数据的获取与保存

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目是一个简单的网络爬虫&#xff0c;用于从网易新闻的热点新闻列表中提取标题和对应的链接&#xff0c;并将提取到的数据保存到一个 CSV 文件中。 目录 一、技术栈 二、功能说明 三、注意事项 四、代码解析 1. 导入所需…

【C++进阶】RAII思想&智能指针

智能指针 一&#xff0c;为什么要用智能指针&#xff08;内存泄漏问题&#xff09;内存泄漏 二&#xff0c;智能指针的原理2.1 RAII思想2.2 C智能指针发展历史 三&#xff0c;更靠谱的shared_ptr3.1 引用计数3.2 循环引用3.3 定制删除器 四&#xff0c;总结 上一节我们在讲抛异…

PostgreSQL入门到实战-第二十九弹

PostgreSQL入门到实战 PostgreSQL中数据分组操作(四)官网地址PostgreSQL概述PostgreSQL中CUBE命令理论PostgreSQL中CUBE命令实战更新计划 PostgreSQL中数据分组操作(四) 如何使用PostgreSQL CUBE生成多个分组集 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不…

InternlM2

第一次作业 基础作业 进阶作业 1. hugging face下载 2. 部署 首先&#xff0c;从github上git clone仓库 https://github.com/InternLM/InternLM-XComposer.git然后里面的指引安装环境

【Golang学习笔记】从零开始搭建一个Web框架(二)

文章目录 模块化路由前缀树路由 前情提示&#xff1a; 【Golang学习笔记】从零开始搭建一个Web框架&#xff08;一&#xff09;-CSDN博客 模块化路由 路由在kilon.go文件中导致路由和引擎交织在一起&#xff0c;如果要实现路由功能的拓展增强&#xff0c;那将会非常麻烦&…

[尚硅谷flink] 检查点笔记

在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 文章目录 11.1 检查点11.1.1 检查点的保存1&#xff09;周期性的触发保存2&#xff09;保存的时间点3&#xff09;保存的具体流程 11.1.2 从检查点恢复状态11.1.3 检查点算法…

【python】 numpy 中常用随机数函数的使用和记忆(不易混淆)

文章目录 概述固定分布随机数&#xff08;只需指定形状的随机函数&#xff09;np.random.randomnp.random.randnp.random.randn 随机范围随机数&#xff08;需要指定范围和形状的随机函数&#xff09;np.random.randintnp.random.uniformnp.random.normalnp.random.poisson 代码…

乐写9612手写板实测故障

闲鱼上淘了二手的 ①需要驱动很强的usb口&#xff0c;老usb口会不识别&#xff0c;尤其是笔记本容易不识别&#xff0c;非常容易出现下面这种问题&#xff1a; ②需要microsoft2013以上的&#xff0c;兼容性做的比较差 ③由于可视化&#xff0c;导致数据线容易烧&#xff0c;…

超标量处理器设计:基于竞争的分支预测分支预测的更新

★ 继续学习体系结构的知识。 接着上一讲继续写 ★上一讲&#xff1a;超标量处理器设计&#xff1a;基于全局历史的分支预测-CSDN博客 ★上上一讲&#xff1a;超标量处理器设计&#xff1a;两位饱和计数器&基于局部历史的分支预测-CSDN博客 知识回顾&#xff1a; 基于局部…

策略模式【行为模式C++】

1.概述 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 策略模式通常应用于需要多种算法进行操作的场景&#xff0c;如排序、搜索、数据压缩等。在这些情况下&#x…

将公式用MathType转换导入LaTex的方法 Mathtype+laTex 混合使用 在mathtype中打latex代码编辑公式

关于LaTex和Word之间孰优孰劣的争论已经持续了很长时间&#xff0c;有些朋友在写论文时还会纠结是用Word好还是用LaTex好&#xff0c;其实他们两也是各有优势&#xff0c;LaTeX 与 Word 是两种不同类型的文本编辑处理系统。Latex是无格式的明文文档&#xff0c;格式保存在源文件…

dbeaver数据库语言编辑器设置jdbc驱动

打开 dbeaver 软件 数据库 -> 驱动管理器 以mysql为例 双击 MySQL -> 库 -> 添加工件 然后 打开maven组件库 官网 找到mysql驱动对应的maven工件地址 复制进去然后确认就行了 参考 大神博客

stm32f103c8t6hal库使用看门狗

STM32F103C8T6是一款性能强大的微控制器&#xff0c;它具有丰富的外设和功能&#xff0c;其中之一就是看门狗&#xff08;Watchdog&#xff09;。看门狗是一种重要的硬件设备&#xff0c;它可以在系统出现异常时自动重启系统&#xff0c;以保证系统的稳定运行。我们将详细介绍如…

001vscode为什么设置不了中文?

VSCode中文插件安装 在VSCode中设置中文的首要步骤是安装“Chinese (Simplified) Language Pack for Visual Studio Code”扩展插件。这一过程十分简单&#xff0c;只需打开VSCode&#xff0c;进入扩展市场&#xff0c;搜索“ Chinese (Simplified) Language Pack ”然后点击…

transformer

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个transformer模型pytorch程序,最后打印5个条件分别的影响力。 示例一 为了计算每个条件对一件事情发生的影响力&am…

会声会影2024全新视频剪辑软件

会声会影 (CyberLink PowerDirector) 是一款既强大又易于使用的视频编辑软件&#xff0c;具有众多功能和工具&#xff0c;专为用户设计制作高质量的视频剪辑和制作。无论您是一个新手或是一个有经验的电影制作者&#xff0c;会声会影都适合您的需要。 生活即电影 软件下载地址&…

JAVA面试八股文之数据库

MySQL面试题 MySQL 存储引擎架构了解吗&#xff1f;CHAR 和 VARCHAR 的区别是什么&#xff1f;索引是越多越好嘛&#xff1f;MySQL数据库中空值&#xff08;null&#xff09;和空字符串&#xff08;&#xff09;的区别&#xff1f;SQL 中 on 条件与 where 条件的区别&#xff1…

【设计模式】六大设计原则

设计原则 研究 23 种设计模式是困难的&#xff0c;甚至是没必要的六大设计原则零、单一职责原则开闭原则里氏代换原则依赖倒置原则接口隔离原则迪米特法则合成复用原则 研究 23 种设计模式是困难的&#xff0c;甚至是没必要的 设计模式有23种&#xff0c;我认为对普通人来说想…

Windows 关闭占用指定端口的进程

以下示例以443端口为例&#xff0c;具体哪个端口视自己情况而定 输入命令 # 输出的最后一列就是进程号pid netstat -ano | findstr "443" 找出占用443端口的进程号(pid)&#xff08;第二列是你本机的应用占用的端口&#xff0c;看第二列就行&#xff09;如下图&am…

音频变速python版

音频变速 如何能在不改变音频其他特点的情况下&#xff0c;只改变语速呢&#xff1f; 有几个python的库可以实现该功能&#xff0c;下面一一介绍。 pydub库 首先&#xff0c;确保安装了pydub和ffmpeg。 下面是一个简单的Python脚本&#xff0c;展示如何改变音频的播放速度&a…