mysql怎么查询两个表

查询两个表的方法:1、利用SELECT语句和“CROSS JOIN”关键字进行交叉连接查询;2、利用SELECT语句和“INNER JOIN”关键字进行内连接查询;3、利用SELECT语句和“OUTER JOIN”关键字进行外连接查询。

mysql怎么查询两个表

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

在关系型数据库中,表与表之间是有联系的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。

在 MySQL 中,多表查询主要有交叉连接、内连接和外连接。

MySQL 交叉连接

交叉连接(CROSS JOIN)一般用来返回连接表的笛卡尔积。

交叉连接的语法格式如下:

SELECT  FROM  CROSS JOIN  [WHERE子句]

SELECT  FROM ,  [WHERE子句]

语法说明如下:

字段名:需要查询的字段名称。

:需要交叉连接的表名。

WHERE 子句:用来设置交叉连接的查询条件。

注意:多个表交叉连接时,在 FROM 后连续使用 CROSS JOIN 或,即可。以上两种语法的返回结果是相同的,但是第一种语法才是官方建议的标准写法。

当连接的表之间没有关系时,我们会省略掉 WHERE 子句,这时返回结果就是两个表的笛卡尔积,返回结果数量就是两个表的数据行相乘。需要注意的是,如果每个表有 1000 行,那么返回结果的数量就有 1000×1000 = 1000000 行,数据量是非常巨大的。

示例:

查询学生信息表和科目信息表,并得到一个笛卡尔积。

为了方便观察学生信息表和科目表交叉连接后的运行结果,我们先分别查询出这两个表的数据,再进行交叉连接查询。

1)查询 tb_students_info 表中的数据,SQL 语句和运行结果如下:

mysql> SELECT * FROM tb_students_info;+----+--------+------+------+--------+-----------+| id | name   | age  | sex  | height | course_id |+----+--------+------+------+--------+-----------+|  1 | Dany   |   25 | 男   |    160 |         1 ||  2 | Green  |   23 | 男   |    158 |         2 ||  3 | Henry  |   23 | 女   |    185 |         1 ||  4 | Jane   |   22 | 男   |    162 |         3 ||  5 | Jim    |   24 | 女   |    175 |         2 ||  6 | John   |   21 | 女   |    172 |         4 ||  7 | Lily   |   22 | 男   |    165 |         4 ||  8 | Susan  |   23 | 男   |    170 |         5 ||  9 | Thomas |   22 | 女   |    178 |         5 || 10 | Tom    |   23 | 女   |    165 |         5 |+----+--------+------+------+--------+-----------+10 rows in set (0.00 sec)

2)查询 tb_course 表中的数据,SQL 语句和运行结果如下:

mysql> SELECT * FROM tb_course;+----+-------------+| id | course_name |+----+-------------+|  1 | Java        ||  2 | MySQL       ||  3 | Python      ||  4 | Go          ||  5 | C++         |+----+-------------+5 rows in set (0.00 sec)

3)使用 CROSS JOIN 查询出两张表中的笛卡尔积,SQL 语句和运行结果如下:

mysql> SELECT * FROM tb_course CROSS JOIN tb_students_info;+----+-------------+----+--------+------+------+--------+-----------+| id | course_name | id | name   | age  | sex  | height | course_id |+----+-------------+----+--------+------+------+--------+-----------+|  1 | Java        |  1 | Dany   |   25 | 男   |    160 |         1 ||  2 | MySQL       |  1 | Dany   |   25 | 男   |    160 |         1 ||  3 | Python      |  1 | Dany   |   25 | 男   |    160 |         1 ||  4 | Go          |  1 | Dany   |   25 | 男   |    160 |         1 ||  5 | C++         |  1 | Dany   |   25 | 男   |    160 |         1 ||  1 | Java        |  2 | Green  |   23 | 男   |    158 |         2 ||  2 | MySQL       |  2 | Green  |   23 | 男   |    158 |         2 ||  3 | Python      |  2 | Green  |   23 | 男   |    158 |         2 ||  4 | Go          |  2 | Green  |   23 | 男   |    158 |         2 ||  5 | C++         |  2 | Green  |   23 | 男   |    158 |         2 ||  1 | Java        |  3 | Henry  |   23 | 女   |    185 |         1 ||  2 | MySQL       |  3 | Henry  |   23 | 女   |    185 |         1 ||  3 | Python      |  3 | Henry  |   23 | 女   |    185 |         1 ||  4 | Go          |  3 | Henry  |   23 | 女   |    185 |         1 ||  5 | C++         |  3 | Henry  |   23 | 女   |    185 |         1 ||  1 | Java        |  4 | Jane   |   22 | 男   |    162 |         3 ||  2 | MySQL       |  4 | Jane   |   22 | 男   |    162 |         3 ||  3 | Python      |  4 | Jane   |   22 | 男   |    162 |         3 ||  4 | Go          |  4 | Jane   |   22 | 男   |    162 |         3 ||  5 | C++         |  4 | Jane   |   22 | 男   |    162 |         3 ||  1 | Java        |  5 | Jim    |   24 | 女   |    175 |         2 ||  2 | MySQL       |  5 | Jim    |   24 | 女   |    175 |         2 ||  3 | Python      |  5 | Jim    |   24 | 女   |    175 |         2 ||  4 | Go          |  5 | Jim    |   24 | 女   |    175 |         2 ||  5 | C++         |  5 | Jim    |   24 | 女   |    175 |         2 ||  1 | Java        |  6 | John   |   21 | 女   |    172 |         4 ||  2 | MySQL       |  6 | John   |   21 | 女   |    172 |         4 ||  3 | Python      |  6 | John   |   21 | 女   |    172 |         4 ||  4 | Go          |  6 | John   |   21 | 女   |    172 |         4 ||  5 | C++         |  6 | John   |   21 | 女   |    172 |         4 ||  1 | Java        |  7 | Lily   |   22 | 男   |    165 |         4 ||  2 | MySQL       |  7 | Lily   |   22 | 男   |    165 |         4 ||  3 | Python      |  7 | Lily   |   22 | 男   |    165 |         4 ||  4 | Go          |  7 | Lily   |   22 | 男   |    165 |         4 ||  5 | C++         |  7 | Lily   |   22 | 男   |    165 |         4 ||  1 | Java        |  8 | Susan  |   23 | 男   |    170 |         5 ||  2 | MySQL       |  8 | Susan  |   23 | 男   |    170 |         5 ||  3 | Python      |  8 | Susan  |   23 | 男   |    170 |         5 ||  4 | Go          |  8 | Susan  |   23 | 男   |    170 |         5 ||  5 | C++         |  8 | Susan  |   23 | 男   |    170 |         5 ||  1 | Java        |  9 | Thomas |   22 | 女   |    178 |         5 ||  2 | MySQL       |  9 | Thomas |   22 | 女   |    178 |         5 ||  3 | Python      |  9 | Thomas |   22 | 女   |    178 |         5 ||  4 | Go          |  9 | Thomas |   22 | 女   |    178 |         5 ||  5 | C++         |  9 | Thomas |   22 | 女   |    178 |         5 ||  1 | Java        | 10 | Tom    |   23 | 女   |    165 |         5 ||  2 | MySQL       | 10 | Tom    |   23 | 女   |    165 |         5 ||  3 | Python      | 10 | Tom    |   23 | 女   |    165 |         5 ||  4 | Go          | 10 | Tom    |   23 | 女   |    165 |         5 ||  5 | C++         | 10 | Tom    |   23 | 女   |    165 |         5 |+----+-------------+----+--------+------+------+--------+-----------+50 rows in set (0.00 sec)

由运行结果可以看出,tb_course 和 tb_students_info 表交叉连接查询后,返回了 50 条记录。可以想象,当表中的数据较多时,得到的运行结果会非常长,而且得到的运行结果也没太大的意义。所以,通过交叉连接的方式进行多表查询的这种方法并不常用,我们应该尽量避免这种查询。

MySQL 内连接

内连接(INNER JOIN)主要通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接。简单来说,就是利用条件表达式来消除交叉连接的某些数据行。

内连接使用 INNER JOIN 关键字连接两张表,并使用 ON 子句来设置连接条件。如果没有连接条件,INNER JOINCROSS JOIN 在语法上是等同的,两者可以互换。

内连接的语法格式如下:

SELECT  FROM  INNER JOIN  [ON子句]

语法说明如下:

字段名:需要查询的字段名称。

:需要内连接的表名。

INNER JOIN :内连接中可以省略 INNER 关键字,只用关键字 JOIN。

ON 子句:用来设置内连接的连接条件。

INNER JOIN 也可以使用 WHERE 子句指定连接条件,但是 INNER JOIN … ON 语法是官方的标准写法,而且 WHERE 子句在某些时候会影响查询的性能。

多个表内连接时,在 FROM 后连续使用 INNER JOIN 或 JOIN 即可。

内连接可以查询两个或两个以上的表。为了让大家更好的理解,暂时只讲解两个表的连接查询。

示例:

mysql> SELECT s.name,c.course_name FROM tb_students_info s INNER JOIN tb_course c     -> ON s.course_id = c.id;+--------+-------------+| name   | course_name |+--------+-------------+| Dany   | Java        || Green  | MySQL       || Henry  | Java        || Jane   | Python      || Jim    | MySQL       || John   | Go          || Lily   | Go          || Susan  | C++         || Thomas | C++         || Tom    | C++         |+--------+-------------+10 rows in set (0.00 sec)

在这里的查询语句中,两个表之间的关系通过 INNER JOIN 指定,连接的条件使用 ON 子句给出。

注意:当对多个表进行查询时,要在 SELECT 语句后面指定字段是来源于哪一张表。因此,在多表查询时,SELECT 语句后面的写法是表名.列名。另外,如果表名非常长的话,也可以给表设置别名,这样就可以直接在 SELECT 语句后面写上表的别名.列名。

MySQL 外连接

内连接的查询结果都是符合连接条件的记录,而外连接会先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。

外连接可以分为左外连接和右外连接,下面根据实例分别介绍左外连接和右外连接。

左连接

左外连接又称为左连接,使用 LEFT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条件。

左连接的语法格式如下:

SELECT  FROM  LEFT OUTER JOIN  

语法说明如下。

字段名:需要查询的字段名称。

:需要左连接的表名。

LEFT OUTER JOIN:左连接中可以省略 OUTER 关键字,只使用关键字 LEFT JOIN。

ON 子句:用来设置左连接的连接条件,不能省略。

上述语法中,“表1”为基表,“表2”为参考表。左连接查询时,可以查询出“表1”中的所有记录和“表2”中匹配连接条件的记录。如果“表1”的某行在“表2”中没有匹配行,那么在返回结果中,“表2”的字段值均为空值(NULL)。

示例:

在进行左连接查询之前,我们先查看 tb_course 和 tb_students_info 两张表中的数据。SQL 语句和运行结果如下。

mysql> SELECT * FROM tb_course;+----+-------------+| id | course_name |+----+-------------+|  1 | Java        ||  2 | MySQL       ||  3 | Python      ||  4 | Go          ||  5 | C++         ||  6 | HTML        |+----+-------------+6 rows in set (0.00 sec)mysql> SELECT * FROM tb_students_info;+----+--------+------+------+--------+-----------+| id | name   | age  | sex  | height | course_id |+----+--------+------+------+--------+-----------+|  1 | Dany   |   25 | 男   |    160 |         1 ||  2 | Green  |   23 | 男   |    158 |         2 ||  3 | Henry  |   23 | 女   |    185 |         1 ||  4 | Jane   |   22 | 男   |    162 |         3 ||  5 | Jim    |   24 | 女   |    175 |         2 ||  6 | John   |   21 | 女   |    172 |         4 ||  7 | Lily   |   22 | 男   |    165 |         4 ||  8 | Susan  |   23 | 男   |    170 |         5 ||  9 | Thomas |   22 | 女   |    178 |         5 || 10 | Tom    |   23 | 女   |    165 |         5 || 11 | LiMing |   22 | 男   |    180 |         7 |+----+--------+------+------+--------+-----------+11 rows in set (0.00 sec)

在 tb_students_info 表和 tb_course 表中查询所有学生姓名和相对应的课程名称,包括没有课程的学生,SQL 语句和运行结果如下。

mysql> SELECT s.name,c.course_name FROM tb_students_info s LEFT OUTER JOIN tb_course c     -> ON s.`course_id`=c.`id`;+--------+-------------+| name   | course_name |+--------+-------------+| Dany   | Java        || Henry  | Java        || NULL   | Java        || Green  | MySQL       || Jim    | MySQL       || Jane   | Python      || John   | Go          || Lily   | Go          || Susan  | C++         || Thomas | C++         || Tom    | C++         || LiMing | NULL        |+--------+-------------+12 rows in set (0.00 sec)

可以看到,运行结果显示了 12 条记录,name 为 LiMing 的学生目前没有课程,因为对应的 tb_course 表中没有该学生的课程信息,所以该条记录只取出了 tb_students_info 表中相应的值,而从 tb_course 表中取出的值为 NULL。

右连接

右外连接又称为右连接,右连接是左连接的反向连接。使用 RIGHT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条件。

右连接的语法格式如下:

SELECT  FROM  RIGHT OUTER JOIN  

语法说明如下。

字段名:需要查询的字段名称。

:需要右连接的表名。

RIGHT OUTER JOIN:右连接中可以省略 OUTER 关键字,只使用关键字 RIGHT JOIN。

ON 子句:用来设置右连接的连接条件,不能省略。

与左连接相反,右连接以“表2”为基表,“表1”为参考表。右连接查询时,可以查询出“表2”中的所有记录和“表1”中匹配连接条件的记录。如果“表2”的某行在“表1”中没有匹配行,那么在返回结果中,“表1”的字段值均为空值(NULL)。

示例:

在 tb_students_info 表和 tb_course 表中查询所有课程,包括没有学生的课程,SQL 语句和运行结果如下。

mysql> SELECT s.name,c.course_name FROM tb_students_info s RIGHT OUTER JOIN tb_course c     -> ON s.`course_id`=c.`id`;+--------+-------------+| name   | course_name |+--------+-------------+| Dany   | Java        || Green  | MySQL       || Henry  | Java        || Jane   | Python      || Jim    | MySQL       || John   | Go          || Lily   | Go          || Susan  | C++         || Thomas | C++         || Tom    | C++         || NULL   | HTML        |+--------+-------------+11 rows in set (0.00 sec)

可以看到,结果显示了 11 条记录,名称为 HTML 的课程目前没有学生,因为对应的 tb_students_info 表中并没有该学生的信息,所以该条记录只取出了 tb_course 表中相应的值,而从 tb_students_info 表中取出的值为 NULL。

多个表左/右连接时,在 ON 子句后连续使用 LEFT/RIGHT OUTER JOIN 或 LEFT/RIGHT JOIN 即可。

使用外连接查询时,一定要分清需要查询的结果,是需要显示左表的全部记录还是右表的全部记录,然后选择相应的左连接和右连接。

【相关推荐:mysql视频教程】

以上就是mysql怎么查询两个表的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/183632.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
最新一期安兔兔车机版性能榜单发布 小米SU7位列第五    
上一篇 2026年9月4日 03:07:50
探秘WebMan技术在房地产行业中的应用和优化
下一篇 2026年9月4日 03:12:45

相关推荐

  • 如何在mysql中备份分区表

    使用mysqldump可备份MySQL分区表,自动保留分区结构和数据,结合–single-transaction等选项确保一致性;物理备份可用Percona XtraBackup实现高效热备,支持完整恢复分区元数据和ibd文件。 在 MySQL 中备份分区表,本质上和备份普通表方法一致,…

    2026年9月12日
    100
  • 如何在mysql中使用COUNT统计满足条件的记录

    使用WHERE、CASE、IF和COUNT(DISTINCT)可实现MySQL中灵活的条件计数,关键是利用COUNT只计非空值的特性,准确统计目标记录。 在 MySQL 中,COUNT() 函数用于统计查询结果中的记录数量。当你需要统计满足特定条件的记录时,可以通过结合 CASE 语句、IF 函数或…

    2026年9月12日
    000
  • 如何在mysql中开发任务分配管理系统

    答案:基于MySQL设计任务分配系统需构建用户表和任务表,通过assignee_id关联实现任务分配;利用SQL完成任务的增删改查操作;结合角色字段控制权限,管理员可管理所有任务,普通成员仅限个人任务;支持项目分类、评论、日志等扩展功能,并在关键字段创建索引以提升查询性能。 在 MySQL 中开发任…

    2026年9月12日
    000
  • Linux怎么查看所有已安装的服务列表

    Linux怎么查看所有已安装的服务列表Linux怎么查看所有已安装的服务列表Linux怎么查看所有已安装的服务列表Linux怎么查看所有已安装的服务列表

    在Linux系统里,想知道到底有哪些服务在跑,或者哪些服务准备开机启动,这其实是个很基础但又很关键的问题。简单来说,最直接的办法就是用 systemctl 命令,它是现代Linux发行版(比如Ubuntu、CentOS、Debian等,只要是基于systemd的)管理服务的主力。敲一个 system…

    2026年9月12日 用户投稿
    000
  • 如何在mysql中使用IF条件函数实现逻辑判断

    MySQL的IF函数用于根据条件返回不同值,语法为IF(条件, 真值, 假值),常用于SELECT、UPDATE、INSERT语句中实现简单逻辑判断,如成绩及格判定、商品状态更新等,支持嵌套实现多分支判断,适用于轻量级条件处理,复杂场景建议使用CASE语句。 在MySQL中,IF 是一个内置的条件函…

    2026年9月12日
    100
  • Swoole如何连接MySQL?数据库操作有哪些方法?

    Swoole连接MySQL有两种方式:一是使用Swoole异步MySQL客户端,性能更优但需学习成本;二是使用PHP的MySQL扩展(如mysqli或PDO)结合协程,易于上手但性能稍弱。异步客户端通过SwooleMySQLClient类实现,需设置连接参数并使用回调处理结果,适用于高并发场景。例如…

    2026年9月12日
    000
  • 如何在docker环境中快速部署mysql集群

    首先利用Docker Compose编排MySQL主从实例,通过配置文件设置server-id、GTID及二进制日志,确保主从复制基础环境;接着在docker-compose.yml中定义master和slave服务,挂载各自配置与数据目录,创建自定义网络实现容器互通;启动容器后,在主库创建复制用户…

    2026年9月12日
    100
  • 如何在mysql中实现用户权限分级管理

    答案:通过创建不同权限级别用户并结合MySQL 8.0角色机制,实现数据库权限分级管理。首先按职责创建管理员、开发人员和只读用户,分别授予全局、数据库或表级权限;接着利用角色打包权限,提升授权效率;然后细化控制到库、表甚至列级别;最后遵循最小权限原则,限制登录IP,定期审查权限,开启审计日志,确保安…

    2026年9月12日
    100
  • 如何在mysql中使用别名简化SQL语句

    别名可简化SQL并提升可读性,用于列和表。列别名用AS定义输出名称,如SELECT user_name AS 姓名;表别名简化多表连接,如FROM users u JOIN orders o;别名可用于ORDER BY和GROUP BY,但不可在WHERE中引用,仅当前查询有效。 在MySQL中使用…

    2026年9月12日
    200
  • 如何在mysql中调试备份恢复错误

    首先查看MySQL错误日志和终端报错信息,定位如表不存在或语法错误;接着验证备份文件完整性,检查是否损坏或不完整;然后在临时库中模拟小范围恢复测试,避免影响生产环境;最后针对“表已存在”“权限不足”等常见问题采取对应措施,确保字符集、存储引擎一致,逐步排查解决。 当在 MySQL 中进行备份恢复出现…

    2026年9月12日
    000
  • Linux如何启动和停止指定服务

    Linux如何启动和停止指定服务Linux如何启动和停止指定服务Linux如何启动和停止指定服务Linux如何启动和停止指定服务

    答案是使用systemctl命令管理服务。启动服务用sudo systemctl start 服务名称;停止服务用sudo systemctl stop 服务名称;重启服务用sudo systemctl restart 服务名称,会中断服务;重载配置用sudo systemctl reload 服务…

    2026年9月12日 用户投稿
    100
  • mysql如何使用mysqlpump恢复数据库

    mysqlpump恢复数据库即执行其生成的SQL脚本,通过mysql客户端导入,需确保服务运行、权限充足及字符集一致;与mysqldump相比,mysqlpump支持并行备份、更优的对象处理和GTID支持,备份文件常含CREATE DATABASE和USE语句,可简化导入;恢复大型数据库时应禁用索引…

    2026年9月12日
    000
  • Swoole如何做链路追踪?调用链如何监控?

    在Swoole中实现链路追踪需通过协程上下文透传Trace ID和Span ID,利用SwooleCoroutine::getContext()保证上下文隔离,结合OpenTelemetry等标准进行埋点、跨服务传递与异步上报,以应对高并发下上下文混乱、链路断裂等挑战,确保调用链完整。 在Swool…

    2026年9月12日
    000
  • 如何在mysql中实现客户关系管理项目

    答案是设计合理的数据库结构并配合应用程序实现CRM功能。首先创建客户、联系记录、销售机会等核心表,使用InnoDB引擎和外键关联;接着通过SQL语句建立表间关系,支持高效查询;然后实现如查看沟通记录、统计销售阶段金额、筛选待跟进客户等常用操作;最后结合Python、PHP等后端语言与前端构建完整应用…

    2026年9月12日
    000
  • 如何在mysql中使用存储引擎提高并发性能

    选择InnoDB存储引擎可显著提升MySQL并发性能,因其支持行级锁和事务,避免MyISAM的表级锁阻塞问题;通过缩短事务时间、合理设置隔离级别(如READ COMMITTED)、利用MVCC快照读减少锁争用,实现高并发读写。 在 MySQL 中,存储引擎直接影响数据库的并发性能。选择合适的存储引擎…

    2026年9月12日
    100
  • YII框架的多租户是什么?YII框架如何支持SaaS?

    答案:Yii框架通过共享数据库加租户ID隔离、独立数据库或Schema等策略实现多租户,结合自定义BaseActiveRecord、查询作用域、行为和事件系统确保数据隔离,利用子域名或路径路由识别租户,并通过RBAC、模块化设计和缓存优化支持SaaS应用的可扩展性与安全性。 YII框架的多租户,简单…

    2026年9月12日
    100
  • 如何在mysql中分析存储引擎对磁盘IO影响

    InnoDB因事务日志和缓冲池机制产生较多顺序与随机IO,MyISAM则因数据直接读写磁盘导致高频随机IO;通过iostat、iotop和performance_schema监控,结合sysbench压测不同负载下QPS/TPS与物理读写次数,可明确各引擎IO表现差异,关键参数如innodb_flu…

    2026年9月12日
    100
  • Swoole服务器如何搭建?Swoole配置参数详解

    答案:搭建Swoole服务器需准备PHP环境并安装Swoole扩展,通过PECL安装后启用扩展,编写基于协程模型的HTTP服务器代码,设置worker_num等核心参数,运行测试服务;常见问题包括PHP版本不兼容、编译依赖缺失、守护进程配置错误及协程上下文使用不当,需针对性解决;关键配置如worke…

    2026年9月12日
    100
  • 如何在安装mysql时配置字符编码一致性

    安装MySQL时需统一配置为utf8mb4以支持完整UTF-8,包括emoji。1. 确认系统环境支持UTF-8;2. 在my.cnf或my.ini中设置server、client和mysql段的字符集为utf8mb4;3. 初始化数据库时确保使用utf8mb4创建库;4. 登录后通过SHOW VA…

    2026年9月12日
    100
  • 如何使用mysql开发项目管理任务表

    首先设计包含任务基本信息的主表tasks,包含id、title、status、priority等字段,并通过project_id和assignee_id关联项目与用户;为支持多对多关系创建user_tasks中间表;常用操作包括按项目或负责人查询任务、筛选高优先级任务、更新状态及查找即将到期任务;结…

    2026年9月12日
    100

发表回复

登录后才能评论
关注微信