select e.empno,e.ename,d.deptno,d.dname
from emp e,dept d
where e.deptno=d.deptno;
如果在上面的sql语句中首先运行from,然后运行select和where并使用别名,则以后在引用表时必须使用别名。 否则,如果别名最多为30个字符,则会发生错误
内部连接
select e.empno,e.ename,d.deptno,d.dname
来自EMP e
join dept d
on e.deptno=d.deptno
在from之后,直接连接两个表名的系统在对两个表进行正交乘积操作时生成笛卡儿积中间表。 该表相当于对两个集合进行乘法操作,参照两个集合进行乘法运算。 如果两个表都很大,中间表就会变大,内存容量也会变大
使用join操作时,将优先确定是否满足join后面的on条件,生成的结果不会太大
外部连接分为leftouterjoinrightouterjoinfullouterjoin
内部链接只能查询满足条件的结果。 左外部链接完全显示一个表或两个表中的数据
左连接和右连接也可以改为使用()。
)应放在缺少相应信息的一侧
左连接的主表是join左侧的表,显示主表的所有内容
select e.empno,e.ename,d.deptno,d.dnamefromempeleftjoindeptdone.deptno=d.deptno;
左链接加号
select e.empno,e.ename,d.deptno,d.dname from emp e,dept d where e.deptno=d.deptno (
上图是运行后的结果,从表中可以看到第15个数据的e.deptno为空,不符合连接条件,但显示出来
右链接
右连接的主表是join右侧的表,显示主表的所有内容
select e.empno,e.ename,d.deptno,d.dnamefromemperightjoindeptdone.deptno=d.deptno;
右链接加号
select e.empno,e.ename,d.deptno,d.dname from emp e,deptdwheree.deptno(=d.deptno
dept表中deptno=40的没有与emp表对应的数据,但在右连接中不能完全显示dept表的数据
完全外部连接
相当于左连和右连后去掉重量
select e.empno,e.ename,d.deptno,d.dnamefromempefulljoindeptdone.deptno=d.deptno;
与自然相连
表中始终自动连接相同的列
选择* from EMP e natural join dept;
只是限定理解有多不实用
自我连接
与自己的连接以scott的emp表为例,以mgr字段为该员工的领导号码,该表有主从关系
另外,因为要检查所有员工的领导及其号码,所以在下面用左边连接
select em2.empno领导的员工编号为、
em2.ename的读取器名称、
em1.empno员工编号、
em1.ename员工姓名、
em1 .启用mgr的领导的员工编号
来自EMP em 1
left join emp em2
on em1.mgr=em2.empno
order by em2.empno;
交叉连接
构造两块表的笛卡儿积
select * from emp cross join dept
几乎不能理解
总结一下
内部连接
只筛选满足条件的
外部链接
分为左外右外和完全外链接
左显示符合条件的表和左表不符合条件的右表只有符合条件的表
剩下的两种很少
自我连接
自己和自己连接的都是用一张表(自己),所以必须用别名