内连接 select * from emp ,dept 【行数是两表的行数相乘,列数是列数相加】 和select * from dept ,emp 相同【笛卡尔积emp的所有数据分别和dept中的每个数据组合一遍】
select * from emp ,dept where empno = 7369 【输出5行11列记录,从上面的临时表笛卡尔积中过滤】 select "E" .ename "员工姓名","D". dname "员工部门" --输出"E"即emp表中的ename,并取名为"员工姓名" from emp "E" --给emp表取个别名 join dept "D" --join是连接 on "E" .deptno ="D" .deptno --on为连接条件 ,【有join就必须有on】 --条件为E与D表中的deptno相同
select "E".ename "员工姓名" ,"D".deptno "员工部门" ,"S" .grade "工资等级" from emp "E" join dept "D" on "E".deptno="D".deptno 【连接三个表,用两个join on】 join SALGRADE "S" on "E".sal>= "S".losal and "E".sal<="S".HISAL --on "E".sal between "S".losal and "S".HISAL 【用between也可以】 外连接 用左表的第一行与右表所有航进行连接,然后再用第二行进行连接,依次类推 select * from emp "E" --左外连接,例子为emp在左边 left join dept "D" on "E".deptno="D".deptno 完全连接 两个表中匹配所有行记录,如果左边没有找到匹配的记录,那么左边为空,类此右边为空 full join…… on …… 交叉连接 select * from dept D --只是做笛卡尔积 cross join emp E 自连接 一张表和自己连接起来查询数据 select * from emp "E1" , emp "E2" 联合 union【若干个select子句的列数要是相同的,类型要兼容】 select "E1".ename ,"E1".sal, "E2".ename from emp "E1" join emp "E2" on "E1".mgr = "E2".EMPNO union --联合,表和表之间的数据以纵向的方式连接 select ename,sal,'最大老板' from emp where mgr is null
|