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连接的使用在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用
-
环球信息:广汽集团(601238)自主月销量新高,两田电动化进程加快
公司简介公司专注电力电子技术在工业配套电源与新能源领域中的应用,成功完成了由点及面的业务拓展。2022年
-
一汽解放5月中重卡销量同比增长137.9%,保持稳健复苏势头 今日热闻
证券时报网讯,6月8日晚,一汽解放发布了2023年5月份产销快报。数据显示,一汽解放5月份实现销量2 18万辆,
-
环球今头条!工业富联迎来上市五周年 已经启动“2+2”战略布局
6月8日,工业富联迎来上市五周年。工业富联CEO郑弘孟发布《乘势而上聚力而行——致工业富联全体同仁的一封
-
玛丝菲尔女装官方_玛丝菲尔女装 每日快播
1、玛丝菲尔(Marisfrolg)女装创立于1993年。属一线品牌的女装。2、玛丝菲尔(Marisfrolg)
-
保利发展(600048.SH)近期获得5个房地产项目-全球关注
智通财经APP讯,保利发展(600048 SH)发布公告,自公司《关于本公司获得房地产项目的公告》(公告编号2023-04
-
越南会安南海四季度假酒店为您的阖家旅行缔造难忘回忆
越南会安南海四季度假酒店依偎于如梦似幻的中部海岸线,是家庭出游的理想之境。
-
动态:中日对决,国羽一姐拒绝翻车!决胜局21-10,陈雨菲4连斩日本名将
在帮助中国羽毛球队完成苏迪曼杯三连冠之后,国羽女单一姐陈雨菲,缺席了接下来马来西亚大师赛和泰国公开赛
-
阳新县15个试点入选湖北省优化营商环境先行区创建名单|天天速读
6月7日,湖北省优化营商环境领导小组办公室公布2023年全省优化营商环境先行区创建名单,确定54项改革事项先
-
戒毒所里场所开放日活动精彩多多
在第36个国际禁毒日来临之际,6月6日,省西安戒毒康复所举行“健康人生绿色无毒”禁毒宣传暨场所开放日
-
垃圾箱房成为“门面担当”,便捷质感如何兼顾? 环球看热讯
择一不扰民的僻静处,这是不少社区在为垃圾箱房“安家”时的通行策略。如此一来,垃圾箱房带来的噪音、气味
-
焦点精选!幼儿园小便池清洗餐具?江西九江市官方:视频反映情况属实 责令停业整顿
原标题:幼儿园小便池清洗餐具?江西九江市官方:视频反映情况属实责令停业整顿央视网消息:据江西九江市人
-
今日讯!广州大学城旅游景点攻略_广州大学城游玩路线和攻略
你们好,最近小活发现有诸多的小伙伴们对于广州大学城旅游景点攻略,广州大学城游玩路线和攻略这个问题都颇
-
建安区交通运输局:助力高考,为爱护航|环球速递
“十载寒窗苦读,一朝六月花开”,为助力2023年度高考,建安区交通运输局积极主动与区教育部门对接,联合制
-
全球快看:涨停雷达:建筑个股异动 建科院触及涨停
今日走势:建科院今日触及涨停板,该股近一年涨停1次。 异动原因揭秘:1、公司的主营业务为建筑设计、绿
-
中国空间站动态|“圆梦乘组”与“博士乘组”梦幻联动! 环球即时看
神十五与神十六乘组共同在轨工作生活了约5天的时间,看两个乘组在轨“梦幻联动”的精彩画面,以及依依挥别
-
股票红线和绿线分别代表什么 今日视点
k线中的红黄绿代表什么?k线图中的红线、黄线、绿线表示的是一只股票的均线。均线,简单来说就是一只股票某
-
酒泉市城镇老旧小区改造加快推进 焦点速讯
今年以来,酒泉市继续把城镇老旧小区改造作为推进城市更新、促进有效投资,改善居民生活环境和居住条件的重
-
天天报道:历时570天上市200家 北交所高质量发展跑出加速度
“专精特新”企业集聚市场定位精准作为服务创新型中小企业的主阵地,北交所200家上市公司中,中小企业占比8
-
当前滚动:龙舟赛催生旅游热 多彩活动喜迎八方客
九龙湖公园人气旺 6月10日至11日,中国南昌国际龙舟赛(以下简称“龙舟赛”)将在红谷滩区举行,一系列
- 建行四川省分行:深耕普惠金融 助力区域创新
- 长风破浪会有时:运营商如何弄潮数字经济-快看点
- 每日消息!乐歌股份:目前公司跨境电商业务营收占比在50%左右
- 全球最资讯丨易极:12-19日黄金早上博文晚上路演1796空均获利
- 速读:万邦德:公司呼吸系统、感冒及解热镇痛的药品有盐酸溴己新片、盐酸溴己新注射液、盐酸氨溴索注射液、小儿氨酚黄那敏颗粒、复方氨酚那敏颗粒、头孢克洛颗粒等
- 彤程新材:我司部分产品已在国内FAB厂较为大量应用
- H5开屏从龟速到闪电,企微是如何做到的
- 卢帅神奇变阵!快船用9分钟从落后15分到领先13分
- 全球时讯:CPECC伊拉克西古尔纳-1油田303项目中交侧记
- 天原集团召开元旦、春节“双节”安全工作专题会议 今日热闻