美文网首页
MySQL 在外连接中用 or 逻辑

MySQL 在外连接中用 or 逻辑

作者: 只是甲 | 来源:发表于2020-11-09 09:35 被阅读0次

备注:测试数据库版本为MySQL 8.0

一.需求

返回部门10 和 20中所有员工的姓名和部门信息,并返回部门30和40(但不包含员工信息)的部门信息。

二.解决方案

将 OR 条件移到 JOIN子句中:

select e.ename, d.deptno, d.dname, d.loc
from dept d
left join emp e
on (d.deptno = e.deptno
and (e.deptno = 10 or e.deptno = 20)
)
order by 2;

另外,还可以先用 emp.deptno 进行筛选,然后进行外部联接":

select e.ename, d.deptno, d.dname, d.loc
from dept d
left join
( select ename , deptno
from emp
where deptno in (10,20)
) e on (e.deptno = d.deptno)
order by 2;

测试记录

mysql> select e.ename, d.deptno, d.dname, d.loc
    ->    from dept d
    ->      left join emp e
    ->       on (d.deptno = e.deptno
    ->       and (e.deptno = 10 or e.deptno = 20)
    ->       )
    -> order by 2;
+--------+--------+------------+----------+
| ename  | deptno | dname      | loc      |
+--------+--------+------------+----------+
| CLARK  |     10 | ACCOUNTING | NEW YORK |
| KING   |     10 | ACCOUNTING | NEW YORK |
| MILLER |     10 | ACCOUNTING | NEW YORK |
| SMITH  |     20 | RESEARCH   | DALLAS   |
| JONES  |     20 | RESEARCH   | DALLAS   |
| SCOTT  |     20 | RESEARCH   | DALLAS   |
| ADAMS  |     20 | RESEARCH   | DALLAS   |
| FORD   |     20 | RESEARCH   | DALLAS   |
| NULL   |     30 | SALES      | CHICAGO  |
| NULL   |     40 | OPERATIONS | BOSTON   |
+--------+--------+------------+----------+
10 rows in set (0.01 sec)
mysql>
mysql> select e.ename, d.deptno, d.dname, d.loc
    ->    from dept d
    ->    left join
    ->          ( select ename , deptno
    ->              from emp
    ->            where deptno in (10,20)
    ->          ) e on (e.deptno = d.deptno)
    -> order by 2;
+--------+--------+------------+----------+
| ename  | deptno | dname      | loc      |
+--------+--------+------------+----------+
| CLARK  |     10 | ACCOUNTING | NEW YORK |
| KING   |     10 | ACCOUNTING | NEW YORK |
| MILLER |     10 | ACCOUNTING | NEW YORK |
| SMITH  |     20 | RESEARCH   | DALLAS   |
| JONES  |     20 | RESEARCH   | DALLAS   |
| SCOTT  |     20 | RESEARCH   | DALLAS   |
| ADAMS  |     20 | RESEARCH   | DALLAS   |
| FORD   |     20 | RESEARCH   | DALLAS   |
| NULL   |     30 | SALES      | CHICAGO  |
| NULL   |     40 | OPERATIONS | BOSTON   |
+--------+--------+------------+----------+
10 rows in set (0.00 sec)

相关文章

  • MySQL 在外连接中用 or 逻辑

    备注:测试数据库版本为MySQL 8.0 一.需求 返回部门10 和 20中所有员工的姓名和部门信息,并返回部门3...

  • Node | 使用 Node 连接 MySQL

    Node | 使用 Node 连接 MySQL 首先安装 node 中用于处理 sql 的 mysql 包 当下载...

  • MYSQL 逻辑架构

    MYSQL逻辑架构 1 .连接器:连接器负责跟客户端建立连接、、维持和管理连接。我们使用mysql -h -u -...

  • MySQL架构

    MySQL逻辑架构 连接/线程处理 连接前先验证客户端 连接后验证客户...

  • [linux] MySQL开启远程访问权限及防火墙开放3306端

    在Linux中装上mysql之后,发现windows中用navicat连接数据库失败,这是由于默认mysql的用户...

  • 2、mysql系统结构

    mysql逻辑架构 mysql数据库逻辑结构图如下: 该图中主要模块和功能如下: 连接器用户客户端连接处理,授权认...

  • Python3:pymysql数据库

    pymysql数据库连接 Note:PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的...

  • 配置外网可以连接服务器上的mysql

    目标:设置root用户可以在外面访问 步骤: 1:root身份连接mysql mysql -uroot -...

  • Mysql架构

    Mysql逻辑架构 Mysql是三层的逻辑架构,如下图 第一层:连接/线程处理连接处理器,授权认证,安全 第二层:...

  • Mysql基础复习

    mysql基础 mysql逻辑架构 1.连接层:与客户端进行连接的服务,主要完成一些类似连接处理,授权认证 及相关...

网友评论

      本文标题:MySQL 在外连接中用 or 逻辑

      本文链接:https://www.haomeiwen.com/subject/sdxtmktx.html