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表的增删改查(基础)
Apr 05 MySQL
MySQL性能压力基准测试工具sysbench的使用简介
Apr 21 MySQL
MySQL 覆盖索引的优点
May 19 MySQL
SQL注入的实现以及防范示例详解
Jun 02 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
MySQL里面的子查询的基本使用
Aug 02 MySQL
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
Aug 23 MySQL
mysql中整数数据类型tinyint详解
Dec 06 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
Mysql数据库group by原理详解
Jul 07 MySQL
MySQL事务的ACID特性以及并发问题方案
Jul 15 MySQL
MySQL池化框架学习接池自定义
Jul 23 MySQL
SQL注入的实现以及防范示例详解
Jun 02 #MySQL
如何自己动手写SQL执行引擎
MySQL 8.0 Online DDL快速加列的相关总结
MySQL 常见存储引擎的优劣
Jun 02 #MySQL
Mysql文件存储图文详解
一文读懂navicat for mysql基础知识
Mysql数据库索引面试题(程序员基础技能)
You might like
PHP下10件你也许并不了解的事情
2008/09/11 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
Prototype Selector对象学习
2009/07/23 Javascript
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
如何使用Python的Requests包实现模拟登陆
2018/04/27 Python
Python列表list排列组合操作示例
2018/12/18 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
python 消费 kafka 数据教程
2019/12/21 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
共产党员公开承诺书范文
2014/03/28 职场文书
代办委托书怎样写
2014/04/08 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
班主任高考寄语
2015/02/26 职场文书
运动会广播稿200字
2015/08/19 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
Android自定义双向滑动控件
2022/04/19 Java/Android