mysql快速精通(四)多表查询

主打一个实用

一. 连接查询

  1. 交叉连接

    交叉连接返回两个表的笛卡尔积,即每个表的每一行与另一个表的每一行组合

    语法:

    SELECT *FROM table1 CROSS JOIN table2;
    
  2. 内连接

    查询两张表都存在的数据,即排除两张表的未匹配部分

    语法:

    SELECT 字段名 FROM 左表 INNER JOIN 右表 ON 条件;
    
  3. 外连接

    a. 左外连接

    保留左表部分(包括其未匹配部分),可以通过加上右表对应字段等于空的条件排除交集部分

    语法:

     SELECT 字段名 FROM 左表 LEFT OUTER JOIN 右表 ON 条件
    

    b. 右外连接

    保留右表部分(包括其未匹配部分),可以通过加上左表对应字段等于空的条件排除交集部分

    语法:

     SELECT 字段名 FROM 左表 RIGHT OUTER JOIN 右表 ON 条件
    
  4. 自连接

自连接算是外连接的一种特殊情况,这里单独提出来,所用语法与交叉连接相似

自连接是指连接同一个表的两个不同实例,用于在同一个表中比较不同行之间的数据,例如我需要查询表中工资为平均值的员工姓名,由于在where里面不能使用聚合函数,所以无法通过单表实现,但可以借助自连接实现

SELECT columns
FROM table1 AS alias1
JOIN table1 AS alias2 ON alias1.column = alias2.column;
  1. 全外连接

保留两表所有行,在mysql里面需要用UNION实现,UNION会取并集并去除,所以可以直接将左连接与右连接并起来

语法:

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column
UNION
SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column

二. 子查询

  1. 单行子查询

使用单行运算符的子查询,"= > >= < <= != "

举例:

select * from emp where salary>(select salary from emp where name='眨眼睛')
  1. 多行子查询

同理,“in、any、all”

举例

# 查询工资高于5000的员工(使用in)
SELECT dept.name FROM dept WHERE dept.id IN (SELECT dept_id FROM emp WHERE salary > 5000)

# 查询工资在眨眼睛以上的所有员工(使用any)
select name,salary from emp where salary >=any(select salary from emp where name='眨眼睛')

# 查询工资比眨眼睛高的所有员工(使用all)
select name,salary from emp where salary >all(select salary from emp where name='眨眼睛')
  1. 多列子查询
# 查询部门在纽约并且入职时间在xxx时间以后的员工信息
SELECT 
    emp.id AS emp_id,
    emp.name AS emp_name,
    emp.salary AS emp_salary,
    dept.id AS dept_id,
    dept.name AS dept_name
FROM 
    employees emp,
    (SELECT * FROM departments WHERE location = 'New York') AS dept
WHERE 
    emp.department_id = dept.id
    AND emp.join_date > '2011-01-01';

相关推荐

  1. mysql快速精通查询

    2024-07-14 12:18:03       24 阅读
  2. MySQL - 查询

    2024-07-14 12:18:03       61 阅读
  3. MySQL-查询

    2024-07-14 12:18:03       68 阅读
  4. MySQL查询

    2024-07-14 12:18:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 12:18:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 12:18:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 12:18:03       58 阅读
  4. Python语言-面向对象

    2024-07-14 12:18:03       69 阅读

热门阅读

  1. 如何隐藏 Ubuntu 顶部状态栏

    2024-07-14 12:18:03       31 阅读
  2. springboot2——功能和原理

    2024-07-14 12:18:03       22 阅读
  3. Oracle 数据清理

    2024-07-14 12:18:03       22 阅读
  4. win32:第一个窗口程序-初始化实例(part.5)

    2024-07-14 12:18:03       26 阅读
  5. Flask与Celery实现Python调度服务

    2024-07-14 12:18:03       22 阅读
  6. `speech_recognition` 是一个流行的库

    2024-07-14 12:18:03       21 阅读
  7. 致十年后的自己

    2024-07-14 12:18:03       14 阅读
  8. 25秋招面试算法题 (Go版本)

    2024-07-14 12:18:03       25 阅读
  9. yii2 AssetBundle使用

    2024-07-14 12:18:03       22 阅读
  10. 如何使用IPython的并行计算能力处理大数据

    2024-07-14 12:18:03       23 阅读
  11. 如何定义版本号--语义化版本

    2024-07-14 12:18:03       21 阅读
  12. IOS热门面试题(一)

    2024-07-14 12:18:03       15 阅读