一、多表查询
多表查询,又称表联合查询,即一条sql语句涉及到的表有多张,数据通过特定的连接进行联合显示。
1)笛卡尔积
在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y.
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
在数据库中,如果直接查询俩张表,那么其查询结果就会产生笛卡尔积
例如:
select *
from s_emp,s_dept;
1)连接查询
为了在多表查询中避免笛卡尔积的产生,我们可以使用连接查询来解决这个问题。
连接查询分为:1.等值连接2.不等值连接3.外连接(左外连接,右外连接,全连接)4.自连接
a)等值连接
利用一张表中某列的值和另一张表中某列的值相等的关系,把俩张表连接起来。
例如:查询员工的名字、部门编号、部门名字
select last_name,dept_id,name
from s_emp,s_dept
where s_emp.dept_id=s_dept.id;
为了表述的更加清楚,可以给每张表起别名
select se.last_name,se.dept_id,sd.id,sd.name
from s_emp se,s_dept sd
where se.dept_id=sd.id;dep;
b)不等值连接: 通过范围确定
例如:查询出员工的名字、职位、工资、工资等级名称
SELECT e.last_name, e.title, e.salray, s.gradeName
FROM s_emp e, salgrade s
WHERE e.salray BETWEEN s.losal AND s