15.多表查询--内连接

1. 合并结果集

  • 只要从多张表查出来的数据的结果集列数和类型相同,就能合并
  • UNION ALL 不去重
SELECT deptno, dname FROM dept
UNION ALL
SELECT empno, ename FROM emp
  • UNION 去重
SELECT deptno, dname FROM dept
UNION
SELECT empno, ename FROM emp

内连接

1. 笛卡尔积
  • 直接查询2张表会产生笛卡尔积,即a表的每条数据都要匹配一次b表的每条数据,那么总数据就是 a表数据条数 * b表数据条数,这里面的有许多数据都不是我们需要的
SELECT * FROM emp, dept
笛卡尔积.png
  • 这里截取了12条数据,只有3条数据是我们需要的,条件就是emp.deptno = dept.deptno, 所以我们就可以用这个条件来去除笛卡尔积
SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno
去除笛卡尔积后的结果.png

2. 多表取指定列,以及表别名

  • 在多表中取出指定列来得到一个结果集,需要指定表名
  • 如查询员工名字、工作、工资、部门
SELECT emp.ename, emp.job, emp.sal, dept.dname 
FROM emp, dept
WHERE emp.deptno = dept.deptno
查询多表指定列.png
  • 有些时候,因为命名规范会造成表名过长,我们可以给表取别名来简化sql语句
SELECT e.ename, e.job, e.sal, d.dname 
FROM emp e, dept d
WHERE e.deptno = d.deptno
内连接的3种写法
  1. 方言, 只在mysql数据库中生效,也就是上面我们用的写法
SELECT * FROM 表1, 表2 WHERE表1.xx = 表2.xx
SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno
  1. 标准: sql规范
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.xx = 表2.xx
SELECT * FROM emp INNER JOIN dept ON emp.deptno = dept.deptno
  1. 自然:根据2张表中列名相同的列进行自动匹配
SELECT * FROM 表1 NATURAL JOIN 表2 
SELECT * FROM emp NATURAL JOIN dept
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容