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);?>
下一篇:最后一页
X 关闭
- 1、快播:总结vue3 的一些知识点:MySQL 连接的使用
- 2、天天看点:上交所理事长邱勇重磅发声!
- 3、作品《自然的回归:上海》by OUTPUT签约数字艺术家Timo Helgert. 焦点消息
- 4、中华鲎中医用途(中华鲎)|今日要闻
- 5、夫妻靠收废品为生,丈夫去世后婚外情暴露:多年来给“表妹”花了70多万,备注“我爱你”|热讯
- 6、世界热文:深圳壹连科技股份有限公司IPO过会
- 7、环球今热点:吸塑板是不是模压板(模压板和吸塑板有什么区别)
- 8、全球聚焦:招商添兴6个月定开债基分红
- 9、焦点滚动:唐德影视:股东吴宏亮拟减持不超过2.04%股份
- 10、两本一套11万天价书籍!竟是日本拆解比亚迪海豹后所作
-
ST南卫:拟面向苏州丰瑞达定增募资不超2.99亿元-微动态
证券时报e公司讯,ST南卫(603880)6月8日晚间公告,拟定增募资不超2 99
-
84消毒液与洁厕灵混合使用的化学方程式 84消毒液与洁厕灵反应方程式 环球通讯
今天来聊聊4消毒液与洁厕灵混合使用的化学方程式,84消毒液与洁厕灵反
-
西安培华学院召开本科教育教学审核评估专家意见交流会_环球速递
6月8日上午,西安培华学院本科教育教学审核评估入校评估交流会在明德楼
-
龙韵股份:业绩说明会定于6月16日举行_焦点速讯
龙韵股份(SH603729,收盘价:15 52元)6月8日晚间发布公告称,公司202
-
大成惠瑞一年定开债基分红
证券时报券中社讯,6月8日大成惠瑞一年定开债基公告称,以6月1日为基准
-
聚焦氢燃料电池零部件产业发展方向 中原内配构建五大氢能产业格局_百事通
近几年来,动力活塞组件系统供应商中原内配在发展主业的同时,也把眼光
-
环球今日讯!【视频】首起!高考考场外改装摩托车轰鸣而来,交警当场“拿下”
扬子晚报网6月8日讯(记者郭一鹏通讯员洪滔)为了给广大考生营造宁静的
-
四川一公务员回应搂抱女同事:她心情不好才拥抱,动作很浅_全球今热点
6月7日,四川宜宾。一网友发文称,公务员丈夫与单位同事一同开房并曝光
-
男子醉驾被吊销驾驶证,冒用哥哥驾驶证开车被识破
极目新闻记者吴昌华通讯员李杰熊李芸一名男子因醉驾被吊销了驾驶证,冒
-
全球消息!公益诉讼办案团队关注后,30座农桥全新“靓”相!
“一座座农桥从危转安,不仅解决了附近村民的出行安全问题,也让新农村