MySQl基础入门⑬.5
创建多表连接查询
表准备
CREATE TABLE 员工信息 (员工号 INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,姓名 VARCHAR(50) NOT NULL,性别 ENUM('男', '女') NOT NULL,出生日期 DATE NOT NULL,部门 VARCHAR(50) NOT NULL,手机号码 VARCHAR(20) NOT NULL,-- 根据数据库不同,可能需要为手机号码字段添加UNIQUE约束以确保唯一性UNIQUE KEY `unique_phone` (`手机号码`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
插入数据
INSERT INTO 员工信息 (姓名, 性别, 出生日期, 部门, 手机号码) VALUES
('张三', '男', '1985-06-12', '技术部', '13800138001'),
('李四', '女', '1990-11-7', '市场部', '13912345678'),
('王五', '男', '1988-09-22', '人力资源部', '13711112222'),
('赵六', '女', '1992-04-15', '财务部', '13600001111'),
('陈七', '男', '1995-12-25', '技术部', '13522223333'),
('周八', '女', '1987-07-18', '市场部', '13433334444'),
('吴九', '男', '1991-08-28', '销售部', '13344445555'),
('郑十', '女', '1986-03-10', '研发部', '13255556666'),
('钱十一', '男', '1993-05-20', '人力资源部', '13166667777'),
('孙十二', '女', '1989-12-2', '客服部', '13077778888'),
('朱十三', '男', '1994-07-13', '财务部', '12988889999'),
('马十四', '女', '1990-09-25', '技术部', '12899990000'),
('唐十五', '男', '1987-02-19', '市场部', '12700001112'),
('曹十六', '女', '1992-11-11', '销售部', '12611112223');
CREATE TABLE 销售表 (销售员ID INT(11) NOT NULL,-- 假设销售员ID为外键,引用员工信息表的员工号FOREIGN KEY (销售员ID) REFERENCES 员工信息(员工号),销售业绩金额 DECIMAL(10, 2) NOT NULL,部门 VARCHAR(50) NOT NULL,-- 可以根据需要添加其他字段,如销售日期、产品信息等销售日期 DATE,产品名称 VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
插入数据
INSERT INTO 销售表 (销售员ID, 销售业绩金额, 部门, 销售日期, 产品名称) VALUES
(1, 8500.50, '技术部', '2023-04-01', '全麦面包'),
(2, 1200.75, '市场部', '2023-04-02', '低脂牛奶'),
(3, 4500.00, '人力资源部', '2023-04-03', '红富士苹果'),
(4, 9800.25, '财务部', '2023-04-04', '新鲜鸡蛋'),
(5, 7200.10, '技术部', '2023-04-05', '即食燕麦片'),
(6, 5500.60, '市场部', '2023-04-06', '巧克力棒'),
(7, 15000.00, '销售部', '2023-04-07', '混合坚果'),
(8, 6800.30, '研发部', '2023-04-08', '绿茶饮料'),
(9, 3200.90, '人力资源部', '2023-04-09', '冷冻海鲜拼盘'),
(10, 8000.45, '客服部', '2023-04-10', '意大利面'),
(11, 7000.80, '财务部', '2023-04-11', '橄榄油'),
(12, 5000.20, '技术部', '2023-04-12', '黑咖啡豆'),
(13, 9500.15, '市场部', '2023-04-13', '酸奶'),
(14, 4000.55, '销售部', '2023-04-14', '薯片');
CREATE TABLE 进货表 (进货记录ID INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,-- 假设收货人为公司员工,因此收货人ID为外键,引用员工信息表的员工号收货人ID INT(11) NOT NULL,FOREIGN KEY (收货人ID) REFERENCES 员工信息(员工号),产品名称 VARCHAR(20) NOT NULL,货号 VARCHAR(50) NOT NULL,总数量 INT(11) NOT NULL,总金额 DECIMAL(10, 2) NOT NULL,-- 可以根据需要添加其他字段,如进货日期、供应商信息等进货日期 DATE,供应商名称 VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
插入数据
INSERT INTO 进货表 (收货人ID, 货号, 总数量, 总金额, 进货日期, 供应商名称) VALUES
(1, 'GR001', 200, 8500.00, '2023-04-01', '绿叶食品有限公司'),
(2, 'DR002', 150, 4500.00, '2023-04-02', '大洋乳制品厂'),
(3, 'FR003', 300, 9800.00, '2023-04-03', '田园鲜果农场'),
(4, 'EG004', 500, 7200.00, '2023-04-04', '金鸡饲养场'),
(5, 'MT005', 250, 5500.00, '2023-04-05', '美味甜品工坊'),
(6, 'CH006', 180, 6800.30, '2023-04-06', '可可巧克力工厂'),
(7, 'NM007', 120, 15000.00, '2023-04-07', '坚果世界'),
(8, 'TE008', 220, 9500.15, '2023-04-08', '茶源饮品集团'),
(9, 'FS009', 350, 4000.55, '2023-04-09', '海之鲜冷冻食品'),
(10, 'SP010', 280, 8000.45, '2023-04-10', '意面之家'),
(11, 'OL011', 160, 7000.80, '2023-04-11', '橄榄庄园'),
(12, 'CF012', 200, 5000.20, '2023-04-12', '咖啡原产地'),
(13, 'YD013', 190, 9800.25, '2023-04-13', '酸奶乐园'),
(14, 'CP014', 230, 4500.90, '2023-04-14', '脆皮薯片厂');
1.交叉连接查询
在MySQL中,交叉连接(Cross Join)又称为笛卡尔积,它返回两个表中所有行的组合。如果一个表有m行,另一个表有n行,那么交叉连接会产生m*n行的结果集。这种类型的查询并不常用,除非你确实需要所有可能的组合。
格式一
select 字段名 from 表1 cross join 表2;案例:select * from 员工信息 cross join 销售表;
省略写法:select 字段名 from 表1,表2;
2.内连接查询
内连接(INNER JOIN)是关系型数据库中常用的查询方式之一,它用来返回两个或多个表中满足连接条件的所有记录。内连接基于一个共同列(或多个共同列),只显示那些在所有参与连接的表中都匹配的行。
格式一
select 字段名 from 表名1 join 表名2 ON 表名1.关系字段=表名2.关系字段;案例:select 姓名,销售业绩金额 from 员工信息 join 销售表 on 员工信息.员工号=销售表.销售员ID;JOIN关键字指定了内连接操作。
FROM 员工信息指定了查询的第一个表(左表)。
INNER JOIN 销售表指定了查询的第二个表(右表)。
ON 员工信息.员工号=销售表.销售员ID;是连接条件,表示只有当员工信息表的员工号与销售表的销售员ID相等时,才会从这两个表中选择相应的行进行匹配。
执行这个查询后,结果将只包含那些在员工信息表和销售表中都有对应销售业绩金额的记录,显示员工姓名和他们的销售额。
外连接(Outer Join)在数据库查询中用于返回两个或更多表中匹配的行,以及左表或右表中没有匹配项的行。外连接有三种主要类型:左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。在MySQL中,不直接支持FULL OUTER JOIN,但可以通过UNION或其他方法模拟。
左外连接(LEFT JOIN)
左外连接会返回左表(LEFT JOIN关键字左边的表)的所有记录,即使右表中没有匹配。如果右表中没有匹配,则结果集中右表的部分将为NULL。
示例:假设我们想列出所有员工及其销售业绩,包括那些没有销售记录的员工。
SELECT 员工信息.员工号, 员工信息.姓名, 销售表.销售业绩金额
FROM 员工信息
LEFT JOIN 销售表 ON 员工信息.员工号 = 销售表.销售员ID;
右外连接(RIGHT JOIN)
右外连接与左外连接相反,它会返回右表(RIGHT JOIN关键字右边的表)的所有记录,即使左表中没有匹配。如果左表中没有匹配,则结果集中左表的部分将为NULL。
示例:假设我们想列出所有销售记录及其对应的员工信息,包括那些员工信息可能不存在的销售记录(这种情况较少见,但理论上可以这样查询)。
SELECT 员工信息.员工号, 员工信息.姓名, 销售表.销售业绩金额
FROM 员工信息
RIGHT JOIN 销售表 ON 员工信息.员工号 = 销售表.销售员ID;
全外连接(模拟)
MySQL不直接支持FULL OUTER JOIN,但可以通过UNION来模拟,以合并左外连接和右外连接的结果,从而获取两边都不缺失的记录。
示例:展示所有员工和销售记录的组合,无论是否有匹配。
(SELECT 员工信息.员工号, 员工信息.姓名, 销售表.销售业绩金额FROM 员工信息LEFT JOIN 销售表 ON 员工信息.员工号 = 销售表.销售员ID
) UNION (SELECT 员工信息.员工号, 员工信息.姓名, 销售表.销售业绩金额FROM 员工信息RIGHT JOIN 销售表 ON 员工信息.员工号 = 销售表.销售员ID
) ORDER BY 员工号;
注意:最后一个示例中的ORDER BY语句是为了排序结果,以便查看更清晰。在实际应用中,根据需求决定是否需要排序。
做前须知:
IFNULL()的用法
select 收货人ID,ifnull(总数量,0) from 进货表;
在MySQL中,正确的函数是IFNULL(),但实际上正确的函数名是IFNULL()应为IFNULL()。IFNULL(expression, value_if_null)函数用于判断第一个表达式expression是否为NULL,如果是NULL,则返回第二个参数value_if_null,否则返回第一个表达式的值。这是一个条件函数,用于处理NULL值的简单替换场景。
作用:
IFNULL()函数在SQL中的作用主要是处理NULL值。当我们在查询数据库时,有时会遇到某些字段的值为NULL,这可能会影响到后续的数据处理或展示。IFNULL()函数允许我们为这些NULL值提供一个默认的替换值。
练习题
1.列出所有员工的姓名以及他们销售的商品名称,对于没有销售记录的员工,商品名称显示为"未销售"。
2.编写一个SQL查询,使用右外连接(RIGHT JOIN)来整合“进货表”和“员工信息表”,确保所有员工都被列出,无论他们是否有关联的进货记录。查询应展示员工的姓名以及他们负责的商品货号(如果有的话)。对于没有进货记录的员工,货号显示为NULL。
3.列出每个员工的姓名以及他们销售的任意一款产品名称,如果员工没有销售记录,则显示"无销售记录"。
4.展示每种进货的商品名称及其对应的收货员工姓名,如果商品尚未被指派收货员工,则显示"待指派"。
相关文章:

MySQl基础入门⑬.5
创建多表连接查询 表准备 CREATE TABLE 员工信息 (员工号 INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,姓名 VARCHAR(50) NOT NULL,性别 ENUM(男, 女) NOT NULL,出生日期 DATE NOT NULL,部门 VARCHAR(50) NOT NULL,手机号码 VARCHAR(20) NOT NULL,-- 根据数据库不同&#x…...

【遂愿赠书 - 1期】:安恒“网安三剑客”-大模型时代下的网络安全实战指南
文章目录 一、图书背景二、网安实战宝典2.1《内网渗透技术》2.2《渗透测试技术》2.3《Web应用安全》 三、校企合作,产学研结合四、大模型时代的数字安全五、 网络安全无小事 一、图书背景 大模型风潮已掀起,各大巨头争相入局,从ChatGPT到Sor…...

【C++入门到精通】C++ thread线程库 [ C++入门 ]
阅读导航 引言一、thread类的简单介绍二、thread类的用法1. 创建线程2. 使用 Lambda 表达式3. 传递参数给线程4. 线程的 join 和 detach5. 检查线程是否可 join6. 线程的 ID7. 线程的移动语义8. 线程的析构🚨 注意事项 三、线程函数参数温馨提示 引言 C thread线程…...

CMakeFile.txt通过sysroot方式后生成makefile报错
报错信息如下: -- The C compiler identification is unknown -- The CXX compiler identification is unknown -- Check for working C compiler: /home/xj/asm/host/bin/aarch64-buildroot-linux-gnu-gcc -- Check for working C compiler: /home/xj/asm/host/bi…...

Python 将Word、Excel、PDF、PPT文档转为OFD文档
OFD(Open Fixed-layout Document )是我国自主制定的一种开放版式文件格式标准。OFD文档具有不易被篡改、格式独立、版式固定等特点,目前常用于政府公文、金融、电子发票等领域。 如果想要通过Python将Office文档(如Word、Excel或…...

【java11】java11新特性之局部变量类型推断升级
局部变量类型推断是java10开始新增的新特性,java11中对局部变量推断进行了升级,var支持添加注解的语法格式,Java10中是无法实现的,在Java11中加入了这样的语法。 Lambda中使用var修饰符 Java11允许在lambda表达式中使用var&…...

遥感卫星影像处理流程
当空中的遥感卫星获取了地球数字影像,并传回地面,是否工作就结束了?答案显然是否定的,相反,这正是遥感数字图像处理工作的开始。 遥感数字图像(Digital image,后简称“遥感影像”)是…...

【AR开发-开源框架】使用Sceneform-EQR快速开发AR应用,当前接入了AREngine、ORB-SLAM,可快速地适配不同的安卓设备
Sceneform-EQR Sceneform 概览 Sceneform是一个3D框架,具有基于物理的渲染器,针对移动设备进行了优化,使您可以轻松构建增强现实应用程序,而无需OpenGL。 借助 Sceneform,您可以轻松地在 AR 应用和非 AR 应用中渲染…...

学生信息管理系统C++
设计目的 使学生进一步理解和掌握课堂上所学的面向对象C编程知识,巩固和加深学生对C面向对象课程的基本知识的理解和掌握。掌握C面向对象编程和程序调试的基本技能,学会利用C语言进行基本的软件设计,着重提高运用C面向对象语言解决实际问题的…...

前端开发三大主流框架解析
Web前端三大主流框架分别是Angular、React和Vue.js。以下是《优联前端》关于这三个框架解析介绍: Angular: 来源与开发者:Angular是由Google开发的前端框架。功能特点:Angular是一个完整的框架,包括了数据绑定、组件化…...

【2.文件和目录相关(下)】
一、查看文件内容命令 1、cat 文件名:用于显示文件内容,比如 cat test.c。 (1)cat -b test.c 表示加行号显示文件内容。 (2)cat -s test.c 表示多个空行合并成一个空行显示。 2、nl 文件名:…...

【C语言】结构体与内存对齐
前言 在本篇博客,我将介绍结构体类型,结构体变量的创建和初始化,重点介绍结构中存在的内存对齐。 结构变量 结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 在理解结构的时候,我们…...

【机器学习】之 kmean算法原理及实现
基本概念 K-Means 聚类算法的目标是将数据集分成 ( K ) 个簇,使得每个簇内的数据点尽可能相似,而簇与簇之间尽可能不同。这种相似度是通过计算数据点与簇中心的距离来衡量的。 算法步骤 选择簇的数量 ( K ):随机选择 ( K ) 个数据点作为初…...

国产高边驱动HD70202Q替换英飞凌BTS7040-2
高边驱动也称之为高边开关,主要用于车内负载的驱动与开关,并对负载进行保护和诊断。高边驱动以高可靠性、灵活性、低功耗以及小型轻量等特点,正逐渐替代传统的保险丝、继电器等方案。 RAMSUN提供的HD70202Q车规级双通道智能高边驱动的输入控…...

2024年06月在线IDE流行度最新排名
点击查看最新在线IDE流行度最新排名(每月更新) 2024年06月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…...

顺序表和链表基础操作的复习
顺序表 #include<iostream> using namespace std; 静态 //#define MAX_SIZE 50 //typedef int ElemType; //typedef struct //{ // int length; // ElemType nums[MAX_SIZE]; //}Sqlist; //动态: #define Init_SIZE 50 typedef int ElemType; typedef struct {int lengt…...

[C#]winform部署官方yolov10目标检测的onnx模型
【框架地址】 https://github.com/THU-MIG/yolov10 【算法介绍】 今天为大家介绍的是 YOLOv10,这是由清华大学研究团队最新提出的,同样遵循 YOLO 系列设计原则,致力于打造实时端到端的高性能目标检测器。 方法 创新 双标签分配策略 众所…...

hmcode硬件编程1
在/home/golemon/hmcode/applications/sample/wifi-iot/app内创建文件夹。 这里创建了d_6_3文件夹 . ├── BUILD.gn ├── d_6_3 │ ├── BUILD.gn │ └── lab.c ├── demolink │ ├── BUILD.gn │ └── helloworld.c ├── iothardware │ ├── B…...

[C++][CMake] set_target_properties called with incorrect number of arguments
1 简介 这篇文章将探讨了在使用CMake构建C项目时,调用set_target_properties函数时参数数量不正确所引发的问题。 2 错误案例 以下为可能发生错误的案例 include_directories (${CMAKE_SOURCE_DIR}/common) find_package(Threads)add_library (libusbmuxd SHARE…...

AdamW算法
AdamW算法是优化算法Adam的一个变体,它在深度学习中广泛应用。AdamW的主要改进在于它正则化方法的改变,即通过权重衰减(weight decay)而不是L2正则化,来控制模型参数的大小,从而提升了训练的稳定性和效果。…...

【c++进阶(二)】STL之string类的模拟实现
💓博主CSDN主页:Am心若依旧💓 ⏩专栏分类c从入门到精通⏪ 🚚代码仓库:青酒余成🚚 🌹关注我🫵带你学习更多c 🔝🔝 1.前言 本章重点 本章主要介绍一些关键接口的模拟实现ÿ…...

PHPStudy(xp 小皮)V8.1.1 通过cmd进入MySQL命令行模式
PHPStudy是一个PHP开发环境集成包,可用在本地电脑或者服务器上,该程序包集成最新的PHP/MySql/Apache/Nginx/Redis/FTP/Composer,一次性安装,无须配置即可使用。MySQL MySQL是一个关系型数据库管理系统,由瑞典 MySQL A…...

php反序列化初步了解
一、定义 序列化(串行化):将变量转换为可保存或传输的字符串的过程(通常是字节流、JSON、XML格式) 反序列比(反串行化):把这个字符串再转化成原始数据结构或对象(原来的…...

Windows系统电脑本地部署AI音乐创作工具并实现无公网IP远程使用
文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统电脑上快速本地部署一个文字生成音乐的AI创作工具MusicGPT,并结合cpolar内网穿透工具实现随时随地远程访问使用。 MusicG…...

玩转Linux进度条
准备工作: 一.关于缓冲区 首先,咱们先来一段有意思的代码: #include<stdio.h> #include<unistd.h> int main() {printf("you can see me");sleep(5);} 你可以在你的本地运行一下,这里我告诉大家运行结果…...

真国色码上赞,科技流量双剑合璧,商家获客新纪元开启
在数字化浪潮汹涌的今天,真国色研发团队依托红玉房网络科技公司的雄厚实力,凭借科技领先的核心竞争力,推出了创新性的商家曝光引流工具——码上赞。这款工具借助微信支付与视频号已有功能,为实体商家提供了一种全新的引流获客方式,实现了科技与商业的完美融合。 科技领先,流量黑…...

C++:特殊类设计和四种类型转换
一、特殊类设计 1.1 不能被拷贝的类 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98: 1、将拷贝构造函数与赋值运算符重载只…...

(南京观海微电子)——屏幕材质及优缺点对比
LED/LCD LCD(Liquid Crystal Ddisplay)即“液晶显示器”,由两块偏光镜、两块薄膜晶体管以及彩色滤光片、光源(荧光灯)、显示面板组成的成像元器件。 LED(Light Emitting Diode)即“发光二极管…...

uniapp uni.showModal 出现点击没有反应
uni.showModal 里面有好些参数 点击后不弹出 是因为 出现了 null 或者undifind 字符 特别是content 里面 title: 提示, cancelColor: #000000, editable: true,//是否显示输入框 content: item.text?item.te…...

Vue3-VueRouter
客户端 vs. 服务端路由 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果。当我们在一个传统的服务端渲染的 web 应用中点击一个链接时,浏览器会从服务端获得全新的 HTML,然后重新加载整个页面。 然而,在单页面应用中&a…...