MySQL 连接的使用
在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。
本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。
(相关资料图)
你可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- **LEFT JOIN(左连接):**获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接):与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
本章节使用的数据库结构及数据下载:kxdang-mysql-join-test.sql。
在命令提示符中使用 INNER JOIN
我们在RUNOOB数据库中有两张表 tcount_tbl 和 kxdang_tbl。两张数据表数据如下:
实例
尝试以下实例:
测试实例数据
mysql> use RUNOOB;Database changedmysql> SELECT * FROM tcount_tbl;+---------------+--------------+| kxdang_author | kxdang_count |+---------------+--------------+| 菜鸟教程 | 10 || RUNOOB.COM | 20 || Google | 22 |+---------------+--------------+3 rows in set (0.01 sec) mysql> SELECT * from kxdang_tbl;+-----------+---------------+---------------+-----------------+| kxdang_id | kxdang_title | kxdang_author | submission_date |+-----------+---------------+---------------+-----------------+| 1 | 学习 PHP | 菜鸟教程 | 2017-04-12 || 2 | 学习 MySQL | 菜鸟教程 | 2017-04-12 || 3 | 学习 Java | RUNOOB.COM | 2015-05-01 || 4 | 学习 Python | RUNOOB.COM | 2016-03-06 || 5 | 学习 C | FK | 2017-04-05 |+-----------+---------------+---------------+-----------------+5 rows in set (0.01 sec)
接下来我们就使用MySQL的**INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)**来连接以上两张表来读取kxdang_tbl表中所有kxdang_author字段在tcount_tbl表对应的kxdang_count字段值:
INNER JOIN
mysql> SELECT a.kxdang_id, a.kxdang_author, b.kxdang_count FROM kxdang_tbl a INNER JOIN tcount_tbl b ON a.kxdang_author = b.kxdang_author;+-------------+-----------------+----------------+| a.kxdang_id | a.kxdang_author | b.kxdang_count |+-------------+-----------------+----------------+| 1 | 菜鸟教程 | 10 || 2 | 菜鸟教程 | 10 || 3 | RUNOOB.COM | 20 || 4 | RUNOOB.COM | 20 |+-------------+-----------------+----------------+4 rows in set (0.00 sec)
以上 SQL 语句等价于:
WHERE 子句
mysql> SELECT a.kxdang_id, a.kxdang_author, b.kxdang_count FROM kxdang_tbl a, tcount_tbl b WHERE a.kxdang_author = b.kxdang_author;+-------------+-----------------+----------------+| a.kxdang_id | a.kxdang_author | b.kxdang_count |+-------------+-----------------+----------------+| 1 | 菜鸟教程 | 10 || 2 | 菜鸟教程 | 10 || 3 | RUNOOB.COM | 20 || 4 | RUNOOB.COM | 20 |+-------------+-----------------+----------------+4 rows in set (0.01 sec)
MySQL LEFT JOIN
MySQL left join 与 join 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
实例
尝试以下实例,以kxdang_tbl为左表,tcount_tbl为右表,理解 MySQL LEFT JOIN 的应用:
LEFT JOIN
mysql> SELECT a.kxdang_id, a.kxdang_author, b.kxdang_count FROM kxdang_tbl a LEFT JOIN tcount_tbl b ON a.kxdang_author = b.kxdang_author;+-------------+-----------------+----------------+| a.kxdang_id | a.kxdang_author | b.kxdang_count |+-------------+-----------------+----------------+| 1 | 菜鸟教程 | 10 || 2 | 菜鸟教程 | 10 || 3 | RUNOOB.COM | 20 || 4 | RUNOOB.COM | 20 || 5 | FK | NULL |+-------------+-----------------+----------------+5 rows in set (0.01 sec)
以上实例中使用了 LEFT JOIN,该语句会读取左边的数据表 kxdang_tbl 的所有选取的字段数据,即便在右侧表 tcount_tbl中 没有对应的 kxdang_author 字段值。
MySQL RIGHT JOIN
MySQL RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据。
实例
尝试以下实例,以kxdang_tbl为左表,tcount_tbl为右表,理解MySQL RIGHT JOIN的应用:
RIGHT JOIN
mysql> SELECT a.kxdang_id, a.kxdang_author, b.kxdang_count FROM kxdang_tbl a RIGHT JOIN tcount_tbl b ON a.kxdang_author = b.kxdang_author;+-------------+-----------------+----------------+| a.kxdang_id | a.kxdang_author | b.kxdang_count |+-------------+-----------------+----------------+| 1 | 菜鸟教程 | 10 || 2 | 菜鸟教程 | 10 || 3 | RUNOOB.COM | 20 || 4 | RUNOOB.COM | 20 || NULL | NULL | 22 |+-------------+-----------------+----------------+5 rows in set (0.01 sec)
以上实例中使用了 RIGHT JOIN,该语句会读取右边的数据表 tcount_tbl 的所有选取的字段数据,即便在左侧表 kxdang_tbl 中没有对应的kxdang_author 字段值。
在 PHP 脚本中使用 JOIN
PHP 中使用 mysqli_query() 函数来执行 SQL 语句,你可以使用以上的相同的 SQL 语句作为 mysqli_query() 函数的参数。
尝试如下实例:
MySQL ORDER BY 测试:
菜鸟教程 MySQL JOIN 测试";echo "
教程 ID 作者 登陆次数 ";while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)){ echo " {$row["kxdang_id"]} ". "{$row["kxdang_author"]} ". "{$row["kxdang_count"]} ". " ";}echo "
";mysqli_close($conn);?>
-
总结vue3 的一些知识点:MySQL 连接的使用 实时焦点MySQL连接的使用在前几章节中,我们已经学会了如何在一张表中读取数据
-
【发现最美 你评我论】陕西柳林:生态与产业融合发展 小小香菇“飘香”乡村振兴路 环球短讯党的二十大报告提出“加强城乡建设中历史文化保护传承”。住房和城乡建
-
v怎么读标准(v怎么读) 实时焦点来为大家解答以上的问题。v怎么读标准,v怎么读这个很多人还不知道,现
-
电动车其实并不环保!憨豆先生公开反对电车,然后被骂惨了憨豆先生,最近掀起了一场舆论战。起因是他在英国《卫报》发布了一篇社
-
长城久润混合基金A份额限购_微资讯证券时报券中社讯,6月8日长城久润混合基金公告称,为保证基金的稳定运
-
社区、医院、医保局接力救治耄耋老人 全球动态社区、医院、医保局接力救治耄耋老人---6月6日,居住在御水天成3栋3单
-
(成都大运纪事)成都迎大运:完成老旧小区改造项目601个 改造棚户区5094户中新网成都6月8日电(记者 王鹏)记者8日下午从成都市人民政府新闻办公室
-
环球热头条丨广联科技递表港交所冲刺IPO 汽车后市场红利消退亟待数字化突围曾频受资本垂青的汽车后市场行业,走出了一位实力新玩家。6月6日,广联
-
江苏舜天:业绩说明会定于6月16日举行|精选江苏舜天(SH600287,收盘价:5 1元)6月8日晚间发布公告称,公司2022
-
新型电力系统建设全面启动,挑战有哪些|数说中国 世界速看料新型电力系统建设面临着保供压力突出、调节能力短缺、“双高”特性凸显
-
法国安纳西发生持刀袭击事件 已致8名儿童受伤根据法国经济调频电视台援引警方消息报道,嫌疑人身份已经确定,这名嫌
-
讯息:招商添福1年定开债基分红证券时报券中社讯,6月8日招商添福1年定开债基公告称,以6月5日为基准
-
【当前热闻】美国一小型飞机起飞10分钟后坠毁 机上2人遇难据PostJournal报道,一架小型飞机从美国纽约州西部一机场起飞后不久坠
-
中国电信广东客服:受影响的移动用户接听语音业务已全面恢复|每日快看【中国电信广东客服:受影响的移动用户接听语音业务已全面恢复】6月8日
-
“5亿高中生”案出现“神秘女子”,检方传唤讯问2小时,身份随后曝光-热点“5亿高中生”案出现“神秘女子”,检方传唤讯问2小时,身份随后曝光--
-
天天快播:榕基软件:拟定增募资不超过8亿元榕基软件(002474)6月8日晚间公告,拟定增募资不超过8亿元,用于政务一
-
长征二号F遥十六运载火箭二级残骸轨道参数公告-每日简讯自5月30日长征二号F遥十六运载火箭发射以来,中国载人航天工程办公室密
-
九丰能源: 关于发行股份、可转换公司债券及支付现金购买资产并募集配套资金实施进展的公告-今日热门九丰能源:关于发行股份、可转换公司债券及支付现金购买资产并募集配套
-
天天微资讯!长三角贸易调整援助行业服务联盟成立,18家行业协会发倡议长三角贸易调整援助行业服务联盟成立,18家行业协会发倡议,援助,商会,
-
环球消息!兴业证券:拟对全资子公司兴证创新资本管理增资18亿元【兴业证券:拟对全资子公司兴证创新资本管理增资18亿元】兴业证券(601
-
洪山区成立首个商会劳动争议调解组织 世界热消息洪山区成立首个商会劳动争议调解组织---湖北日报讯(记者李先宏、通讯
-
犀牛看市0608:上证指数重回3200点 房地产板块再度发力|世界快看作者:牛冬梅6月8日,A股三大指数开盘涨跌互现,上午上证指数在3200点
-
北交所上市公司阵营扩至200家,高质量建设一揽子举措在路上北交所存量上市公司数量达到200家,较去年同期实现数量翻番。
-
十堰有哪些好玩儿的地方_湖北十堰有哪些好玩的地方值得一去哟相信目前很多小伙伴对于湖北十堰有哪些好玩的地方?值得一去哟都比较感
-
热头条丨夫妻靠收废品为生,丈夫去世后婚外情暴露:多年来给“表妹”花了70多万,备注“我爱你”夫妻靠收废品为生,丈夫去世后婚外情暴露:多年来给“表妹”花了70多万
-
中国武夷2022年、2023Q1业绩表现不佳 出售资产的“盘外招”能整活经营吗?-天天新要闻3月,中国武夷(000797)以“盘活资产,避免资产流失”为由,拟打包出售
-
焦点速看:南京栖霞滨江村开展“我助妇儿康·妇儿权益维护与安全守护课堂”活动扬子晚报网6月8日讯(通讯员孙琴记者张可)6月8日,南京栖霞区龙潭街道
-
每日看点!海口美兰区:党建工作指导员为社区群众办实事谋福利获赞近日,海口美舍仕家小区住宅楼楼道连廊处加装了几处护栏,小区居民纷纷
-
焦点速讯:2023年养老金上涨3.8%,各地养老金调整细则将公布,7月底补发?在5月22日全国养老金调整方案公布,确定了2023年养老金上涨3 8%,调整
-
宣州区人事考试网 宣州区人力资源和社会保障局网站|环球百事通头脑风暴宣州区人事考试网:告别高压行业的另一利器对于许多人来说,高