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子句里,不符合条件的记录是会被过滤掉的,而不是保留下来。