表关系
- 一对一
- 一对多
- 多对多
表链接
内连接
-
自然连接:省略了where语句,自动进行等值匹配。
select * from A natural join b;
前提:两表中必须有相同的字段 -
等值连接 :查询emp表,dept表中员工的编号、姓名、部门名称
select * from emp e,dept d where e.deptno=d.deptno; -
不等值连接:查询工龄在3-5年之间的所有员工的姓名和部门编号,部门名称
select staff_id,staff_name from staff, dept where staff_work between 3 and 5 and staff_id = dept_id; -
自然连接和等值连接的区别
自然连接会把重复的字段去掉,而等值连接会全部显示)
自连接查询:自己去连接自己
-
查询emp表每位雇员的上级主管.
select w.ename,m.ename from emp w,emp m where w.mgr=m.empno; -
列出薪金比”SMITH”多的所有员工
select ename from emp where sal>(select sal from emp where ename =‘SMITH’);
外连接查询:即在被连接的表中加入一个空行来与没有匹配行的数据进行匹配。
使用背景:有时可能会要求检索一些在被连接的表中没有匹配行的数据。
-
左外连接(左表为主表,左表全部显示)没有(+)的代表主表
-
查询员工表中的所有信息和所属部门名称(没有部门的员工也显示) - 员工表为主
select * from emp e,dept d where e.deptno=d.deptno(+);select * from emp e left [outer] join dept d on(e.deptno=d.deptno);
-
-
右外连接(右表为主,右表全部显示)
select * from emp e,dept d where e.deptno(+)=d.deptno;select * from emp e right (outer) join dept d on(e.deptno=d.deptno);
-
完全连接:两个表中的数据全部显示,匹配不上的部分均用null代替
select * from emp e full join dept d on(e.deptno=d.deptno);