select ename,empno,deptno,dname from emp naturaljoin dept;
查询部门10的员工名称,部门编号,部门名称。
1
select ename, deptno, dname from emp naturaljoin dept where deptno =10;
join using()
有一种特殊情况,当两个要关联表的字段名是一样的,可以使用 USING,可减少 SQL 语句的长度。
自然连接也可以用join...using来实现。
1 2 3 4 5
select ename, deptno, dname from emp join dept using (deptno) where deptno =10;
join on
on连接,可做等值连接,非等值连接,自连接,可以解决一切连接,关系列必须要区分。
实例
使用on可以做等值连接。
1 2 3 4
select ename, empno, e.deptno, dname from emp e join dept d on e.deptno = d.deptno;
使用on还可以做非等值连接。
1 2
select ename,sal,deptno,grade from emp e join salgrade s on sal between losal and hisal;
查询30部门员工姓名,工资,部门编号,工资等级,部门名称。
数据来源:emp e, salgrade s, dept d
连接条件:sal between losal and hisal e.deptno=d.deptno
题意条件:e.deptno=30
1 2 3 4 5 6 7
select ename, sal, deptno, grade, dname from emp e join dept d on e.deptno = d.deptno join salgrade on e.sal between losal and hisal where e.deptno =30;
外连接
left [outer] join on
left [outer] join using
right [outer] join on
right [outer] join using
实例
查询员工编号,员工名称,上级编号,上级名称。
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配,如果右表中没有匹配,则结果为 NULL
1 2 3 4 5 6 7
select e.empno 员工编号, e.ename 员工名称, e.mgr 上级编号, m.ename 上级名称。 from emp e leftouterjoin emp m on e.mgr = m.empno;