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

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.mzph.cn/news/803031.shtml

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

相关文章

基于SSM+Jsp+Mysql的高校毕业设计管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

秋招复习笔记——八股文部分:操作系统

笔试得刷算法题&#xff0c;那面试就离不开八股文&#xff0c;所以特地对着小林coding的图解八股文系列记一下笔记。 这一篇笔记是图解系统的内容。 硬件结构 CPU执行程序 计算机基本结构为 5 个部分&#xff0c;分别是运算器、控制器、存储器、输入设备、输出设备&#xf…

轻量的 WebHook 工具:歪脖虎克

本篇文章聊聊轻量的网络钩子&#xff08;WebHook&#xff09;工具&#xff1a;歪脖虎克。 写在前面 这是一篇迟到很久的文章&#xff0c;在 21 年和 22 年的时候&#xff0c;我分享过两篇关于轻量的计划任务工具 Cronicle 的文章&#xff1a;《轻量的定时任务工具 Cronicle&a…

运筹学基础(六)列生成算法(Column generation)

文章目录 前言从Cutting stock problem说起常规建模Column generation reformulation 列生成法核心思想相关概念Master Problem (MP)Linear Master Problem (LMP)Restricted Linear Master Problem (RLMP)subproblem&#xff08;核能预警&#xff0c;非常重要&#xff09; 算法…

kvm基础命令

前言 一、基础命令 1.虚拟机查看 2.虚拟机开启与关闭 3.虚拟机删除 4.查看虚拟机的配置 5.配置文件重定向 6.命令行登录虚拟机 二、调整虚拟机磁盘大小 三、虚拟机创建快照 四、virsh console报错 总结 前言 今天我们分享一下如何使用kvm基础命令。 一、基础命令 1.虚拟机查看…

杨笛一新作:社恐有救了,AI大模型一对一陪聊,帮i人变成e人

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站ai人工智能工具 更多资源欢迎关注 在社交活动中&#xff0c;大语言模型既可以是你的合作伙伴&#xff08;partner&#xff09;&#xff0…

MySQL-用户与权限管理:用户管理、权限管理、角色管理

用户与权限管理 用户与权限管理1.用户管理1.1 登录MySQL服务器1.2 创建用户1.3 修改用户1.4 删除用户1.5 设置当前用户密码1.6 修改其它用户密码 2. 权限管理2.1 权限列表2.2 授予权限的原则2.3 授予权限2.4 查看权限2.5 收回权限 访问控制连接核实阶段请求核实阶段 3. 角色管理…

Redis 八种常用数据类型常用命令和应用场景

5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 3 种特殊数据类型&#xff1a;HyperLogLog&#xff0…

【git】checkout origin/xxx 出现 detached HEAD问题

git 检出远程分支出现Head分离的是什么原因导致的呢&#xff1f;&#xff1f; 因为Head指向了origin的一个commit, 但是这个origin分支你的本地又没有&#xff0c;也就是说你本地没有追踪这个分支&#xff0c;那就要track一下 git checkout -h 看一下有没有追踪的命令 果不其…

服务器开发 Socket 相关函数

Socket 函数 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol)domain: AF_INET 这是大多数用来产生 socket 的协议&#xff0c;使用TCP或UDP来传输&#xff0c;用IPv4的地址 AF_INET6 与上面类似&#xff0c;不过…

Python高级

不定长参数 位置不定长参数&#xff0c;获取参数args会整合为一个元组 def info(*args):print(arg is, args)print(type(arg) is, type(args))info(1, 2, 3, 4, a, b)# 输出 # arg is (1, 2, 3, 4, a, b) # type(arg) is <class tuple> 关键字不定长参数&#xff0c;&…

蓝桥杯2023年第十四届省赛真题-棋盘

solution1(暴力) 暴力蓝桥杯可以过&#xff0c;虽然理论上会超时~ #include<iostream> using namespace std; const int maxn 2010; int a[maxn][maxn] {0};//0白棋&#xff0c;1黑棋 int main(){int n, m, x1, x2, y1, y2;scanf("%d%d", &n, &m)…

可视化大屏 附源码(Vue3 + TS + DataV + ECharts)

目录 前言 ✨项目代码 1、带有node_modules的项目包 &#x1f680; 2、不带有node_modules的项目包 &#x1f680; ⚒️项目屏幕大小调整 &#x1f48e; 使用开源项目 1、DataV &#x1f530; 2、Echarts &#x1f530; 3、PPchart &#x1f530; 4、表格平滑滚动 &a…

C# 如何修改项目名称

目录 背景具体步骤1、Visual Studio中修改项目名和程序集名称以及命名空间2、修改项目文件夹名3、修改解决方案里项目的路径4、再次打开解决方案&#xff0c;问题解决步骤总结 名词解释解决方案&#xff08;Solution&#xff09;项目&#xff08;Project&#xff09;程序集&…

sa-token非Web上下文无法获取Request

0x02 非Web上下文无法获取Request 问题定位 在我们使用sa-token安全框架的时候&#xff0c;有时候会提示&#xff1a;SaTokenException:非Web上下文无法获取Request 错误截图&#xff1a; 在官方网站中&#xff0c;查看常见问题排查&#xff1a; 非Web上下文无法获取Reques…

运行游戏找不到steam_api64.dll怎么办?steam_api64.dll丢失解决方法

steam_api64.dll是64位Windows操作系统上的一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;其大小通常在1.5-3.5 MB之间。这个文件对于Steam平台至关重要&#xff0c;因为它实现了游戏验证、更新等功能&#xff0c;并确保了用户拥有游戏的合法使用权。它通过提供一…

基于单片机水塔水位检测控制系统设计

**单片机设计介绍&#xff0c; 基于单片机水塔水位检测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机水塔水位检测控制系统设计的主要目标是实现水塔水位的自动监测与控制&#xff0c;确保水塔内的水位始…

网页版五子棋对战实现和自动化测试

文章目录 前言一、项目描述项目演示链接 二、实现的功能与操作1.登录注册2.游戏大厅线程安全问题多开处理 3.五子棋对战 三、项目测试1.测试用例2.测试技术点3.部分测试用例展示&#xff08;1&#xff09;注册页面&#xff08;2&#xff09;登录页面&#xff08;3&#xff09;游…

生成式AI:最有商业前景的人工智能技术,不再是改变分发关系,而是升级生产力

根据最新的报告可以看出ChatGPT到底有多厉害&#xff0c;多个方面实现从判别决策到创造生成 生成式AI VS Web 3.0 &#xff1a;不追求生产关系的重塑&#xff0c;但将大幅度提升和创造生产力 创造是生成式AI的核心&#xff0c;本质是对生产力的大幅度提升和创造。生成式AI通过…

2、java语法之循环、数组与方法(找工作版)

写在前面&#xff1a;整个系列文章是自己学习慕课相关视频&#xff0c;进行的一个总结。文章只是为了记录学习课程的整个过程&#xff0c;方便以后查漏补缺&#xff0c;找到对应章节。 文章目录 一、Java循环结构1、while循环2、do-while循环3、for循环4、嵌套循环5、break语句…