mysql连接查询原理(MySQL连接查询你真的学会了吗?)
mysql连接查询原理
MySQL连接查询你真的学会了吗?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连接查询内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://blog.csdn.net/m0_57779406/article/details/117427823
- mysqlinnodb有什么功能(Mysql技术内幕之InnoDB锁的深入讲解)
- 在mysql语法中用来修改数据的命令(explain命令为什么可能会修改MySQL数据)
- mysql千万级别数据查询优化(mysql千万级数据量根据索引优化查询速度的实现)
- mysql配置多实例
- mysql5.7.24rpm安装(MySQL系列-YUM及RPM包安装v5.7.34)
- mysql 5.5.27 winx64安装配置方法图文教程(mysql 5.5.27 winx64安装配置方法图文教程)
- mysql各种查询方式(mysql查询的控制语句图文详解)
- 了解mysql数据自动备份(MySQL数据备份方法的选择与思考)
- mysql流式查询(MySQL全面瓦解之查询的正则匹配详解)
- mysql数据字段默认值怎么设置(MySQL 字段默认值该如何设置)
- mysql能groupby两个字段吗(MySQL group by语句如何优化)
- mysql中的默认mysql数据库作用(MySQL安装后默认自带数据库的作用详解)
- mysql 高级查询语法(MySQL查询语句进阶知识集锦)
- mysql类型转换函数推荐(mysql 数据类型转换的实现)
- 怎么查看mysql计划执行情况(详解 MySQL 执行计划)
- mysql自定义安装教程5.7(MySQL系列-源码编译安装v5.7.34)
- 重温《蜗居》 宋思明选中海藻为红颜知己,纯属巧合,与爱无关(宋思明选中海藻为红颜知己)
- 越南旅游攻略(越南旅游攻略自由行)
- 成都旅游攻略(成都旅游攻略自由行最佳线路)
- 给儿童吃什么最好(给儿童吃什么最好消化)
- 杭州旅游攻略()
- 云南旅游攻略(云南旅游攻略5天攻略)
热门推荐
- canvas如何在网页上画图形(canvas绘制图片drawImage使用方法)
- es6常用的数组方法(ES6中Set与WeakSet集合的深入讲解)
- linuxgdb怎么设置前面的程序(详解Linux下调试器GDB的基本使用方法)
- ASP.NET方法重载
- 各种云服务器区别(日本云服务器有什么特性?好不好?)
- linux模糊删除多个文件(Linux删除文件不同方法效率对比)
- 怎么搭建apache服务器(Apache配置多个站点的方法)
- mysql千万数据如何优化(MySQL千万级数据的表如何优化)
- 微信公众号用户怎么增加(微信公众号用户与网站用户的绑定解决方案分析)
- elasticsearch数据写入原理(Python对ElasticSearch获取数据及操作)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9