【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

news2024/9/24 13:15:42

🎊专栏【MySQL】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【如愿】
大一同学小吉,欢迎并且感谢大家指出我的问题🥰

文章目录

  • 🍔多表查询
    • ⭐多表关系
      • 🎈一对多(多对一)
        • 🏀实现
      • 🎈多对多
        • 🏀实现
        • 🏀以图形化的方式来表示
      • 🎈一对一
        • 🏀实现:
        • 🏀以图形化的方式展示
    • ⭐多表查询语法
      • 🎈单表查询
      • 🎈多表查询
        • 🏀我们发现,最终的结果有16条,但是是为什么呢
      • 🏳️‍🌈笛卡儿积
        • 🏀消除无效的笛卡儿积
    • ⭐内连接
      • 🎈隐式内连接
      • 🎈显示内连接
    • ⭐外连接
      • 🎈左外连接
      • 🎈右外连接
    • ⭐自连接
    • 🌺联合查询
      • 🎈union all
      • 🎈union
    • 🌺子查询
      • 🎄标量子查询
      • 🎄列子查询
      • 🎄行子查询
      • 🎄表子查询

在这里插入图片描述

🍔多表查询

⭐多表关系

在项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系,基本分为以下三种

  • 一对多(多对一)
  • 多对多
  • 一对一

🎈一对多(多对一)

案例:部门和员工之间的关系
关系:一个部门对于多个员工,一个员工对应一个部门

🏀实现

的一方建立外键,指向的一方的主键
在这里插入图片描述

🎈多对多

案例:学生与课程之间的关系
关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择

🏀实现

建立第三张中间表,中间表至少包含两个外键分别关联两方主键
在这里插入图片描述
🏳️‍🌈创建两个表并且插入数据

create table student(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    no varchar(10) comment '学号'
) comment '学生表';

insert into student values (null,'小吉','123'),(null,'fufu','123'),(null,'御坂美琴','123'),(null,'海绵宝宝','123');

在这里插入图片描述

create table course(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '课程名称'
) comment '课程表';

insert into course values (null,'java'),(null,'php'),(null,'mysql'),(null,'c嘎嘎');

在这里插入图片描述

🏳️‍🌈创建第三个表
通过第三个表来维护他们之间的关系

create table student_course(
    id int auto_increment comment '主键' primary key,
    studentid int not null comment '学生ID',
    courseid  int not null comment '课程ID',
    constraint fk_courseid foreign key (courseid) references course(id),
    constraint fk_studentid foreign key (studentid) references course(id)
)comment '学生课程之间表';

insert into student_course values (null,1,1),(null,1,2),(null,1,3),(null,2,2),(null,2,3),(null,3,4);

在这里插入图片描述

🏀以图形化的方式来表示

在这里插入图片描述

🎈一对一

案例:用户与用户详情的关系
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率

🏀实现:

在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique)

在这里插入图片描述
先建立表

create table tb_user(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    age int comment '年龄',
    gender char(1) comment '1: 男 , 2:女 ',
    phone char(11) comment '手机号'
) comment '用户基本信息表';

在这里插入图片描述

先建立表

create table tb_user_edu(
    id int auto_increment primary key comment '主键ID',
    degree varchar(20) comment '学历',
    major varchar(20) comment '专业',
    primaryschool varchar(50) comment '小学',
    middleschool varchar(50) comment '中学',
    university varchar(50) comment '大学',
    userid int unique comment '用户ID',
    constraint fk_userid foreign key (userid) references tb_user(id)
)comment '用户教育信息表';

在这里插入图片描述

然后向表中插入数据

insert into tb_user(id, name, age, gender, phone) values
        (null,'小吉','1','2','3'),
        (null,'小吉','1','2','3'),
        (null,'小吉','1','2','3'),
        (null,'小吉','1','2','3');


insert into tb_user_edu(id, degree, major, primaryschool, middleschool, university, userid) values
         (null,'博士','计算机','1','1','哔哩哔哩大学',1),
         (null,'博士','计算机','1','1','哔哩哔哩大学',2),
         (null,'博士','计算机','1','1','哔哩哔哩大学',3),
         (null,'博士','计算机','1','1','哔哩哔哩大学',4);

一条userid就对应一个用户的基本信息

在这里插入图片描述

🏀以图形化的方式展示

在这里插入图片描述

⭐多表查询语法

select * from1,表2,……;

🎈单表查询

在这里插入图片描述

🎈多表查询

在这里插入图片描述

🏀我们发现,最终的结果有16条,但是是为什么呢

在这里插入图片描述
因为44=16
course中有4条,student中有4条,44=16

这种现象称为笛卡儿积

🏳️‍🌈笛卡儿积

是指在数学中,集合A和集合B的所有的组成情况
在这里插入图片描述
当前就是两张表所有的组成情况
但是在设计开发中,我们不需要这么多的情况,我们需要消除无效的情况

🏀消除无效的笛卡儿积

select * from course ,student where course.id=student.id;

在这里插入图片描述

⭐内连接

在这里插入图片描述

🎈隐式内连接

select 字段列表 from1,表2 where 条件……;

查询学生的姓名以及关联的课程

select student.name,course.name from student,course where student.id=course.id;

在这里插入图片描述

🎈显示内连接

select 字段列表 from1 (inner) join2 on 连接条件……;

查询学生的姓名以及关联的课程

select student.name,course.name from student inner join  course on student.id=course.id;

在这里插入图片描述

⭐外连接

🎈左外连接

在这里插入图片描述

🤖相当于查询左表的所有数据 包含 左表和右表交集部分的数据

select 字段列表 from1 left (outer) join2 on 条件……;

会查询到左表的所有数据

在这里插入图片描述
左表
在这里插入图片描述

🎈右外连接

在这里插入图片描述

🤖相当于查询右表的所有数据 包含 左表和右表交集部分的数据

select 字段列表 from1 right (outer) join2 on 条件……;

会查询到右表的所有数据

在这里插入图片描述

⭐自连接

就是在同一张表中进行查询
需要把一张表看作两张表

自连接必须起别名

在这里插入图片描述
原来的表
在这里插入图片描述

🌺联合查询

对于联合查询(union),就是把多次查询的结果合并起来,形成一个新的查询结果集

查询到的多张表的列数要保持一致,而且字段列表也要保持一致

select 字段列表 from 表A……
union (all)
select 字段列表 from 表B……;

🎈union all

合并查询到的两个表,不进行查重

🎈union

合并查询到的两个表,进行查重

在这里插入图片描述
这里我们发现,“鹿杖客”出现了两次
那么我们可以去掉all来去重
在这里插入图片描述

🌺子查询

SQL语句中嵌套select语句,称为嵌套查询,又称为子查询

select * from t1 where column1 = ( select column1 from t2 );

子查询的外部语句可以是insert update delete selete的任何一个

🏳️‍🌈根据查询结果不同,分为

查询方式查询结果
标量子查询子查询结果为单个值
列子查询子查询结果为一列
行子查询子查询结果为一行
表子查询子查询结果为多行多列
🏳️‍🌈根据子查询位置,分为where之后,from之后,select之后

🎄标量子查询

使用操作符 = > < >= <=
查询结果返回的是单个值这种最简单的方式
在这里插入图片描述

🎄列子查询

子查询返回的是一列(可以是多行)
常用操作符:in,not in,any,some,all

操作符描述
in在指定的集合范围之内,多选一
not in不在指定的集合范围之内
any子查询返回列表中,有任意一个满足即可
some与any等同,使用some的地方都可以使用any
all子查询返回列表的所有值都必须满足

在这里插入图片描述
在这里插入图片描述

🎄行子查询

子查询返回的是一行(可以是多列)
常用操作符:= <> in ,not in
在这里插入图片描述
或者
在这里插入图片描述

🎄表子查询

子查询返回的是多行多列
常用运算符:in
在这里插入图片描述

🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰

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

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

相关文章

自动化运维工具-Ansible详解

目录 一、Ansible介绍 &#xff08;一&#xff09;简介 &#xff08;二&#xff09;特性 &#xff08;三&#xff09;优势 &#xff08;四&#xff09;基本架构 &#xff08;五&#xff09;任务执行模式 &#xff08;六&#xff09;ansible与其余配置管理软件的对比 二、…

【C++篇】STL标准模板库

友情链接&#xff1a;C/C系列系统学习目录 知识点内容正确性以C Primer&#xff08;中文版第五版&#xff09;、C Primer Plus&#xff08;中文版第六版&#xff09;为标准&#xff0c;同时参考其它各类书籍、优质文章等&#xff0c;总结归纳出个人认为较有逻辑的整体框架&…

SpringCloud Alibaba入门1之创建多模块工程

一、创建父项目 创建一个父Maven项目&#xff0c;项目命名为myshop,用于管理子模块。 创建项目后&#xff0c;删除src和增加pom设置 二、创建子module 右键父项目&#xff0c;新建module 此我们的子module就创建完成了。接下来如法炮制&#xff0c;创建另外几个子module&…

【Python 基础篇】Python 元组及元组常用函数

文章目录 导言一、什么是元组二、创建元组2.1 使用括号创建元组2.2 使用函数创建元组 三、访问元组元素四、元组常用函数4.1 len()4.2 count()4.3 index() 总结 导言 当我们需要存储一组不可变的数据时&#xff0c;Python中的元组&#xff08;Tuple&#xff09;就派上了用场。…

chatgpt赋能python:Python文件与目录

Python文件与目录 Python拥有强大的文件和目录操作功能&#xff0c;这使得它成为一个非常强大的编程语言之一。Python的文件和目录操作功能可以帮助你创建、读取和写入文件&#xff0c;访问和处理目录结构&#xff0c;以及对文件和目录进行各种操作。 在这篇文章中&#xff0…

jmeter连接数据mysql数据库

1. 数据库驱动下载 下载地址&#xff1a;https://dev.mysql.com/downloads/connector/j/5.1.html 将下载后的 mysql-connector-java-8.0.27.jar 包放到jmeter的lib目录下 2. 创建jdbc connnection configuration jdbc:mysql://43.224.3.131:3360/student?allowMultiQueriest…

【C++篇】C++与C小知识点区别

友情链接&#xff1a;C/C系列系统学习目录 知识点内容正确性以C Primer&#xff08;中文版第五版&#xff09;、C Primer Plus&#xff08;中文版第六版&#xff09;为标准&#xff0c;同时参考其它各类书籍、优质文章等&#xff0c;总结归纳出个人认为较有逻辑的整体框架&…

2023-01-06 LightDB单机安装.md

LightDB单机安装 LightDB官网&#xff1a;https://www.hs.net/lightdb 下载安装包&#xff1a;lightdb-x-13.8-22.3-7953-el7.x86_64.zip 前置准备 防火墙配置(选择一种操作) firewall防火墙 firewall-cmd --permanent --add-port5432/tcp firewall-cmd --permanent --add-port…

【Unity Shader】从入门到感慨(2)用C#画一个立方体

文章目录 一、构成一个立方需要多少个顶点?二、定义三角面的索引数组:三、定义UV坐标数组:四、最后构建Mesh:五、完整代码:一、构成一个立方需要多少个顶点? 这个问题是面试经常被问到的题。如上图,我们知道在几何中立方体有6个面,8个顶点。但在图形学中,顶点指的是模…

神经网络:卷积操作

当谈到计算机视觉中的网络模型结构时&#xff0c;卷积操作是其中一个关键的组成部分。卷积操作是一种基于局部区域的操作&#xff0c;它在计算机视觉中用于图像处理和特征提取。 卷积操作的原理如下&#xff1a; 给定一个输入图像和一个称为卷积核&#xff08;或滤波器&#x…

HCIP网络笔记分享——IA回顾及OSPF协议

第一部分 HCIA回顾1、网络基础2、动态路由协议3、路由认证4、路由控制&#xff08;AD metric &#xff09; 一、知识巩固二、场景模拟1、获取IP地址1.1 DHCP --- 动态主机配置协议1.1.1 DHCP客户端1.1.2 DHCP服务器1.1.3 DHCP客户端1.1.4 DHCP服务器 2、打开浏览器3、路由器进行…

QT 多语言 中英文切换

本文详细的介绍了利用Qt语言大师工具&#xff0c;实现Qt程序的多国家语言切换。例如新建界面、pro参数、更新翻译、QT预言家翻译语言、翻译中文、翻译英文、发布翻译、核心代码、h源代码、cpp源代码、演示效果等操作。 本文作者原创&#xff0c;转载请附上文章出处与本文链接…

chatgpt赋能python:Python文件怎么建立?

Python文件怎么建立&#xff1f; 对于有经验的Python开发人员&#xff0c;创建文件是一个基本的任务。在这篇文章中&#xff0c;我们将讨论如何创建Python文件&#xff0c;包括使用文本编辑器、命令行和集成开发环境&#xff08;IDE&#xff09;。 通过文本编辑器创建Python文…

【在线商城系统】数据来源-爬虫篇

系列文章目录 【在线商城系统】数据来源-爬虫篇 文章目录 系列文章目录前言1、目标2、系统设计3、系统功能3.1、数据建模3.2、数据处理层系统3.2.1、创建Springboot项目3.2.1.1、配置依赖3.2.1.2、Selenium辅助类3.2.1.3、商品分类、商品详情实体类 3.2.2、获取数据3.2.3、获取…

【C++篇】继承和派生

友情链接&#xff1a;C/C系列系统学习目录 知识总结顺序参考C Primer Plus&#xff08;第六版&#xff09;和谭浩强老师的C程序设计&#xff08;第五版&#xff09;等&#xff0c;内容以书中为标准&#xff0c;同时参考其它各类书籍以及优质文章&#xff0c;以至减少知识点上的…

不用手动改 package.json 的版本号

“为什么package.json 里的版本还是原来的&#xff0c;有没有更新&#xff1f;”&#xff0c;这个时候我意识到&#xff0c;我们完全没有必要在每次发布的时候还特意去关注这个仓库的版本号&#xff0c;只要在发布打tag的时候同步一下即可 node.js 部分&#xff0c;我们得有一个…

探索视频文本特征加速检索解决方案——倒排索引

前言 随着视频内容的不断增加&#xff0c;如何快速准确地检索到所需的视频成为了一个重要的问题。而视频文本特征加速检索解决方案——倒排索引&#xff0c;成为了解决这一问题的有效手段。该技术可以加速文本和视频片段特征匹配、相似度排序过程&#xff01; 定义——何为“…

windows -- dos命令

文章目录 内部命令变量常用命令特殊命令符综合案例 外部命令 内部命令 操作系统的内部命令。 win r, 输入cmd 打开命令窗口&#xff1b; 如&#xff1a; dir&#xff0c;查看当前目录下的内容cd&#xff0c;切换目录copy&#xff0c; 拷贝echo&#xff0c;打印 变量 windo…

硬盘被写保护怎么解决

目录 问题描述方法1&#xff1a;使用diskpart清除只读属性方法2&#xff1a;树莓派镜像烧录软件 U盘格式化不了&#xff0c;怎么做呢&#xff1f; 问题描述 方法1&#xff1a;使用diskpart清除只读属性 我是I盘出现了问题&#xff0c;所以我在命令提示符输入&#xff1a; chk…

Spring Cloud Alibaba Seata(一)

目录 一、Seata 1、分布式事务简介 1.1、分布式事务理论 1.2、分布式事务解决方案 2、Seata简介 3、Seata安装 一、Seata 1、分布式事务简介 基础概念&#xff1a;事务ACID A&#xff08;Atomic&#xff09;&#xff1a;原子性&#xff0c;构成事务的所有操作&#xf…