MySQL教程
  • [MySQL教程]MySQL 教程
  • [MySQL教程]MySQL 安装
  • [MySQL教程]MySQL 管理
  • [MySQL教程]MySQL PHP 语法
  • [MySQL教程]MySQL 连接
  • [MySQL教程]MySQL 创建数据库
  • [MySQL教程]MySQL 删除数据库
  • [MySQL教程]MySQL 选择数据库
  • [MySQL教程]MySQL 数据类型
  • [MySQL教程]MySQL 创建数据表
  • [MySQL教程]MySQL 删除数据表
  • [MySQL教程]MySQL 插入数据
  • [MySQL教程]MySQL 查询数据
  • [MySQL教程]MySQL WHERE 子句
  • [MySQL教程]MySQL UPDATE 查询
  • [MySQL教程]MySQL DELETE 语句
  • [MySQL教程]MySQL LIKE 子句
  • [MySQL教程]MySQL UNION 操作符
  • [MySQL教程]MySQL 排序
  • [MySQL教程]MySQL GROUP BY 语句
  • [MySQL教程]MySQL 连接的使用
  • [MySQL教程]MySQL NULL 值处理
  • [MySQL教程]MySQL 正则表达式
  • [MySQL教程]MySQL 事务
  • [MySQL教程]MySQL ALTER命令
  • [MySQL教程]MySQL 索引
  • [MySQL教程]MySQL 临时表
  • [MySQL教程]MySQL 复制表
  • [MySQL教程]MySQL 元数据
  • [MySQL教程]MySQL 序列使用
  • [MySQL教程]MySQL 处理重复数据
  • [MySQL教程]MySQL 及 SQL 注入
  • [MySQL教程]MySQL 导出数据
  • [MySQL教程]MySQL 导入数据
  • 直达腾讯云服务器
    腾讯云服务器,数据库,短信等热销产品限量秒杀;新购爆款3折起;
    腾讯云数据库MySQL入门机型仅12元/月
    腾讯云云服务器新购特惠,最低2折起,1核1G3年仅794.73元,即0.73元/日。
    腾讯云国际顶级CA机构SSL证书8.8折,云解析买一年最高送半年!
    腾讯云为数百万企业和开发者提供安全、稳定的云服务器、云数据库、CDN等云服务
    腾讯云服务器安全可靠高性能,多种配置供您选择
    腾讯云数据库性能卓越稳定可靠,为您解决数据库运维难题
    阿里云服务器入口
    180天免费用腾讯云服务器马上领取
    您当前位置:狗鱼MySQL教程 >> 数据库 >> MySQL教程 >> MySQL 连接的使用
    MySQL 连接的使用
    更新日期: 2017年07月18日 来源: 本站原创 作者: 佚名 阅读:
    上一篇MySQL GROUP BY 语句 下一篇:MySQL NULL 值处理

    Mysql 连接的使用

    在前几章节中,我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。

    本章节我们将向大家介绍如何使用 mysql 的 JOIN 在两个或多个表中查询数据。

    你可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。

    JOIN 按照功能大致分为如下三类:

    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    •  
    • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    •  
    • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
    •  

    本章节使用的数据库结构及数据下载:sssoob-mysql-join-test.sql。


    在命令提示符中使用 INNER JOIN

    我们在SSSOOB数据库中有两张表 tcount_tbl 和 sssoob_tbl。两张数据表数据如下:

    实例

    尝试以下实例:

    测试实例数据

    mysql> use SSSOOB;

    Database changed

    mysql> SELECT * FROM tcount_tbl;
    +---------------+--------------+
    |
    sssoob_author | sssoob_count |
    +---------------+--------------+
    | 教程 |
    10 |
    |
    SSSOOB.COM | 20 |
    |
    Google | 22 |
    +---------------+--------------+


    3 rows in set (0.01 sec)

    mysql> SELECT * from sssoob_tbl;
    +-----------+---------------+---------------+-----------------+
    |
    sssoob_id | sssoob_title | sssoob_author | submission_date |
    +-----------+---------------+---------------+-----------------+
    |
    1 | 学习 PHP | 教程 | 2017-04-12 |
    |
    2 | 学习 MySQL | 教程 | 2017-04-12 |
    |
    3 | 学习 java | SSSOOB.COM | 2015-05-01 |
    |
    4 | 学习 python | SSSOOB.COM | 2016-03-06 |
    |
    5 | 学习 C | FK | 2017-04-05 |
    +-----------+---------------+---------------+-----------------+


    5 rows in set (0.01 sec)

    接下来我们就使用MySQL的INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)

    来连接以上两张表来读取sssoob_tbl表中所有sssoob_author字段在tcount_tbl表对应的sssoob_count字段值:

    INNER JOIN

    mysql> SELECT a.sssoob_id, a.sssoob_author, b.sssoob_count
    FROM sssoob_tbl
    a INNER JOIN tcount_tbl
    b ON a.sssoob_author = b.sssoob_author;
    +-------------+-----------------+----------------+
    |
    a.sssoob_id | a.sssoob_author | b.sssoob_count |
    +-------------+-----------------+----------------+
    |
    1 | 教程 | 10 |
    |
    2 | 教程 | 10 |
    |
    3 | SSSOOB.COM | 20 |
    |
    4 | SSSOOB.COM | 20 |
    +-------------+-----------------+----------------+


    4 rows in set (0.00 sec)

    以上 SQL 语句等价于:

    WHERE 子句

    mysql> SELECT a.sssoob_id, a.sssoob_author, b.sssoob_count
    FROM sssoob_tbl a, tcount_tbl b
    WHERE a.sssoob_author = b.sssoob_author;

    +-------------+-----------------+----------------+
    |
    a.sssoob_id | a.sssoob_author | b.sssoob_count |
    +-------------+-----------------+----------------+
    |
    1 | 教程 | 10 |
    |
    2 | 教程 | 10 |
    |
    3 | SSSOOB.COM | 20 |
    |
    4 | SSSOOB.COM | 20 |
    +-------------+-----------------+----------------+


    4 rows in set (0.01 sec)

    MySQL 连接的使用


    MySQL LEFT JOIN

    MySQL left join 与 join 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。

    实例

    尝试以下实例,以 sssoob_tbl 为左表,tcount_tbl 为右表,理解 MySQL LEFT JOIN 的应用:

    LEFT JOIN

    mysql> SELECT a.sssoob_id, a.sssoob_author, b.sssoob_count
    FROM sssoob_tbl a LEFT JOIN tcount_tbl b
    ON a.sssoob_author = b.sssoob_author;

    +-------------+-----------------+----------------+
    |
    a.sssoob_id | a.sssoob_author | b.sssoob_count |
    +-------------+-----------------+----------------+
    |
    1 | 教程 | 10 |
    |
    2 | 教程 | 10 |
    |
    3 | SSSOOB.COM | 20 |
    |
    4 | SSSOOB.COM | 20 |
    |
    5 | FK | NULL |
    +-------------+-----------------+----------------+


    5 rows in set (0.01 sec)

    以上实例中使用了 LEFT JOIN,该语句会读取左边的数据表 sssoob_tbl 的所有选取的字段数据,即便在右侧表 tcount_tbl中 没有对应的 sssoob_author 字段值。

    MySQL 连接的使用

    MySQL RIGHT JOIN

    MySQL RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据。

    实例

    尝试以下实例,以 sssoob_tbl 为左表,tcount_tbl 为右表,理解MySQL RIGHT JOIN的应用:

    RIGHT JOIN

    mysql> SELECT a.sssoob_id, a.sssoob_author, b.sssoob_count
    FROM sssoob_tbl a RIGHT JOIN tcount_tbl b
    ON a.sssoob_author = b.sssoob_author;

    +-------------+-----------------+----------------+
    |
    a.sssoob_id | a.sssoob_author | b.sssoob_count |
    +-------------+-----------------+----------------+
    |
    1 | 教程 | 10 |
    |
    2 | 教程 | 10 |
    |
    3 | SSSOOB.COM | 20 |
    |
    4 | SSSOOB.COM | 20 |
    |
    NULL | NULL | 22 |
    +-------------+-----------------+----------------+


    5 rows in set (0.01 sec)

    以上实例中使用了 RIGHT JOIN,该语句会读取右边的数据表 tcount_tbl 的所有选取的字段数据,即便在左侧表 sssoob_tbl 中没有对应的sssoob_author 字段值。

    MySQL 连接的使用

    在 PHP 脚本中使用 JOIN

    PHP 中使用 mysqli_query() 函数来执行 SQL 语句,你可以使用以上的相同的 SQL 语句作为 mysqli_query() 函数的参数。

    尝试如下实例:

    MySQL ORDER BY 测试:

    <?php
    $dbhost = 'localhost:3306';

    // mysql服务器主机地址

    $dbuser = 'root';

    // mysql用户名

    $dbpass = '123456';

    // mysql用户名密码

    $conn = mysqli_connect($dbhost, $dbuser, $dbpass);

    if(! $conn )
    {
    die('连接失败: ' . mysqli_error($conn));

    }
    // 设置编码,防止中文乱码
    mysqli_query($conn , "set names utf8");

    $sql = 'SELECT a.sssoob_id, a.sssoob_author, b.sssoob_count FROM sssoob_tbl a INNER JOIN tcount_tbl b ON a.sssoob_author = b.sssoob_author';

    mysqli_select_db( $conn, 'SSSOOB' );

    $retval = mysqli_query( $conn, $sql );

    if(! $retval )

    {

    die('无法读取数据: ' . mysqli_error($conn));

    }

    echo '<h2>教程 MySQL JOIN 测试<h2>';
    echo '<table border="1"><tr><td>教程 ID</td><td>作者</td><td>登陆次数</td></tr>';

    while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))

    {

    echo
    "<tr><td> {$row['sssoob_id']}</td> ".
    "<td>{$row['sssoob_author']} </td> ".
    "<td>{$row['sssoob_count']} </td> ".
    "</tr>";
    }
    echo '</table>';
    mysqli_close($conn);
    ?>

    输出结果如下图所示:

     

    感觉本站内容不错,读后有收获?

    我要小额赞助,鼓励提供更好的内容教程

    上一篇MySQL GROUP BY 语句 下一篇:MySQL NULL 值处理
    Copyright 2013-2017 Powered by 狗鱼MySQL教程,All Rights Reserved.
    广州相如计算机科技有限有限公司 版权所有 粤ICP备08130661号-4
    售前咨询:020-38667011 手机:13711588918