MySQL连接查询你真的学会了吗?


Posted in MySQL onJune 02, 2021

1.内连接查询概要

       内连接是应用程序中非常常见的连接操作,它一般都是默认的连接类型。内连接基于连接谓词,它将两张表(如A和B)的列组合在一起,产生新的结果表。内连接查询会将A表的每一行和B表的每一行进行比较,并找出满足连接谓词的组合。当连接谓词被满足,A和B中匹配的行会按列组合(并排组合)成结果集中的一行。

       内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分3种:交叉连接相等连接和自然连接。

2.交叉连接(笛卡尔积)

       交叉连接(Cross Join) ,又称“笛卡尔连接(Cartesian Join) "或“叉乘(Product) ",它是所有类型的内连接的基础。

       如果把表视为行记录的集合,那么交叉连接即返回这两个集合的笛卡尔积,返回到结果集合中的数据行数等于第一张表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。这其实等价于内连接的连接条件为“永真” ,或连接条件不存在。如果A和B是两个集合,它们的交叉连接就记为: A x B.

       定义线路表与车辆表的交叉连接(笛卡尔积) 。

示例:

实现线路表与车辆表笛卡尔积

SELECT COUNT(*)
FROM line 
CROSS JOIN vehicle

3.内连接语法与示例

语法:

SELECT fieldlist
FROM table1 [INNER] JOIN table2 
  ON table1.column1=table2.column2
[WHERE condition]

示例1:

使用内连接获取车辆型号含有“DD”字样的车辆信息和司机信息,要求车辆信息为全部列,司机信息中只需包含姓名和身份证

SELECT v.*,d.name,d.licenseNo
FROM vehicle v JOIN driver d
  ON v.driverID=d.driverID
WHERE model LIKE '%DD%'

示例2:

使用内连接获取年龄大于35岁的司机信息和该司机所驾驶的车辆信息,要求车辆信息为全部列,司机信息中只包含姓名、出生年月和电话

SELECT v.*,d.name,d.licenseNo,d.phone
FROM vehicle v INNER JOIN driver d
  ON v.driverID=d.driverID
WHERE CEIL(DATEDIFF(NOW(),birthday)/365)>35

4.自然连接

自然连接(Natural Join)是一种特殊的内连接,它要求相连接的两张表的连接依据列心须是相同的字段(字段온相同,字段属性相同)。在自然连接中两张表的所有名称相同的列都将被比较,并且在结果集中把重复的列去掉,结果集中两张表中名称相同的列仅出现一次。而普通的内连接并不去掉重复的列。(部分数据库不支持自然连接,saL Server等。)

自然连接的语法如下:

SELECT fieldlist
FROM table1 NATURAL JOIN table2
[WHERE condition]

示例:

使用自然连接获取车辆型号含有“DD”字样的车辆信息和司机信息,要求车辆信息为全部列,司机信息中只需包含姓名和身份证

SELECT v.*,d.name,d.licenseNo
FROM vehicle v NATURAL JOIN driver d
WHERE model LIKE '%DD%'

5.多表连接查询

如果查询的信息来源于多张表,则可通过两两相连的方式建立多表连接查询。

以下为三表连接查询的语法:

SELECT fieldlist 
FROM table1 JOIN table2 
  ON table1.column1=table2.column2_1
JOIN table3
  ON table2.column2_2=table3.column3
[WHERE condition]

说明:

(1)table2与table1和table3两两相连。

(2)三表以上连接查询的方法与三表连接查询的方法一样,均是通过两两相连的方式实现。

示例1:

获取所有非空调车的车牌号、型号和司机姓名、所属线路的线路好、起点站和终点站信息

SELECT d.name,v.plateNo,v.model,l.lineNo,l.from_station,l.end_station
FROM vehicle v JOIN driver d
  ON v.driverID=d.driverID
JOIN line l
  ON v.lineID=l.lineID
WHERE type='非空调车'

示例2:

获取公交二公司所有司机信息。要求输出司机姓名、身份证、性别和电话。

SELECT d.name,d.licenseNo,d.gender,d.phone
FROM vehicle v JOIN driver d 
  ON v.driverID 
JOIN line l
  ON v.lineID=l.lineID
WHERE company='公交二公司'

6.简单多表连接查询

如果在FROM子句中,直接列出所有要连接的表,然后在WHERE子句中指定连接条件,此为简单多表查询,它与内连接功能相同

使用两表连接查询语法格式如下:

SELECT fieldlist
FROM table1,table2
WHERE table1.column1=table2.column2
[AND 其他条件]

使用三表连接查询语法格式如下:

SELECT fieldlist 
FROM table1,table2,table3
WHERE table1.column1=table2.column2_1 
  AND table2.column2_2=table3.colemn3
[AND 其他条件]

示例:

获取所有非空调车的车牌号、型号和司机姓名、所属线路的线路好、起点站和终点站信息

SELECT d.name,v.plateNo,v.model,l.lineNo,l.from_station,l.end_station
FROM vehicle v,driver d,line l
WHERE v.driverID=d.driverID
  AND v.lineID=l.lineID
AND type='空调车'

总结

到此这篇关于MySQL连接查询的文章就介绍到这了,更多相关MySQL连接查询内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL获取所有分类的前N条记录
May 07 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
MySQL 数据类型选择原则
May 27 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
MySQL和Oracle批量插入SQL的通用写法示例
Nov 17 MySQL
浅谈MySql整型索引和字符串索引失效或隐式转换问题
Nov 20 MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
Nov 27 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
mysql中DCL常用的用户和权限控制
Mar 31 MySQL
Mysql调整优化之四种分区方式以及组合分区
Apr 13 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 MySQL
SQL注入的实现以及防范示例详解
Jun 02 #MySQL
如何自己动手写SQL执行引擎
MySQL 8.0 Online DDL快速加列的相关总结
MySQL 常见存储引擎的优劣
Jun 02 #MySQL
Mysql文件存储图文详解
一文读懂navicat for mysql基础知识
Mysql数据库索引面试题(程序员基础技能)
You might like
第十四节 命名空间 [14]
2006/10/09 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
jQuery中[attribute!=value]选择器用法实例
2014/12/31 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
利用Python爬取可用的代理IP
2016/08/18 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
Python异常的检测和处理方法
2018/10/26 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
经典英文广告词
2014/03/18 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
小学语文课后反思精选
2014/04/25 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
颐和园导游词
2015/01/30 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
离婚起诉书范本
2015/05/18 职场文书
辛亥革命观后感
2015/06/02 职场文书
同学联谊会邀请函
2019/06/24 职场文书