MySQL表连接查询

##内连接

  • 从多张表中提取数据,必须指定关联的条件。如果不定义关联条件就会出现无条件连接,两张表的数据会交叉连接,产生笛卡尔积。

  • 规定了连接条件的表连接语句,就不会出现笛卡尔积

# 查询底薪超过公司平均底薪的员工信息?
SELECT e.empno, e.ename, e.sal
FROM emp e
         JOIN
         (SELECT AVG(sal) avg FROM emp) t
         ON e.sal >= t.avg;

外连接

外连接的集中会保留不符合条件的记录。

  • 外连接有左外连接和右外连接,语法为LEFT JOIN和RIHGT JOIN

  • LEFT JOIN是把两个表中的左表记录全部保留与右表连接,如果右边没有符合ON条件的记录,就出NULL值与左表的值连接。

  • RIGHT JOIN是保留右表的全部记录。

UNION关键字是将多个查询语句的结果集进行合并
语法

(查询语句)
union
(查询语句)
union
(查询语句)
  • 结果集合并的前提是:字段的个数相同,字段的名称相同

例题:
查询每个部门的名称和部门的人数,如果没有部门的员工,部门名称用NULL代替


例题:查询每名员工的编号,姓名,部门,月薪,工资等级,工龄,上司编号,上司姓名,上司部

外连接的注意事项:

  • 内连接只保留符合条件的记录,所以查询条件写在ON子句和WHERE子句中的效果是相同的,但是外连接里,条件写在WHERE子句里,不符合条件的记录是会被过滤掉的,而不是保留下来。