MySQL数据库 数据库基本操作(四):表的增删查改(下)

news2024/11/24 17:21:03

1. 联合查询

注:联合查询是面试中的重点,只要考到sql,大多数情况下都考的是联合查询,而且联合查询也是我们学习中的难点.

1.1 笛卡尔积

在实际开发中,数据往往来自不同的表,所以要多表联合查询.多表查询是对多张表的数据笛卡尔积.
它们是两张表的各行数据通过全排列得到的.
在这里插入图片描述
注意:关联表查询可以对关联表使用别名.

1.2 内连接

操作目的:查询许仙同学的成绩.

1.2.1 一般写法

连接步骤:

  1. 先确定要查询的信息都来自于哪些表.
  2. 针对这两个表进行笛卡尔积.select * from student,score;
    在这里插入图片描述
    在上述结果中,我们发现表中有好多都是无效的数据.所以我们要加上一些连接条件(where限制条件)来去掉一些无效数据.连接条件一般用主键来连接.
  3. 加上连接条件,去掉无效数据.select * from student,score where student.id = score.student_id;,使得学生表中的id与成绩表中的学生id对应.
    在这里插入图片描述
  4. 再根据其他数据,补充其他限制条件,比如查询"许仙"同学的成绩.select * from student,score where student.id = score.student_id and student.name='许仙';
    在这里插入图片描述
  5. 把不必要的列去掉.select student.id,student.name,score.score from student,score where student.id = score.student_id and student.name='许仙';
    在这里插入图片描述

1.2.2 join写法

  1. 对两张表进行笛卡尔积.select * from student join score;
    在这里插入图片描述
  2. 加上连接条件.select * from student join score on student.id = score.student_id;
    在这里插入图片描述
  3. 指定其他条件. select * from student join score on student.id = score.student_id and student.id=4;
    在这里插入图片描述
    4 去掉不必要的列.select student.id,student.name,score.score from student join score on student.id = score.student_id and student.id=4;
    在这里插入图片描述

1.3 外连接

外连接分为左外连接和右外连接,如果联合查询,右面的表完全显示,我们说是右外连接,反之则是左外连接.与内连接不同的地方是对于空值/不存在的值,内连接是直接去掉,而外连接会将不保留的一列置为空.需要注意的一点是,外连接因为会涉及到左右的问题,所以只能用join写法来完成.
语法:

  • 左外连接:select 字段名 from 表名1 left join 表名2 on 连接条件
  • 右外连接:select 字段名 from 表名1 right join 表名2 on 连接条件
    eg:select * from student left join score on student.id=score.student_id;
    在这里插入图片描述
    在这里插入图片描述
    在这里我们可以看到,在成绩表中没有id为8同学的成绩,就是"老外学中文"的成绩,所以在外连接的联合查询中,我们直接把"老外学中文"的成绩置为空.我们再来对比一下内连接的结果:
    在这里插入图片描述
    可见在内连接的联合查询中,直接把"老外学中文"的成绩给去掉了.
    其实在日常开发中,外连接比较常用,我们结合实际场景来考虑,如果说某个同学缺考,我们不可以把这个同学的名字直接除掉,我们就是应该把他的成绩置为空.
    右外连接的原理相同,我们不再赘述.
    下面我们通过一张图来形象的展示内连接和外连接的结果集:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.4 自连接

自连接是指在同一张表中连接自身进行查询.就是把自己复制一份出来,自己和自己连接.但是这里需要注意的一点是,由于是表自己和自己连接,所以要给表起别名,否者分不清两张表那张是那张.
案例:
显示所有"计算机原理"比"Java"成绩高的同学.

  1. select * from score as s1,score as s2 where s1.student_id = s2.student_id;第一步,匹配学生id.
    在这里插入图片描述

  2. select * from score as s1,score as s2 where s1.student_id = s2.student_id and s1.course_id=3 and s2.course_id=1 and s1.score>s2.score;把s1中的成绩筛选到只剩"计算机原理"的成绩,s2中的成绩筛选到只剩"Java"的成绩,之后再在最后加上限制条件,s1表的成绩大于s2表的成绩,就是"计算机原理"的成绩大于"Java"成绩的人.

在这里插入图片描述
自连接的作用其实在这里被体现的淋漓尽致:原本两门课的成绩在不同的行中,在这里通过自连接使得不同行中的数据到了不同的列中,列与列之间是可以直接进行比较的.

1.5 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询.

1.5.1 单行子查询

指的是子查询返回的结果集合是一行数据.
eg: 查询不想毕业的同班同学
select * from student where class_id=(select class_id from student where name='不想毕业');
在这里插入图片描述
当然也可以分为两步查询,首先查询不想毕业同学的class_id,之后再使用查询出的class_id去查询该班中有哪些同学.

1.5.2 多行子查询

指的是子查询的结果返回是多行数据,需要注意的是,由于返回的结果是一个不止有一个元素的集合,所以我们不可以在子查询中使用=,而是使用in关键字来判断查询的数据在不在子查询的集合中.
eg:查询语文或者英文的成绩.
select * from score where course_id in (select id from course where name='语文' or name='英文');
在这里插入图片描述

1.6 合并查询

在实际应用中,为了合并多个select的执行结果.可以使用union,union all. 使用union和union all时候,前后查询的结果集中,字段要一致.否者合不上.

  • union
    该操作用于取得两个结果集中的并集,在使用该操作符的时候,会自动去掉结果集中的重复行.
    eg: 查询id小于3,或者名字为"英文"的课程.
    select * from course where id<3 union select * from course where name='英文';
    在这里插入图片描述
    当然这句话也可以用or实现
    select * from course where id<3 or name='英文';
    在这里插入图片描述
    既然使用or就可以实现,那么我们为什么偏要引入联合查询呢?答案是联合查询的结果可以来自不同的表,而or的结果只可以来自同一张表.
  • union all
    该操作用于查询到两个结果集的并集,在使用该操作符的时候,不会去掉重复的元素.
    select * from course where id<=6 union all select * from course where name='英文';
    在这里插入图片描述
    union和union all的区别只在是否去掉重复元素.
    在这里插入图片描述

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

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

相关文章

人工智能_大模型023_AssistantsAPI_01_OpenAI助手的创建_API的调用_生命周期管理---人工智能工作笔记0159

先来说一下一些问题: 尽量不要微调,很麻烦,而且效果需要自己不断的去测试. 如果文档中有图表,大量的图片去分析就不合适了. 是否用RAG搜索,这个可以这样来弄,首先去es库去搜能直接找到答案可以就不用去RAG检索了,也可以设置一个分,如果低于60分,那么就可以去进行RAG检索 微…

dinov2爆肝记

一、网址 https://github.com/facebookresearch/dinov2 二、配置 pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ 三、雷 cuml-cu11无法安装&#xff0c;因为他只能linux 但我发现&#xff0c;没他也行 四、代码 注意&#xff1a; 下面代码…

二叉树的遍历——BFS广度优先搜索

1、BinNode类的创建 &#xff08;1&#xff09;代码总览 ##&#xff08;2&#xff09;测试示例 2、二叉树的遍历 &#xff08;1&#xff09;图示 &#xff08;2&#xff09;代码总览 &#xff08;3&#xff09;测试示例

Datax,hbase与mysql数据相互同步

参考文章&#xff1a;datax mysql 和hbase的 相互导入 目录 0、软件版本说明 1、hbase数据同步至mysql 1.1、hbase数据 1.2、mysql数据 1.3、json脚本&#xff08;hbase2mysql.json&#xff09; 1.4、同步成功日志 2、mysql数据同步至hbase 1.1、hbase数据 1.2、mysql…

GD32零基础教程第一节(开发环境搭建及工程模板介绍)

文章目录 前言一、MDK keil5安装二、设备支持包安装三、CH340串口驱动安装四、STLINIK驱动安装五、工程风格介绍总结 前言 本篇文章正式带大家开始学习GD32F407VET6国产单片机的学习&#xff0c;国产单片机性能强&#xff0c;而且价格也便宜&#xff0c;下面就开始带大家来介绍…

C#互联网区域医学检验中心云LIS系统源码

云LIS联通四级&#xff08;市、县、乡、村&#xff09;检验服务网构建互联网检验服务新体系落地检验资源区域共享建设。云LIS系统是一种基于云计算技术的区域实验室信息管理系统&#xff0c;它的主要功能是管理实验室中的各种信息数据&#xff0c;包括样品数据、检测结果、仪器…

微信小程序-接入sse数据流并实现打字机效果( ChatGPT )

从流中获取的数据格式如下 小程序调用SSE接口 const requestTask wx.request({url: xxx, // 需要请求的接口地址enableChunked: true, // enableChunked必须为truemethod: "GET",timeout: 120000,success(res) {console.log(res.data)},fail: function (error) {//…

Golang | Leetcode Golang题解之第18题四数之和

题目&#xff1a; 题解&#xff1a; func fourSum(nums []int, target int) (quadruplets [][]int) {sort.Ints(nums)n : len(nums)for i : 0; i < n-3 && nums[i]nums[i1]nums[i2]nums[i3] < target; i {if i > 0 && nums[i] nums[i-1] || nums[i]…

今日科普:车祸导致颈部挥鞭样损伤,该怎样治疗

王先生因一次严重的车祸遭遇了颈部挥鞭样损伤。车祸后&#xff0c;他感到颈部和上肢持续性的刀割样疼痛&#xff0c;麻木不堪&#xff0c;严重影响了日常生活。王先生为了寻求疼痛缓解&#xff0c;来到了北京精诚博爱医院。经过详细的检查&#xff0c;医生决定为他实施颈交感射…

高端大气自适应全屏酷炫渐变卡片html源码图片切换特效html5源码导航引导网站源码

源码特点&#xff1a; 1&#xff1a;手工书写DIVCSS、代码精简无冗余。 2&#xff1a;自适应结构&#xff0c;全球先进技术&#xff0c;高端视觉体验。 3&#xff1a;SEO框架布局&#xff0c;栏目及文章页均可独立设置标题/关键词/描述。 4&#xff1a;附带测试数据、安装教程、…

少儿编程 2024年3月电子学会图形化编程等级考试Scratch二级真题解析(判断题)

2024年3月scratch编程等级考试二级真题 判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 26、下列积木块运行结果为false 答案&#xff1a;错 考点分析&#xff1a;考查积木综合使用&#xff0c;重点考查逻辑或积木的使用&#xff0c;或运算是只…

postgresql发布和订阅

一、发布订阅介绍 发布和订阅使用了pg的逻辑复制的功能&#xff0c;通过发布端创建publication与表绑定&#xff0c;订阅端创建subscription同时会在发布端创建逻辑复制槽实现逻辑复制功能 逻辑复制基于 发布&#xff08;Publication&#xff09; 与 订阅&#xff08;Subscri…

性能优化 - 你知道开发React项目中,可以做哪些性能优化吗

难度级别:中高级及以上 提问概率:75% 在React项目开发中,面临着比较大的问题就是组件更新以及重复渲染的问题,基于这两点,我们可以在日常开发工作中,可以通过以下几点,来提升React的性能,加快组件更新对比,避免过多的重复渲染问题。 …

FR中隐藏系统管理--用户管理中 表格中每条数据中的编辑按钮,删除按钮

比如隐藏删除按钮&#xff1a; var userTableTools BI.Constants.getConstant("dec.constant.user.table.tools")for(var key in userTableTools){if(key "delete"){var deleteItem userTableTools["delete"]deleteItem.invisible true;}}

python|map

# 定义一个平方函数 def square(x): return x ** 2 # 创建一个数字列表 numbers [1, 2, 3, 4, 5] # 使用 map 函数将平方函数应用于列表中的每个元素 squares map(square, numbers) #将numbers绑定上一个函数 print(type(square)) print(square)# 将结果转换为列表…

Macos 部署自己的privateGpt(2024-0404)

Private Chatgpt 安装指引 https://docs.privategpt.dev/installation/getting-started/installation#base-requirements-to-run-privategpt 下载源码 git clone https://github.com/imartinez/privateGPT cd privateGPT安装软件 安装&#xff1a; Homebrew /bin/bash -c…

游戏公司面试题系列-CocosCreator实现虚拟摇杆控制角色移动中心旋转自转小球割草旋转逻辑

游戏公司面试题系列-CocosCreator实现虚拟摇杆控制角色移动&中心旋转自转小球&割草旋转逻辑<&#xff01;&#xff01;&#xff01;文章末尾有完整代码下载链接地址&#xff01;&#xff01;&#xff01;> Hello大家好&#xff01;今天我们来用最新的CocosCreat…

老子云、AMRT3D、眸瑞科技

老子云概述 老子云3D可视化快速开发平台&#xff0c;集云压缩、云烘焙、云存储云展示于一体&#xff0c;使3D模型资源自动输出至移动端PC端、Web端&#xff0c;能在多设备、全平台进行展示和交互&#xff0c;是全球领先、自主可控的自动化3D云引擎。 平台架构 平台特性 1、基…

深入了解iOS内存(WWDC 2018)笔记-内存诊断

主要记录下用于分析iOS/macOS 内存问题的笔记。 主要分析命令&#xff1a; vmmap, leaks, malloc_history 一&#xff1a;前言 有 3 种思考方式 你想看到对象的创建吗&#xff1f;你想要查看内存中引用对象或地址的内容吗&#xff1f;或者你只是想看看 一个实例有多大&#…

Utilize webcam to capture photo with camera

1. Official Guide& my github Official course my github 2. Overcome Webcam js Error in Chrome: Could not access webcam link 直接把代码拷贝到本机的下述目录下 To ignore Chrome’s secure origin policy, follow these steps. Navigate to chrome://flags/#un…