3.数据操纵语言(DML)
3.1 连接查询
—(1)内连接
—(2)外连接左外连接(LEFT JOIN) 返回左边表的所有行
右外连接(RIGHT JOIN) 返回右边表的所有行,实现
全外连接(FULL JOIN) 返回两个表的所有数据
交叉连接(CROSS JOIN) 返回连接表中所有数据行的笛卡尔积
(1)内连接:
SQL> --查询所有员工及其所在的部门信息
SQL> select e.ename,d.dname
from emp e join dept d
on e.deptno = d.deptno;
SQL> select e.ename,d.dname
from emp e join dept d
on e.deptno = d.deptno;
解释:
这条查询语句用到了表的别名,这里给emp表和dept表都起了别名e和d,主要是说要查询出员工的姓名和员工相对应所在的部门名称,这里还用到了表的连接‘join’,即emp表连接dept表,条件是‘e.deptno = d.deptno’。
SQL> --查询所有的管理者
SQL> select e1.ename,e2.ename
from emp e1,emp e2
SQL> select e1.ename,e2.ename
from emp e1,emp e2
where e1.mgr = e2.empno;
解释:
这里用到了自连接查询,即根据自身表的关系来查询,这里将emp表用了两次别名e1和e2,查找出e1中的与员工的管理者的编号 = e2中的员工编号,即查询出所有员工的对应管理者。
(2)左外连接:
SQL> --查询所有部门及其部门下的员工(没有与员工的部门也要查询出来)
SQL> select d.dname,e.ename
from dept d left joinemp e
on d.deptno = e.deptno;
SQL> select d.dname,e.ename
from dept d left joinemp e
on d.deptno = e.deptno;
解释:
左外连接可以简单的理解为将左边表的所有信息要显示出来,而右边表的显示与否则根据on后的条件来定。
SQL> --查询所有部门编号大于20及其部门下的员工
SQL> select d.*,e.ename
from dept d left join emp e
on d.deptno = e.deptno
where d.deptno > 20;
SQL> select d.*,e.ename
from dept d left join emp e
on d.deptno = e.deptno
where d.deptno > 20;
(3)全外连接:显示表的所有信息。
——SELECT e.empno,e.ename,d.dname FROM EMP e FULL JOIN dept d ON e.deptno=d.deptno
——SELECT e.empno,e.ename,d.dname FROM EMP e FULL JOIN dept d ON e.deptno=d.deptno