连接查询
定义:
将两个表或者两个以上的表以一定的连接条件连接起来,从中检索出满足条件的数据。
分类:
内连接,外连接,完全连接,交叉连接,自链接,联合。
内连接(重点中的重点,难点中的难点)
tip:顺序
select top...
from A
join B
on...
join C
on...
where...
group by...
having...
order by...
1.select ... from A, B 的用法;
产生的结果(把A表的每一条记录和B表的每一条记录组合在一起形成的是个笛卡尔积):
行数为A、B的乘积;
列数为A、B之和;
select * from emp,dept--输出70行11列
2.select ... from A, B where ... 的用法;
产生的结果:
对select ... from A, B
产生的笛卡尔积用where中的条件进行过滤。
select * from emp,dept
where empno = 7369--输出5行
3.select ... from A join B on ... 的用法;
产生的结果(join为连接on为连接条件):
select "E".ename "员工姓名", "D".dname "部门名称"
from emp "E"
join dept "D"
on "E".deptno = "D".deptno--输出14行2列
4.select ... from A, B where ...与select ... from A join B on ... 的比较;
select ... from A, B where ...(是SQL92标准)
select ... from A join B on ...(是SQL99标准)
比较:
SQL92标准与SQL99标准输出相同。
推荐使用SQL99标准:
1.SQL99更容易理解;
2.在SQL99中,on和where可以做不同的分工,on指定连接条件,where对连接之后的临时表的数据进行过滤。
例:SQL92实现方式
select *
from emp "E", dept "D"
where "E".sal > 2000 and "E".deptno = "D".deptno
例:SQL99实现方式
select *
from emp "E"
join dept "D"
on "E".deptno = "D".deptno
where "E".sal > 2000
5.select、from、where、join、on、group、order、top、having的混合使用;
6.习题
(1)求出每个员工的姓名,部门编号,薪水和薪水的等级。
(2)查找每个部门的编号,该部门所有员工的平均工资,平均工资等级。
(3)求出emp表中所有领导的姓名。
(4)求出平均薪水最高的部门的编号和部门的平均工资。
(5)把工资大于所有员工中工资最低的人中,前三人的姓名、工资、部门编号、部门名称、工资等级输出。