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
- 如何清除mysql的binlog
- mysql自定义函数怎么设置(MySQL自定义变量?学不废不收费~)
- redhat6.5安装mysql(Redhat7.3安装MySQL8.0.22的详细教程二进制安装)
- mysql8.0.15安装详细教程(Mysql8.0.22解压版安装教程小白专用)
- mysql中null的用法(为什么mysql字段要使用NOT NULL)
- php+mysql源码部署教程(在WIN主机IIS上支持PHP和MySQL实现方法)
- centos如何安装mysql8.0版本(Centos7下安装MySQL8.0.23的步骤小白入门级别)
- mysql常用四种日志(MySQL 撤销日志与重做日志Undo Log与Redo Log相关总结)
- 常用的mysql查询语句(MySQL查询重写插件的使用)
- mysql执行计划详细解读(详解MySQL的Seconds_Behind_Master)
- mysql的复制原理(浅析MySQL的WriteSet并行复制)
- mysqljoin语句用法(MySQL的join buffer原理)
- mysql中查询数据合并(Mysql合并结果接横向拼接字段的实现步骤)
- mysql函数编写(MySQL中sum函数使用的实例教程)
- navicat premium连接mysql报错(Navicat连接MySQL错误描述分析)
- mysql主从复制如何实现(MySql主从复制实现原理及配置)
- 44岁夏雨演谋女郎爸,大其24岁却看不出,互动不怕袁泉吃醋(44岁夏雨演谋女郎爸)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
- 这个全椒人被通报表彰,看看你认识吗(这个全椒人被通报表彰)
- 全椒人,38年集体回忆 1980-2018 ,看完不要哭(全椒人38年集体回忆)
- 董元奔吟咏历代文人 1012新旧均可 全椒人张璪 1022 -1093(董元奔吟咏历代文人)
热门推荐
- css怎么设置图片横着(一行css代码解决图片统一大小后的拉伸问题object-fit)
- ASP.NET将Excel数据导入到数据库
- 协程在python中怎么使用(python协程之动态添加任务的方法)
- docker 查看容器状态命令(Docker 使用 Supervisor 来管理进程操作)
- 用户 IIS APPPOOLDefaultAppPool 登录失败的解决方法
- 云服务器操作系统怎么选(云服务器选择Linux还是windows操作系统比较好?)
- vue计算两个日期差几分钟(vue实现同时设置多个倒计时)
- eval详解python(深度辨析Python的eval与exec的方法)
- laravel服务器设置(基于Laravel-admin 后台的自定义页面用法详解)
- pandas列设置随机值(Pandas统计重复的列里面的值方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9