• MySQL的多表查询(4):SQL99下的多表查询



    SQL主要有两个标准: SQL92SQL99
    一般来说,SQL92的形式更简单,但SQL语句的可读性较差;SQL99相比于SQL92,语法更加复杂,但可读性更强。

    SQL99使用JOIN...ON...实现多表查询。

    1. 内连接, JOIN...ON...,同INNER JOIN...ON...
    2. 左外连接, LEFT JOIN...ON...,同LEFT OUTER JOIN...ON...
    3. 右外连接,RIGHT JOIN...ON...,同RIGHT OUTER JOIN...ON...

    SQL99下的内连接

    1. 查询员工的id及其所在部门名称JOIN...ON...
      INNER JOIN...ON...,可简写为JOIN...ON...
    # 查询员工的id及其所在部门名称
    # JOIN...ON...
    SELECT employee_id,department_name
    FROM employees e JOIN departments d
    ON e.department_id = d.department_id; -- 返回106行记录。
    # INNER JOIN...ON...
    SELECT employee_id,department_name
    FROM employees e INNER JOIN departments d
    ON e.department_id = d.department_id; -- 返回106行记录。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 查询员工的id、所在部门名称、所在城市JOIN...ON...JOIN...ON...或者JOIN ... JOIN ...ON ...AND...
    # JOIN...ON...JOIN...ON...
    SELECT employee_id,department_name,city
    FROM employees e JOIN departments d
    ON e.department_id = d.department_id
    JOIN locations l
    ON d.location_id = l.location_id; -- 返回106行记录
    
    # JOIN ... JOIN ...ON ...AND...
    SELECT e.last_name,d.department_name,l.city
    FROM employees e JOIN departments d JOIN locations l
    ON e.department_id = d.department_id
    AND d.location_id = l.location_id; -- 返回106行记录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    SQL99下的外连接

    左外连接

    查询所有员工的id及其所在部门名称LEFT JOIN...ON...,左外连接。
    LEFT OUTER JOIN...ON...,可简写为LEFT JOIN...ON...

    # LEFT JOIN...ON
    SELECT employee_id,department_name
    FROM employees e LEFT JOIN departments d
    ON e.department_id = d.department_id; -- 返回107行记录
    
    # LEFT OUTER JOIN...ON
    SELECT employee_id,department_name
    FROM employees e LEFT OUTER JOIN departments d
    ON e.department_id = d.department_id; -- 返回107行记录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    右外连接

    查询所有部门及其所有员工的idRIGHT JOIN...ON...,右外连接。
    RIGHT OUTER JOIN...ON...,可简写为RIGHT JOIN...ON...

    SELECT employee_id,department_name
    FROM employees e RIGHT JOIN departments d
    ON e.department_id = d.department_id;-- 返回122行记录
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    满外连接

    SELECT employee_id,department_name
    FROM employees e FULL JOIN departments d
    ON e.department_id = d.department_id;
    /*
    报错:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL JOIN departments d
    ON e.department_id = d.department_id' at line 2
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    SQL99下满外连接,使用FULL JOIN ...ON,但MySQL不支持SQL99满外连接的语法,Orcale支持这种语法。
    在这里插入图片描述

  • 相关阅读:
    Python模块ADB的, 已经 pyadb
    作业调度FluentScheduler的使用
    Jupyter Notebook出错提示An error occurred while retrieving package information解决办法
    YOLOV5学习笔记(五)——使用代码detect train讲解
    如何判断一款GameFi游戏是否有发展空间?
    【ASP.NET Core】标记帮助器——抽象层
    Java序列化以及反序列化
    SpringBoot实现分页的四种方式
    powerlevel10k 颜色和图标的自定义设置
    Rust权威指南之通用集合类型
  • 原文地址:https://blog.csdn.net/qzw752890913/article/details/126284153