多表查询简介

一、多表查询

1.1、笛卡尔积

定义: 笛卡尔积是一个数学概念,又称直积,它是指两个集合元素所有可能有序对的集合。

  • 例子:
    • A={a,b},B={c,d}
    • A*B ={(a,c),(b,c),(a,d),(b,d)}
  • 语法:select 字段名称 from 表1, 表2
SELECT * FROM dept,staff_info WHERE dept.id=staff_info.dept_id;

二、多表查询-内连接

2.1、内连接的定义

  • 内连接(INNER JOIN):使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,组合成新的记录。匹配上显示,匹配不上不显示。
  • 例子: 比如使用外键=主键这个条件过滤掉无效数据
  • 按语法结构分为: 隐式内连接和显式内连接

2.2、隐式内连接

  • 在笛卡尔积的的基础上,使用where条件过滤无用的数据,这种连接方式是隐式内连接.
  • 语法:select [字段名称] from 表1,表2 where [条件]
  • 例1: 筛选出运营部的员工的id,姓名以及所在城市
SELECT emp_id,ename,dept_location 
FROM emp_part,dept 
WHERE dept_id=id and dept_name="运营部";

2.3、显式内链接

  • 显式内连接: 使用 select [字段名称] from [表1]inner join [表2] on [条件] 这种方式
  • 列子: 用显式内连接查询运营部的员工的id,姓名以及所在城市
SELECT staff_id,staff_name,dept_name FROM dept INNER JOIN staff_info ON dept.id = staff_info.dept_id and id=2;

三、多表查询-外连接

3.1、外连接介绍

  • 外连接查询:查询多个表中相关联的行,有时候需要包含没有关联的行中数据,即返回查询结果集合中不仅包含符合连接条件的行,还包括左表(左连接)、右表(右连接)中的所有数据行。
  • 左外连接 , 使用 LEFT OUTER JOIN , OUTER 可以省略
  • 右外连接 , 使用 RIGHT OUTER JOIN , OUTER 可以省略

3.2、左连接

  • 左连接:以左表为基准匹配右表的数据,右表中没有的项,显示为空
  • 语法:SELECT [字段] FROM [左表] LEFT JOIN [右表] ON [条件]
  • 例子:公司新成立人力资源部,还未招聘员工,请使用左连接查询方式查询出公司所有部门员工的员工号,姓名,性别以及他们所在的部门名称和城市
SELECT staff_id,staff_name,dept_name,dept_location FROM dept LEFT JOIN staff_info ON id=dept_id;

3.3、右连接

  • 右连接:以右表为基准匹配左表的数据,左表中没有的项,显示为空
  • 语法:SELECT [字段] FROM [左表] RIGHT JOIN [右表] ON [条件]
  • 使用右连接的方式查询出所有员工信息以及他们所在的部门名称和城市
SELECT dept_name,dept_location,staff_id,staff_name FROM staff_info RIGHT JOIN dept ON id=dept_id;

3.4、总结

  • 内连接: inner join
  • 左连接: left join
  • 右连接: right join
  • 内连接和左连接使用居多