DAY14 MySQL学习笔记
多表查询概述
概述:指从多张表中查询数据
笛卡尔积:笛卡尔乘积是指在数学中,两个集合A集合和B集合的所有情况(在多表查询时,需要消除无效的笛卡尔积)
A集合:A,B
B集合:1,2,3,4
笛卡尔积:2*4=8种组合,即8条数据
SELECT * FROM emp, dept;
--emp一共17员工,dept有6个部门,最终展示是102条,这样的现象是笛卡尔积
如何消除笛卡尔积
SELECT * FROM emp, dept WHERE emp.dept_id = dept.id;
多表查询的分类
连接查询
内连接:相当于查询A, B交集部分数据
外连接:
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询右表所有数据,以及两张表交集部分数据
自连接:当前表与自身的连接查询,自连接查询,自连接必须使用表别名
子查询
连接查询-内连接
内连接查询语法:
隐式内连接
SELECT 字段列表 FROM 表1, 表2 WHERE 条件...;
显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;
示例
--1.查询每一个员工的姓名,及关联的部门的名称(隐式内连接实现)
--表结构:emp,dept
--连接条件:emp.dept_id = dept.id
SELECT emp.name, dept.name FROM emp, dept WHERE emp.dept_id = dept.id;
SELECT e.name, d.name FROM emp e, dept d WHERE e.dept_id = d.id; --起别名,不能直接通过表名限定字段
--2.查询每一个员工的姓名,及关联的部门的名称(显示内连接实现)
--表结构:emp,dept
--连接条件:emp.dept_id = dept.id
SELECT e.name, d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id;
--INNER可以省略
连接查询-外连接
左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
--相当于查询表1(左表)的所有数据包含表1和表2交集部分的数据
右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;
--相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据
示例
--1.查询emp表的所有数据,和对应的部门信息(左外连接)
--表结构:emp,dept
--连接条件:emp.dept_id = dept.id
SELECT emp.*, dept.name FROM emp LEFT [OUTER] JOIN dept ON emp.dept_id = dept.id;
--2.查询dept表的所有数据,和对应的员工信息(右外连接)
SELECT dept.*, emp.* FROM dept RIGHT [OUTER] JOIN emp ON dept.id = emp.dept_id;
日记:好久没更新,今天开始继续学习,加油

326

被折叠的 条评论
为什么被折叠?



