当前位置: 首页 > news >正文

Mysql从入门到精通day3————记一次连接查询的武装渗透

一.内连接查询

概念:内连接是最普遍的连接类型,要求构成连接每一部分的每个表都匹配,不匹配的行将被排除

分类:内连接包括相等连接和自然连接,相等连接最为常见,就是使用等号运算符根据每个表共有列的值匹配两个表中的行,这种情况最后的结果集只包含参加连接的表中与指定字段相符的行,自然连接会消除相等连接结果中的重复属性列而且自然连接根据相同的列名自动连接不是必须要显式指定连接条件(如A=B),而相等连接需要指定条件,也就是说自然连接是去掉重复列的特殊的等值连接,等值连接中不要求属性值完全相同,而自然连接要求必须是相同的属性组(属性名可以不同)即值域必须相同。
下面我们来看一个例子:
在这里插入图片描述

如图所示我们先建立一个图书信息表,内容包含图书id(int类型),图书名(可变字符串类型),作者(可变字符串类型),价格(可变浮点数类型),总页数(int类型),然后我们查看一下表结构如上图所示
在这里插入图片描述
然后我们再建立一个图书借阅表,包含图书id(int型),借出时间(数据库日期类型)归还时间(数据库日期类型),是否归还(布尔型),建立的表结构如上图所示,下面就是开始往表中插入值

在这里插入图片描述
先是给图书借阅表插入值,这里有两个误区警示

误区1:我们在插入多组值时中间要用逗号分隔,否则会报错

误区2:我们注意ERROR行提示的Duplicate entry for primary,key意思是主键的值重复,这是重点,我们给图书的id设置了主键属性,那么图书的id值就不能重复,因为主键有唯一表示性,所以我们如果手滑一不小心把id的值设为相同的,插入操作就会失败,这也是小编实践过程中的教训

然后是插入图书信息表的内容**(注意windows系统不区分大小写,linux系统区分大小写)**
在这里插入图片描述
表的内容有了,下面就开始我们的内连接操作:
在这里插入图片描述
我们进行一次等值查询,以两个表中的图书id为等值条件,我们不难发现我们往图书信息表中插入了四条数据,但是有一本书的数据在图书借阅表中没有,因此连接的时候id不对等所以只返回了三本书的信息

深度思考:上例的等值连接是不是自然连接?
显然不是,因为两个表中的id属性列的值域不同,借阅表的值域是7,8,9而信息表的值域是7,8,9,10所以不是自然连接,下图是一个自然连接的实例:
在这里插入图片描述
在这里插入图片描述
由于SNO属性列的值域相同所以是自然连接并且不会删除重复的列

二.外连接查询

概念:外连接是指使用outer join关键字(outer可省略)将两个表连接起来,外连接生成的结果集不仅包含符合连接条件的行数据,而且包括左表(左外连接时的表),右表(右外连接时的表)或两边连接表(全外连接时的表)中所有的数据行

左外连接(left join):将左表中的所有数据分别与右表中的每条数据进行连接组合,返回的结果除了内连接的数据还包括左表中不符合条件的数据,并在右表的相应列中添加NULL值

右外连接(right join):将右表中的所有数据分别与左表中的每条数据进行连接组合,返回的结果除了内连接的数据还包括右表中不符合条件的数据,并在左表的相应列中添加NULL值

基本语法格式:

SELECT 字段名称 FROM 表名1 LEFT/RIGHT JOIN 表名2 ON 表名1.字段名1=表名2.属性名2

我们还是以上面内连接建立的图书表分析:
<1>左外连接
在这里插入图片描述
这里要注意先选择数据库再查询否则会报错,我这里的数据库是libarary

<2>右外连接
在这里插入图片描述
<3>全外连接(MYSOL暂时不支持,这种外查询意义也不大)

我们对比左外连接和右外连接的查询结果可以发现内连接的查询结果和左外连接的查询结果一致,这是由于图书借阅表(左表)在图书信息表(右表)中一定有与之对应的数据,反过来图书信息表在图书借阅表中有一条id为10的书的信息没有,所以右连接的查询结果会出现最后一行为空(NULL)

**总结:

左连接,左对右,左没右,右加NULL;
右连接,右对左,右没左,左加NULL;

简单点说就是左连接能列出左边关系所有的元组,右连接能列出右边关系所有的元组,我们的例子中左连接列出了借阅表(左表)的所有元组,而外连接列出了信息表(右表)的所有元组(我们要查询的列)**

三.复合条件连接查询(AND)

我们在内连接查询的基础上再加上判断归还字段是否等于0的条件
在这里插入图片描述
如果在右外连接上加入ifback等于0的条件,那么借阅表中的ifback等于1的地方(bookid,ifback)也会变为NULL因为不符合条件,这是外连接和内连接的不同地方,读者注意体会**
在这里插入图片描述

如图所示,我们筛选出了ifback=0的所有元组,查询更为精准

下期预告:SOL子查询的讲解

相关文章:

  • 【二分查找 树状数组 差分数组 离散化 】P6172 [USACO16FEB] Load Balancing P|省选-
  • 牛顿-拉夫逊迭代法原理与除法器的软件与硬件实现
  • 六十天Linux从0到项目搭建第四天(通配符命令、其他命令、压缩解压工具、shell的感性理解、linux权限解析)
  • 从零实现本地文生图部署(Stable Diffusion)
  • 常见框架漏洞攻略-ThinkPHP篇
  • 人工智能AI术语
  • 排序--快排--Hoare法
  • BSides Vancouver 2018靶机通关教学
  • Wireshark网络抓包分析使用详解
  • 【从零实现Json-Rpc框架】- 入门准备篇
  • java项目之校园美食交流系统(源码+文档)
  • python --face_recognition(人脸识别,检测,标题,特征提取)
  • C++指针基础与应用详解
  • JAVA 中的 ArrayList 工作原理
  • 鸿蒙开发新利器(二):媒体查询方法封装全解析
  • RabbitMQ 详细原理解析
  • 蓝桥杯备考:学会使用方向向量
  • 计算机三级Linux应用与开发技术(最终版了)
  • 【线程安全的单例模式和STL是否是线程安全/智能指针是否是线程安全】
  • AXIOM —— 介绍
  • 《探秘海昏侯国》数字沉浸特展亮相首届江西文化旅游产业博览交易会
  • 中国海警位中国黄岩岛领海及周边区域执法巡查
  • 亚马逊拟为商品标注“关税成本”,特朗普致电贝索斯讨说法
  • 辽宁辽阳市白塔区一饭店火灾事故举行新闻发布会,现场为遇难者默哀
  • 招行一季度净利372.86亿降2.08%,营收降逾3%
  • “麒麟王”亮相上海彩市,体彩即开票“瑞兽家族”迎来新成员