【Mysql】多表查询、隐式内链接、显式内连接、左外连接、右外连接

多表查询
什么是多表查询
•DQL: 查询多张表,获取到需要的数据
•比如 我们要查询家电分类下 都有哪些商品,那么我们就需要查询分类与商品这两张表
数据准备

  1. 创建db3_2 数据库
-- 创建 db3_2 数据库,指定编码
CREATE DATABASE db3_2 CHARACTER SET utf8;
  1. 创建分类表与商品表
-- 分类表 (一方 主表)
CREATE TABLE category (cid VARCHAR(32) PRIMARY KEY ,cname VARCHAR(50)
);-- 商品表 (多方 从表)
CREATE TABLE products(pid VARCHAR(32) PRIMARY KEY ,pname VARCHAR(50),price INT,flag VARCHAR(2),      -- 是否上架标记为:1表示上架、0表示下架category_id VARCHAR(32),-- 添加外键约束FOREIGN KEY (category_id) REFERENCES category (cid)
);
  1. 插入数据
-- 分类数据
INSERT INTO category(cid,cname) VALUES('c001','家电');
INSERT INTO category(cid,cname) VALUES('c002','鞋服');
INSERT INTO category(cid,cname) VALUES('c003','化妆品');
INSERT INTO category(cid,cname) VALUES('c004','汽车');-- 商品数据
INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p001','小米电视机',5000,'1','c001');
INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p002','格力空调',3000,'1','c001');
INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p003','美的冰箱',4500,'1','c001');INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p004','篮球鞋',800,'1','c002');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p005','运动裤',200,'1','c002');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p006','T恤',300,'1','c002');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p007','冲锋衣',2000,'1','c002');INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p008','神仙水',800,'1','c003');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p009','大宝',200,'1','c003');

笛卡尔积
交叉连接查询,因为会产生笛卡尔积,所以 基本不会使用
1)语法格式
•SELECT 字段名 FROM 表1, 表2;

2)使用交叉连接查询 商品表与分类表
•SELECT * FROM category , products;

3)观察查询结果,产生了笛卡尔积 (得到的结果是无法使用的)

4)笛卡尔积
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

多表查询之内连接查询
内连接的特点: 通过指定的条件去匹配两张表中的数据, 匹配上就显示,匹配不上就不显示
比如通过: 从表的外键 = 主表的主键 方式去匹配
隐式内链接
form子句 后面直接写 多个表名 使用where指定连接条件的 这种连接方式是 隐式内连接.
使用where条件过滤无用的数据

语法格式
•SELECT 字段名 FROM 左表, 右表 WHERE 连接条件;

1)查询所有商品信息和对应的分类信息

-- 隐式内连接 
SELECT * FROM products,category WHERE category_id = cid;
  1. 查询商品表的商品名称 和 价格,以及商品的分类信息
-- 可以通过给表起别名的方式, 方便我们的查询(有提示)
SELECT p.`pname`,p.`price`,c.`cname`
FROM products p , category c WHERE p.`category_id` = c.`cid`;
  1. 查询 格力空调是属于哪一分类下的商品
-- 查询 格力空调是属于哪一分类下的商品 
SELECT p.`pname`,c.`cname` FROM products p , category c 
WHERE p.`category_id` = c.`cid` AND p.`pid` = '格力空调';

显式内连接
使用 inner join …on 这种方式, 就是显式内连接
语法格式
•SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件
(inner可以省略)

1)查询所有商品信息和对应的分类信息

-- 显式内连接查询
SELECT * FROM products p INNER JOIN category c ON p.category_id = c.cid;
  1. 查询鞋服分类下,价格大于500的商品名称和价格
-- 查询鞋服分类下,价格大于500的商品名称和价格-- 我们需要确定的几件事
-- 1.查询几张表 products & category
-- 2.表的连接条件 从表.外键 = 主表的主键
-- 3.查询的条件 cname = '鞋服' and price > 500
-- 4.要查询的字段 pname price SELECTp.pname,p.price
FROM products p INNER JOIN category c ON p.category_id = c.cid
WHERE p.price > 500 AND cname = '鞋服';

多表查询之外连接查询
左外连接
左外连接 , 使用 LEFT OUTER JOIN , OUTER 可以省略
左外连接的特点:
•以左表为基准, 匹配右边表中的数据,如果匹配的上,就展示匹配到的数据
•如果匹配不到, 左表中的数据正常展示, 右边的展示为null.
语法格式

SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件

SQL实现

-- 左外连接查询
SELECT * FROM category c LEFT JOIN products p  ON c.`cid`= p.`category_id`;

左外连接, 查询每个分类下的商品个数

-- 查询每个分类下的商品个数
/*1.连接条件: 主表.主键 = 从表.外键2.查询条件: 每个分类 需要分组3.要查询的字段: 分类名称, 分类下商品个数
*/
SELECT c.`cname` AS '分类名称',COUNT(p.`pid`) AS '商品个数' 
FROM category c LEFT JOIN products p ON c.`cid` = p.`category_id`
GROUP BY c.`cname`;

右外连接
右外连接 , 使用 RIGHT OUTER JOIN , OUTER 可以省略
右外连接的特点
•以右表为基准,匹配左边表中的数据,如果能匹配到,展示匹配到的数据。
•如果匹配不到,右表中的数据正常展示, 左边展示为null。

语法格式

SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件

-- 右外连接查询
SELECT * FROM products p RIGHT JOIN category c ON p.`category_id` = c.`cid`;

各种连接方式的总结

•内连接: inner join , 只获取两张表中 交集部分的数据。
•左外连接: left join , 以左表为基准 ,查询左表的所有数据, 以及与右表有交集的部分。
•右外连接: right join , 以右表为基准,查询右表的所有的数据,以及与左表有交集的部分。

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

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

相关文章

美力AI如何改变美妆行业游戏规则

人工智能 (AI) 正在席卷全球,彻底改变我们所知的行业。美容和时尚行业是深受人工智能技术影响的行业之一。人工智能(包括生成式人工智能)是美容和时尚行业激发信心和产品发现的强大工具,品牌可以利用这项技术为客户激发灵感。 凭…

坑——python的redis库的decode_responses设置

python的redis库查询返回的值默认是返回字节串,可以在redis.Redis()方法中通过设置decode_responses参数,让返回值直接是字符串; 查询返回字节串是因为Redis()方法中decode_responses默认值是False: 设置decode_responses为True就…

【从零开始实现联邦学习】

1. 环境配置如下 python3.7pip install torchpip install torchvision 2. 代码如下 原书的代码存在一点bug,现已被作者修复 Client端代码如下 import torch.utils.dataclass Client(object):def __init__(self,conf,model,train_dataset,id1):self.conf conf …

为什么不再推荐使用 VRTK 4?

引言 VRTK (Virtual Reality Toolkit) 发布于2016年,初期受到了广大开发者的欢迎并被广泛采用。但是随着 VR 开发生态的发展,这款工具逐渐失去了最初的光芒。本文试图通过几个维度的分析,解释为什么目前不推荐使用 VRTK 进行开发的理由&…

Eigen中关于四元数的常用操作

四元数(Quaternion)是一种数学工具,广泛用于计算机图形学、机器人学和物理模拟中,特别适合处理三维旋转。Eigen库是一个高性能的C数学库,提供了丰富的线性代数功能,其中就包括对四元数的支持。 1. 为什么选…

mklink

文章目录 mklink概述笔记备注END mklink 概述 看一个开源工程中,有一个.bat脚本,用来建立符号链接。 用的是mklink, 试试,比快捷方式好用。 笔记 测试环境 win10x64-22H2 准备测试用的文件 D:\my_tmp\dir1\readme.txt mklink的命令行帮助…

Windows平台使用S3Browser连接兼容的对象存储

本文记录了在Windows平台使用S3Browser连接兼容的对象存储的过程 一、安装S3Browser 1、下载 S3Browser官网:https://s3browser.com/ 直接下载:https://s3browser.com/download/s3browser-11-6-7.exe 2、安装 3、同意授权后确定安装目录 4、勾选立即…

VUE的底层原理分析vue框架的来龙去脉,和技术要点及难点和应用场景,小白的进阶之道

Vue.js 的底层原理分析 一、Vue.js 的来龙去脉 1. Vue.js 的诞生背景 Vue.js 是一个由尤雨溪(Evan You)开发的前端框架。最初的动机是为了简化开发人员在构建用户界面时的工作。尤雨溪之前在谷歌工作,参与了 AngularJS 项目,他…

第7章 Redis的噩梦:阻塞

文章目录 前言1 发现阻塞2.内在原因2.1API或数据结构使用不合理2.1.1如何发现慢查询2.1.2.如何发现大对象 2.2 CPU饱和2.3 持久化阻塞2.3.1fork阻塞2.3.2.AOF刷盘阻塞2.3.3.HugePage写操作阻塞 3 外在原因3.1CPU竞争3.2 内存交换 前言 Redis是典型的单线程架构,所有…

Studying-代码随想录训练营day23| 39.组合总和、40.组合总和II、131.分割回文串

第23天,回溯part02,回溯两个题型组合,切割(ง •_•)ง💪 目录 39.组合总和 40.组合总和II 131.分割回文串 总结 39.组合总和 文档讲解:代码随想录组合总和 视频讲解:手撕组合总和 题目:…

【Qt】信号和槽机制

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

WINDOWS+PHP+Mysql+Apache环境中部署SQLi-Labs、XSS-Labs、UPload-Labs、DVWA、pikachu等靶场环境

web渗透测试学习&#xff0c;需要自己搭建一些靶场&#xff0c;本人主要介绍在WINDOWSPHPMysqlApache环境中部署SQLi-Labs、XSS-Labs、UPload-Labs、DVWA、pikachu等靶场环境。以下是靶场代码下载的链接&#xff1a; pikachu靶场代码 链接&#xff1a;https://pan.baidu.com/s…

废品回收小程序开发:提高废品回收效率

当下&#xff0c;废品回收已经成为了热门行业&#xff0c;家家户户几乎都会进行废品回收&#xff0c;无论是废纸盒还是塑料瓶等&#xff0c;都会送到废品回收站。不过&#xff0c;随着互联网的快速发展&#xff0c;传统的回收模式出现了大量的局限性&#xff0c;已经不能满足大…

探索Android架构设计

Android 应用架构设计探索&#xff1a;MVC、MVP、MVVM和组件化 MVC、MVP和MVVM是常见的三种架构设计模式&#xff0c;当前MVP和MVVM的使用相对比较广泛&#xff0c;当然MVC也并没有过时之说。而所谓的组件化就是指将应用根据业务需求划分成各个模块来进行开发&#xff0c;每个…

CPU通过网络将IP camera的RTSP流(H.264编码或是H.265编码)拉回, 交给GPU解码并显示的处理流程

这个流程涉及到从IP摄像头获取视频流&#xff08;通过RTSP协议&#xff09;&#xff0c;然后将流传输给GPU进行解码和显示的过程。详细的流程描述如下&#xff1a; 1. 获取视频流: - **IP摄像头**: 摄像头通过RTSP&#xff08;Real-Time Streaming Protocol&#xff09;将…

领夹麦克风哪个品牌音质最好?主播一般用什么麦克风?麦克风推荐

在这个充满创意与表达的时代&#xff0c;无线领夹麦克风以其独特的魅力&#xff0c;成为了声音创作者们的得力助手。它小巧便携&#xff0c;功能强大&#xff0c;无论是日常拍摄、直播互动还是专业演出&#xff0c;都能轻松应对&#xff0c;让你的声音随时随地清晰传递。那么&a…

ubuntu 22.04下编译安装OpenBLAS记录

编译opencv4.9选择了cvDNN模块&#xff0c;进一步选择openBLAS作为DNN算法的线性代数库。因此编译安装了openBLAS库&#xff0c;特此记录&#xff0c;以备不时查阅。 必须以root身份编译安装&#xff0c;如果是其它用户&#xff0c;请加上sudo。 #mkdir opt //与/usr并行的根…

# Kafka_深入探秘者(10):kafka 监控

Kafka_深入探秘者&#xff08;10&#xff09;&#xff1a;kafka 监控 一、kafka JMX 1、JMX &#xff1a;全称 Java Managent Extension 在实现 Kafka 监控系统的过程中&#xff0c;首先我们要知道监控的数据从哪来&#xff0c;Kafka 自身提供的监控指标(包括 broker 和主题的…

vue中批量下载图片只能下载一张的解决方案

使用iframe下载 let addressList [https:1,https:2];// 使用iframefor (let i 0; i < addressList.length; i) {const iframe document.createElement("iframe");iframe.style.display "none"; // 防止影响页面iframe.style.height 0; // 防止影…

管理的核心是管人,管人的核心就是这3条,看懂的是高手

管理的核心是管人&#xff0c;管人的核心就是这3条&#xff0c;看懂的是高手 一&#xff1a;管欲 每个人都有欲望&#xff0c;无可厚非。管理者的任务就是利用欲望&#xff0c;管理欲望&#xff0c;通过欲望来达到管人的目的。 最需要管理的就是以下两种&#xff1a; 1、金…