• 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支持这种语法。
    在这里插入图片描述

  • 相关阅读:
    MySQL窗口函数——让查询变得更简单
    【计算机网络】交换机工作原理
    小程序websocket接入
    如何实现Android视音频数据对接到GB28181平台(SmartGBD)
    JavaScript高阶(属性操作|样式操作|事件)
    Postman接口测试工具详解
    简单的Windows程序设计
    渗透中 POC、EXP、Payload、Shellcode 的区别
    数据库基本操作(一)
    vue3 腾讯地图输入地址或拖动标记获取经纬度
  • 原文地址:https://blog.csdn.net/qzw752890913/article/details/126284153