内连接查询
- 从哪个表中查
- 查哪些字段
- 条件是什么
1. 隐式内连接
使用where语句消除无用数据
示例
SELECT * FROM emp,dept WHERE emp.dept_id=dept.id;
例题1:查询所有员工信息与对应的部门信息
SELECT * FROM emp,dept WHERE emp.dept_id=dept.id;
例题2:查询员工表的姓名 性别 部门表的名称
SELECT t1.e_name,t1.gender, t2.dept_name FROM emp t1,dept t2 WHERE t1.dept_id = t2.id;
2. 显示内连接
语法
select 字段列表 from 表名1 [inner] join 表名2 on 条件
示例
1.完整写法
SELECT * FROM emp INNER JOIN dept ON emp.dept_id = dept.id;
2.省略 inner
SELECT * FROM emp JOIN dept ON emp.dept_id = dept.id;
3. 外连接查询
1. 左外连接
语法
select 字段列表 from 表1 left [outer] join 表2 on 条件;
示例
1.完整格式
SELECT * FROM emp LEFT OUTER JOIN dept ON emp.dept_id = dept.id;
2.省略格式
SELECT * FROM emp LEFT JOIN dept ON emp.dept_id = dept.id;
左外连接查询的是:在左表有的基础上,根据条件整合笛卡尔积的查询
如果我们想员工表中添加新的员工信息,表示新来的员工,但是在部门表中并没有给他添加部门信息,如果我们使用内连接会产生怎样的效果?
SELECT * FROM emp ,dept WHERE emp.dept_id = dept.id;
我们会发现,并不会将新添加的员工信息显示出来,因此我们就要用到了外连接
SELECT * FROM emp LEFT JOIN dept ON emp.dept_id = dept.id;
这个时候新添加的员工信息就显示出来了,但是如果我们使用右连接,发现又没有员工信息,这是因为使用右连接会以右表为基础对左表进行查询,求其交集,因为新添加的员工没有部门信息,因此也就没有交集,也就查不到员工信息。
SELECT * FROM emp RIGHT JOIN dept ON emp.dept_id = dept.id;
2. 右外连接
语法
select 字段列表 from 表1 right [outer] join 表2 on 条件;
示例
1.完整格式
SELECT * FROM emp RIGHT OUTER JOIN dept ON emp.dept_id = dept.id;
2.省略格式
SELECT * FROM emp RIGHT JOIN dept ON emp.dept_id = dept.id;
右外连接查询的是:在右表有的基础上,根据条件整合笛卡尔积的查询
4. 内连接和外连接区别
-
内连接,显示两个表中有联系的所有数据;
-
左链接,以左表为参照,显示所有数据;
-
右链接,以右表为参照显示数据;