• SQL多表联查总结


    交叉连接:(不常用)
    返回两个表的笛卡尔乘积(也即全组合排列)中符合查询条件的数据行。

    内连接
    返回连接表中符合连接条件和查询条件的数据行。

    左外连接
    返回符合连接条件和查询条件(即:内连接)的数据行,且还返回左表中不符合连接条件但符合查询条件的数据行。

    右外连接
    返回符合连接条件和查询条件(即:内连接)的数据行,且还返回右表中不符合连接条件但符合查询条件的数据行。

    全外连接(不常用,MySQL不支持)
    返回符合连接条件和查询条件(即:内连接)的数据行,且还返回左表中不符合连接条件但符合查询条件的数据行以及右表中不符合连接条件但符合查询条件的数据行。

    例子

    表结构和数据:
    users表

    id name
    1 李四
    2 王五
    4 张三

    logs表

    id user_id log
    1 1 操作了A
    2 1 操作了B
    3 2 操作了C
    4 2 操作了D
    5 3 操作了E

    交叉连接:
    语句

    SELECT
    a.`id`,
    a.`name`,
    b.`log`
    FROM
    `users` AS a,
    `logs` AS b

    结果

    id name log
    1 李四 操作了A
    2 王五 操作了A
    4 张三 操作了A
    1 李四 操作了B
    2 王五 操作了B
    4 张三 操作了B
    1 李四 操作了C
    2 王五 操作了C
    4 张三 操作了C
    1 李四 操作了D
    2 王五 操作了D
    4 张三 操作了D
    1 李四 操作了E
    2 王五 操作了E
    4 张三 操作了E

    内连接:
    语句

    SELECT
    a.`id`,
    a.`name`,
    b.`log`
    FROM
    `users` AS a
    INNER JOIN `logs` AS b ON a.`id` = b.`user_id`

    结果

    id name log
    1 李四 操作了A
    1 李四 操作了B
    2 王五 操作了C
    2 王五 操作了D

    左外连接:
    语句

    SELECT
    a.`id`,
    a.`name`,
    b.`log`
    FROM
    `users` AS a
    LEFT JOIN `logs` AS b ON a.`id` = b.`user_id`

    结果

    id name log
    1 李四 操作了A
    1 李四 操作了B
    2 王五 操作了C
    2 王五 操作了D
    4 张三 NULL

    右外连接:
    语句

    SELECT
    a.`id`,
    a.`name`,
    b.`log`
    FROM
    `users` AS a
    RIGHT JOIN `logs` AS b ON a.`id` = b.`user_id`

    结果

    id name log
    1 李四 操作了A
    1 李四 操作了B
    2 王五 操作了C
    2 王五 操作了D
    NULL NULL 操作了E
  • 相关阅读:
    Linux下nginx 的常用命令
    Mybatis generator 自动生成代码(2)
    Android Retrofit2 网路编程
    Android webView输出自定义网页
    Android Studio OkHttpClient使用
    Android Studio SVN使用
    Android Toolbar的使用 顶部标题栏+后退键
    Android DrawLayout + ListView 的使用(一)
    RabbitMQ配置与安装
    Struts2拦截器
  • 原文地址:https://www.cnblogs.com/itZhy/p/7454718.html
Copyright © 2020-2023  润新知