我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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连接查询内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【MySQL系列】MySQL复合查询的学习 _ 多表查询 | 自连接 | 子查询 | 合并查询

「前言」文章内容大致是对MySQL复合查询的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、基本查询回顾二、多表查询三、自连接四、子查询4.1 单行子查询4.2 多行子查询4.
2023-08-30

编程热搜

目录