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 root密码的重置方法
Apr 21 MySQL
浅谈Mysql多表连接查询的执行细节
Apr 24 MySQL
浅谈MySQL user权限表
Jun 18 MySQL
MySQL系列之二 多实例配置
Jul 02 MySQL
MySQL系列之九 mysql查询缓存及索引
Jul 02 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
Jul 25 MySQL
SpringBoot连接MySQL获取数据写后端接口的操作方法
Nov 02 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
sql查询语句之平均分、最高最低分及排序语句
May 30 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 MySQL
SQL注入的实现以及防范示例详解
Jun 02 #MySQL
如何自己动手写SQL执行引擎
MySQL 8.0 Online DDL快速加列的相关总结
MySQL 常见存储引擎的优劣
Jun 02 #MySQL
Mysql文件存储图文详解
一文读懂navicat for mysql基础知识
Mysql数据库索引面试题(程序员基础技能)
You might like
php对大文件进行读取操作的实现代码
2013/01/23 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python爬取微信公众号文章的方法
2019/02/26 Python
pandas的qcut()方法详解
2019/07/06 Python
Pytorch的mean和std调查实例
2020/01/02 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
个人自我鉴定怎么写
2013/10/28 职场文书
大学三年的自我评价
2013/12/25 职场文书
药品促销活动方案
2014/02/14 职场文书
保密普查工作实施方案
2014/02/25 职场文书
银行内勤岗位职责
2014/04/09 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
Python机器学习之决策树和随机森林
2021/07/15 Javascript