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连接的使用在前几章节中,我们已经学会了如何在一张表中读取数据
-
环球时讯:赛腾股份(603283):6月8日北向资金增持8.38万股6月8日北向资金增持8 38万股赛腾股份。近5个交易日中,获北向资金增持
-
2023年养老金持续上涨,新疆地区能发发多少钱?基本数目有多少_报资讯具体来说,居民人均可支配收入增长了3 8%,实际增长2 0%;而消费支出下
-
山东人事考试 山东省事业编考试官网【山东人事考试——一次属于自己的机会】山东人事考试是许多山东考生为
-
2-1!陆光祖错失横扫良机,惨遭石宇奇逆转,下场石头战日本一哥在苏杯结束之后的两站世界大赛当中,国羽在男单的表现都无法让球迷满意
-
世界快资讯丨聚焦氢燃料电池零部件产业发展方向 中原内配构建五大氢能产业格局近几年来,动力活塞组件系统供应商中原内配在发展主业的同时,也把眼光
-
世界观焦点:1-0!12轮6场1-0神似巅峰AC米兰,上海申花升至第二,距榜首1分是役,上海申花首发3421阵型,中锋马莱莱,两边刘若钒、徐皓阳,中场于
-
天天新动态:三星医疗今日大宗交易折价成交718万股 成交额7898万元三星医疗6月8日大宗交易成交718万股,成交额7898万元,占当日总成交额
-
20年“老慢支”顽疾竟是肺内古董在作祟20年“老慢支”顽疾竟是肺内古董在作祟---20年“老慢支”顽疾竟是肺内
-
当前通讯!储能板块新一轮扩产来袭:百亿级项目再现 更有跨界新玩家试水|行业动态新能源行业日新月异,万亿储能赛道也在变得拥挤。近期,多家上市公司公
-
京津冀“3+N”联盟关节骨水泥类医用耗材集中带量采购开标,平均降价83.13%App6月8日消息,从天津市医保局了解到,京津冀“3+N”联盟关节骨水泥类
-
世界今头条!古人称手谈是什么意思_手谈是什么古人称手谈是什么意思,手谈是什么很多人还不知道,现在让我们一起来看
-
遂宁市射洪生态环境局多形式开展“六·五”环境日宣教活动_世界时快讯遂宁市射洪生态环境局多形式开展“六·五”环境日宣教活动百姓生活遂宁
-
匈牙利5月份通胀率为21.5%-世界快播其中,家庭能源价格同比上涨37 2%,食品价格同比上涨33 5%
-
第十九届深圳文博会 新疆展区魅力四射 今日关注6月8日,第十九届中国(深圳)国际文化产业博览交易会的新疆展区,精彩
-
【世界报资讯】武汉邓南振兴街社区开展安全生产月宣传活动武汉邓南振兴街社区开展安全生产月宣传活动---为了更好的向居民宣传各
-
曹妃甸港矿石码头(关于曹妃甸港矿石码头介绍)来为大家解答以上的问题。曹妃甸港矿石码头,妃甸港矿石码头介绍这个很
-
定了!新疆这个机场选址报告获批复!近日,新疆皮山机场新建工程选址报告获得中国民用航空局批复,这是中国
-
播报:e1级环保标准甲醛释放量 E1级环保标准1、E1级环保标准是国家强制性的健康标准,它是强制实行的“安全标准线
-
意外车祸险丧命,微创脾切保安康意外车祸险丧命,微创脾切保安康6月2日,江苏省中西医结合医院普外科专
-
智通港股通活跃成交|6月8日 全球简讯港股通活跃成交|2023年6月8日
-
【世界速看料】广州楼市没有“红五月”:市场需求略显透支 热点区域二手成交量追平历年新低虽然新房和二手房价格指数已连涨三个月,但广州近两个月成交均出现环比
-
天啊我穿越成了秦桧txt_天啊我穿成了秦桧 全球热议天啊我穿越成了秦桧txt,天啊我穿成了秦桧这个很多人还不知道,现在让我
-
拿到中药“扫一扫”,药材信息全知道_新资讯中药材的种植采收及加工利用直接决定中药质量和疗效,如何让群众放心用
-
播报:高温季来得越来越早,未来10天上海天天冲击35℃明天(6月9日)是高考最后一天,多云到晴,午后局部地区阴有短时阵雨,
-
当前播报:建设“一体化”专区 打造政务公开“镇平样板”建设“一体化”专区打造政务公开“镇平样板”为加快推进政务公开便民服
-
犀牛看市0608:上证指数重回3200点 房地产板块再度发力 当前关注作者:牛冬梅6月8日,A股三大指数开盘涨跌互现,上午上证指数在3200点
-
中国重汽:公司主营产品为重型卡车同花顺金融研究中心6月8日讯,有投资者向中国重汽提问,公司的插电式新
-
世界热资讯!宝马新能源太“狠了”,比国产便宜还标配空气悬挂,续航达592Km宝马新能源太“狠了”,比国产便宜还标配空气悬挂,续航达592Km
-
400余户交钱后却“丢掉”业主身份 保定宏孚地产与北京金泰之间发生了什么2016年,保定市宏孚房地产开发有限责任公司(下称“宏孚地产”)在当地